diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/plugins/searchengine/dbinterface.c | 6 | ||||
-rw-r--r-- | apps/plugins/searchengine/dbinterface.h | 46 | ||||
-rw-r--r-- | apps/plugins/searchengine/token.c | 20 |
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 | ||
35 | struct entry *currententry; | 35 | struct entry *currententry; |
36 | 36 | struct dbglobals dbglobal; | |
37 | static struct entry *entryarray; | 37 | static struct entry *entryarray; |
38 | 38 | ||
39 | int database_init() { | 39 | int 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 | ||
89 | void loadsongdata() { | 93 | void 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 | ****************************************************************************/ |
19 | struct dbglobals { | ||
20 | int playcountmin; | ||
21 | int playcountmax; | ||
22 | int gotplaycountlimits; | ||
23 | int currententryindex; | ||
24 | }; | ||
25 | |||
19 | struct entry { | 26 | struct 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 | ||
41 | extern struct entry *currententry; | 48 | extern struct entry *currententry; |
42 | extern struct entry *entryarray; | 49 | extern struct entry *entryarray; |
50 | extern struct dbglobals dbglobal; | ||
43 | 51 | ||
44 | int database_init(void); | 52 | int database_init(void); |
45 | void loadentry(int filerecord); | 53 | void 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 | ||
58 | int getvalue(struct token *token) { | 58 | int 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); |