1
0
Fork 0
forked from len0rd/rockbox

ID3DB: Reload database when returning from USB mode. Fixed reload_root issue in id3db browse mode. The database is now properly closed before entering USB mode.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6358 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2005-04-26 19:23:47 +00:00
parent e4e3bce3b0
commit 04ed408de9
3 changed files with 23 additions and 3 deletions

View file

@ -64,14 +64,14 @@
#define ID3DB_VERSION 2 #define ID3DB_VERSION 2
static int fd; static int fd = -1;
static int static int
songstart, albumstart, artiststart, filestart, songstart, albumstart, artiststart, filestart,
songcount, albumcount, artistcount, filecount, songcount, albumcount, artistcount, filecount,
songlen, songarraylen, genrelen, filelen, songlen, songarraylen, genrelen, filelen,
albumlen, albumarraylen, albumlen, albumarraylen,
artistlen, rundbdirty,initialized = 0; artistlen, rundbdirty, initialized = 0;
static int db_play_folder(struct tree_context* c); static int db_play_folder(struct tree_context* c);
static int db_search(struct tree_context* c, char* string); static int db_search(struct tree_context* c, char* string);
@ -137,6 +137,13 @@ int db_init(void)
return 0; return 0;
} }
void db_shutdown(void)
{
if (fd >= 0)
close(fd);
initialized = 0;
}
int db_load(struct tree_context* c) int db_load(struct tree_context* c)
{ {
int i, offset, rc; int i, offset, rc;

View file

@ -26,6 +26,7 @@ enum table { invalid, root, allsongs, allalbums, allartists,
search, searchartists, searchalbums, searchsongs }; search, searchartists, searchalbums, searchsongs };
int db_init(void); int db_init(void);
void db_shutdown(void);
int db_enter(struct tree_context* c); int db_enter(struct tree_context* c);
void db_exit(struct tree_context* c); void db_exit(struct tree_context* c);
int db_load(struct tree_context* c); int db_load(struct tree_context* c);

View file

@ -625,6 +625,12 @@ static bool check_changed_id3mode(bool currmode)
return currmode; return currmode;
} }
static void tree_prepare_usb(void *parameter)
{
(void) parameter;
db_shutdown();
}
static bool dirbrowse(void) static bool dirbrowse(void)
{ {
int numentries=0; int numentries=0;
@ -1121,8 +1127,10 @@ static bool dirbrowse(void)
#endif #endif
default: default:
if(default_event_handler(button) == SYS_USB_CONNECTED) if (default_event_handler_ex(button, tree_prepare_usb, NULL)
== SYS_USB_CONNECTED)
{ {
db_init(); /* re-init database */
if(*tc.dirfilter > NUM_FILTER_MODES) if(*tc.dirfilter > NUM_FILTER_MODES)
/* leave sub-browsers after usb, doing otherwise /* leave sub-browsers after usb, doing otherwise
might be confusing to the user */ might be confusing to the user */
@ -1160,6 +1168,10 @@ static bool dirbrowse(void)
if ( reload_root ) { if ( reload_root ) {
strcpy(currdir, "/"); strcpy(currdir, "/");
tc.dirlevel = 0; tc.dirlevel = 0;
tc.currtable = 0;
tc.currextra = 0;
lasttable = -1;
lastextra = -1;
reload_root = false; reload_root = false;
} }
if (! reload_dir ) if (! reload_dir )