1
0
Fork 0
forked from len0rd/rockbox

First runtime database support, self repairing, only playcount works for now,

which is still rather crude; playcount gets increased even if the song started playback but was skipped... track rating should be trivial to add, autorating also works since its based on playcount.


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6969 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Michiel Van Der Kolk 2005-07-01 17:29:44 +00:00
parent 4ec80704d5
commit c735ed7914
11 changed files with 242 additions and 45 deletions

View file

@ -88,7 +88,7 @@
struct token {
char kind;
char spelling[SPELLING_LENGTH + 1];
char spelling[SPELLING_LENGTH + 3];
long intvalue;
};
char *tokentypetostring(int tokentype);

View file

@ -29,6 +29,7 @@
#define FILEENTRY_SIZE (rb->tagdbheader->filelen+12)
#define ALBUMENTRY_SIZE (rb->tagdbheader->albumlen+4+rb->tagdbheader->songarraylen*4)
#define ARTISTENTRY_SIZE (rb->tagdbheader->artistlen+rb->tagdbheader->albumarraylen*4)
#define RUNDBENTRY_SIZE 20
#define FILERECORD2OFFSET(_x_) (rb->tagdbheader->filestart + _x_ * FILEENTRY_SIZE)
@ -45,7 +46,7 @@ int database_init() {
// zero all entries.
for(i=0;i<sizeof(struct entry)*rb->tagdbheader->filecount;i++)
*(p++)=0;
if(*rb->tagdb_initialized!=1) {
if(!*rb->tagdb_initialized) {
if(!rb->tagdb_init()) {
// failed loading db
return -1;
@ -110,8 +111,18 @@ void loadsongdata() {
}
void loadrundbdata() {
// we don't do this yet.
currententry->loadedrundbdata=1;
if(!*rb->rundb_initialized)
return;
if(currententry->rundbentry==-1)
return;
rb->lseek(*rb->rundb_fd,currententry->rundbentry,SEEK_SET);
currententry->rundbfe=readlong(*rb->rundb_fd);
currententry->rundbhash=readlong(*rb->rundb_fd);
currententry->rating=readshort(*rb->rundb_fd);
currententry->voladj=readshort(*rb->rundb_fd);
currententry->playcount=readlong(*rb->rundb_fd);
currententry->lastplayed=readlong(*rb->rundb_fd);
}
void loadartistname() {

View file

@ -30,13 +30,15 @@ struct entry {
loadedalbumname,
loadedartistname;
char *filename;
long hash;
long songentry;
long hash,rundbhash;
long songentry,rundbfe;
long rundbentry;
short year;
short bitrate;
long rating;
short rating;
long playcount;
long lastplayed;
short voladj;
char *title;
char *genre;
long artistoffset;

View file

@ -54,13 +54,12 @@
#define INTVALUE_GENRE 17
#define INTVALUE_FILENAME 18
/* static char *spelling[] = { "not", "and", "or",">",">=","<", "<=","==","!=",
"contains","(",")" }; */
#define SPELLING_LENGTH 100
struct token {
unsigned char kind;
char spelling[255]; // 255 should make it aligned again..
long intvalue;
char kind;
char spelling[SPELLING_LENGTH + 3];
long intvalue;
};
char *getstring(struct token *token);