Added ID3 database support for individual tracks in the context menu

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7421 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Linus Nielsen Feltzing 2005-08-30 07:52:36 +00:00
parent d565269cfa
commit 196376c3c2
4 changed files with 34 additions and 10 deletions

View file

@ -478,6 +478,22 @@ void db_exit(struct tree_context* c)
c->firstpos = c->pos_history[c->dirlevel];
}
int db_get_filename(struct tree_context* c, char *buf, int buflen)
{
int rc;
int filenum = c->dircursor + c->dirstart;
int pathoffset = ((int*)c->dircache)[filenum * c->dentry_size + 1];
lseek(tagdb_fd, pathoffset, SEEK_SET);
rc = read(tagdb_fd, buf, buflen);
if (rc < tagdbheader.songlen) {
DEBUGF("short path read(%ld) = %d\n", sizeof(buf), rc);
return -2;
}
return 0;
}
static int db_play_folder(struct tree_context* c)
{
char buf[MAX_PATH];

View file

@ -34,8 +34,7 @@ const char* db_get_icon(struct tree_context* c);
#else
int db_get_icon(struct tree_context* c);
#endif
int db_get_filename(struct tree_context* c, char *buf, int buflen);
#endif

View file

@ -278,7 +278,7 @@ static bool playlist_options(void)
pstart++;
}
if (context == CONTEXT_TREE)
if (context == CONTEXT_TREE || context == CONTEXT_ID3DB)
{
if (audio_status() & AUDIO_STATUS_PLAY)
{
@ -536,7 +536,8 @@ int onplay(char* file, int attr, int from)
if (context == CONTEXT_WPS ||
context == CONTEXT_TREE ||
context == CONTEXT_ID3DB)
((context == CONTEXT_ID3DB) &&
(attr & TREE_ATTR_MASK) == TREE_ATTR_MPA))
{
items[i].desc = ID2P(LANG_PLAYLIST);
items[i].function = playlist_options;

View file

@ -1041,13 +1041,8 @@ static bool dirbrowse(void)
if(!numentries)
onplay_result = onplay(NULL, 0, curr_context);
else {
if (currdir[1])
snprintf(buf, sizeof buf, "%s/%s",
currdir, dircache[tc.dircursor+tc.dirstart].name);
else
snprintf(buf, sizeof buf, "/%s",
dircache[tc.dircursor+tc.dirstart].name);
if (id3db)
{
switch (tc.currtable)
{
case allsongs:
@ -1055,10 +1050,23 @@ static bool dirbrowse(void)
case songs4artist:
case searchsongs:
attr=TREE_ATTR_MPA;
db_get_filename(&tc, buf, sizeof(buf));
break;
}
}
else
{
attr = dircache[tc.dircursor+tc.dirstart].attr;
if (currdir[1])
snprintf(buf, sizeof buf, "%s/%s",
currdir,
dircache[tc.dircursor+tc.dirstart].name);
else
snprintf(buf, sizeof buf, "/%s",
dircache[tc.dircursor+tc.dirstart].name);
}
onplay_result = onplay(buf, attr, curr_context);
}