diff options
| author | Michiel Van Der Kolk <not.valid@email.address> | 2005-07-01 17:29:44 +0000 |
|---|---|---|
| committer | Michiel Van Der Kolk <not.valid@email.address> | 2005-07-01 17:29:44 +0000 |
| commit | c735ed79142a0260fc05d58cb0672e5d1720a26a (patch) | |
| tree | 3fd67eb9fb598e9b8bc0c3003ec3bf037379ebb4 /apps/plugins | |
| parent | 4ec80704d5f34a167d45db7539f47b12cc23c59e (diff) | |
| download | rockbox-c735ed79142a0260fc05d58cb0672e5d1720a26a.zip rockbox-c735ed79142a0260fc05d58cb0672e5d1720a26a.tar.gz rockbox-c735ed79142a0260fc05d58cb0672e5d1720a26a.tar.bz2 rockbox-c735ed79142a0260fc05d58cb0672e5d1720a26a.tar.xz | |
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
Diffstat (limited to 'apps/plugins')
| -rw-r--r-- | apps/plugins/databox/edittoken.h | 2 | ||||
| -rw-r--r-- | apps/plugins/searchengine/dbinterface.c | 15 | ||||
| -rw-r--r-- | apps/plugins/searchengine/dbinterface.h | 8 | ||||
| -rw-r--r-- | apps/plugins/searchengine/token.h | 9 |
4 files changed, 23 insertions, 11 deletions
diff --git a/apps/plugins/databox/edittoken.h b/apps/plugins/databox/edittoken.h index 77c948b..2fcb874 100644 --- a/apps/plugins/databox/edittoken.h +++ b/apps/plugins/databox/edittoken.h @@ -88,7 +88,7 @@ struct token { char kind; - char spelling[SPELLING_LENGTH + 1]; + char spelling[SPELLING_LENGTH + 3]; long intvalue; }; char *tokentypetostring(int tokentype); diff --git a/apps/plugins/searchengine/dbinterface.c b/apps/plugins/searchengine/dbinterface.c index c098079..e105106 100644 --- a/apps/plugins/searchengine/dbinterface.c +++ b/apps/plugins/searchengine/dbinterface.c @@ -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() { diff --git a/apps/plugins/searchengine/dbinterface.h b/apps/plugins/searchengine/dbinterface.h index 98596ae..b168456 100644 --- a/apps/plugins/searchengine/dbinterface.h +++ b/apps/plugins/searchengine/dbinterface.h @@ -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; diff --git a/apps/plugins/searchengine/token.h b/apps/plugins/searchengine/token.h index cd33769..6deecd8 100644 --- a/apps/plugins/searchengine/token.h +++ b/apps/plugins/searchengine/token.h @@ -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); |