summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichiel Van Der Kolk <not.valid@email.address>2005-05-11 00:12:33 +0000
committerMichiel Van Der Kolk <not.valid@email.address>2005-05-11 00:12:33 +0000
commitf34e4ff6a42a003bcfc063896f390dcb94052cde (patch)
tree2678613f7014d9a7d86987e3dab02fdb2c211ad3
parentf5eae08361c4b1c9d7c846c7b4b54fabf7467e31 (diff)
downloadrockbox-f34e4ff6a42a003bcfc063896f390dcb94052cde.tar.gz
rockbox-f34e4ff6a42a003bcfc063896f390dcb94052cde.zip
Autorating should work now. at least. it would. but there is no runtime data to work with (yet)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6455 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/searchengine/dbinterface.c6
-rw-r--r--apps/plugins/searchengine/dbinterface.h46
-rw-r--r--apps/plugins/searchengine/token.c20
3 files changed, 50 insertions, 22 deletions
diff --git a/apps/plugins/searchengine/dbinterface.c b/apps/plugins/searchengine/dbinterface.c
index 7cded01642..fe3ff2dd45 100644
--- a/apps/plugins/searchengine/dbinterface.c
+++ b/apps/plugins/searchengine/dbinterface.c
@@ -33,7 +33,7 @@
33#define FILERECORD2OFFSET(_x_) (rb->tagdbheader->filestart + _x_ * FILEENTRY_SIZE) 33#define FILERECORD2OFFSET(_x_) (rb->tagdbheader->filestart + _x_ * FILEENTRY_SIZE)
34 34
35struct entry *currententry; 35struct entry *currententry;
36 36struct dbglobals dbglobal;
37static struct entry *entryarray; 37static struct entry *entryarray;
38 38
39int database_init() { 39int database_init() {
@@ -51,6 +51,9 @@ int database_init() {
51 return -1; 51 return -1;
52 } 52 }
53 } 53 }
54 dbglobal.playcountmin=0;
55 dbglobal.playcountmax=0;
56 dbglobal.gotplaycountlimits=0;
54 return 0; 57 return 0;
55} 58}
56 59
@@ -84,6 +87,7 @@ void loadentry(int filerecord) {
84 entryarray[filerecord].loadedfiledata=1; 87 entryarray[filerecord].loadedfiledata=1;
85 } 88 }
86 currententry=&entryarray[filerecord]; 89 currententry=&entryarray[filerecord];
90 dbglobal.currententryindex=filerecord;
87} 91}
88 92
89void loadsongdata() { 93void loadsongdata() {
diff --git a/apps/plugins/searchengine/dbinterface.h b/apps/plugins/searchengine/dbinterface.h
index ef90d63483..6a33248166 100644
--- a/apps/plugins/searchengine/dbinterface.h
+++ b/apps/plugins/searchengine/dbinterface.h
@@ -16,30 +16,38 @@
16 * KIND, either express or implied. 16 * KIND, either express or implied.
17 * 17 *
18 ****************************************************************************/ 18 ****************************************************************************/
19struct dbglobals {
20 int playcountmin;
21 int playcountmax;
22 int gotplaycountlimits;
23 int currententryindex;
24};
25
19struct entry { 26struct entry {
20 int loadedfiledata, 27 int loadedfiledata,
21 loadedsongdata, 28 loadedsongdata,
22 loadedrundbdata, 29 loadedrundbdata,
23 loadedalbumname, 30 loadedalbumname,
24 loadedartistname; 31 loadedartistname;
25 char *filename; 32 char *filename;
26 long hash; 33 long hash;
27 long songentry; 34 long songentry;
28 long rundbentry; 35 long rundbentry;
29 short year; 36 short year;
30 short bitrate; 37 short bitrate;
31 long rating; 38 long rating;
32 long playcount; 39 long playcount;
33 char *title; 40 char *title;
34 char *genre; 41 char *genre;
35 long artistoffset; 42 long artistoffset;
36 long albumoffset; 43 long albumoffset;
37 char *artistname; 44 char *artistname;
38 char *albumname; 45 char *albumname;
39}; 46};
40 47
41extern struct entry *currententry; 48extern struct entry *currententry;
42extern struct entry *entryarray; 49extern struct entry *entryarray;
50extern struct dbglobals dbglobal;
43 51
44int database_init(void); 52int database_init(void);
45void loadentry(int filerecord); 53void loadentry(int filerecord);
diff --git a/apps/plugins/searchengine/token.c b/apps/plugins/searchengine/token.c
index d8cd64072f..5950605ade 100644
--- a/apps/plugins/searchengine/token.c
+++ b/apps/plugins/searchengine/token.c
@@ -57,6 +57,7 @@ char *getstring(struct token *token) {
57 57
58int getvalue(struct token *token) { 58int getvalue(struct token *token) {
59 char buf[200]; 59 char buf[200];
60 int index,i;
60 switch(token->kind) { 61 switch(token->kind) {
61 case TOKEN_NUM: 62 case TOKEN_NUM:
62 return token->intvalue; 63 return token->intvalue;
@@ -72,8 +73,23 @@ int getvalue(struct token *token) {
72 loadrundbdata(); 73 loadrundbdata();
73 return currententry->playcount; 74 return currententry->playcount;
74 case INTVALUE_AUTORATING: 75 case INTVALUE_AUTORATING:
75 // todo. 76 if(!dbglobal.gotplaycountlimits) {
76 return 0; 77 index=dbglobal.currententryindex;
78 dbglobal.playcountmax=0;
79 dbglobal.playcountmin=0xFFFFFFFF;
80 for(i=0;i<rb->tagdbheader->filecount;i++) {
81 loadentry(i);
82 loadrundbdata();
83 if(currententry->playcount>dbglobal.playcountmax)
84 dbglobal.playcountmax=currententry->playcount;
85 if(currententry->playcount<dbglobal.playcountmin)
86 dbglobal.playcountmin=currententry->playcount;
87 }
88 dbglobal.gotplaycountlimits=1;
89 loadentry(index);
90 }
91 loadrundbdata();
92 return (currententry->playcount-dbglobal.playcountmin)*10/(dbglobal.playcountmax-dbglobal.playcountmin);
77 default: 93 default:
78 rb->snprintf(buf,199,"unknown numid intvalue %d",token->intvalue); 94 rb->snprintf(buf,199,"unknown numid intvalue %d",token->intvalue);
79 rb->splash(HZ*2,true,buf); 95 rb->splash(HZ*2,true,buf);