From f48cf6255893db537d76752c2161773e7b927a51 Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Wed, 2 Jul 2008 09:16:26 +0000 Subject: fix the random folder behaviour by not letting it start folders which dont have music in them (but were being started before because it has subdirs with music) Hopefully fixes FS#7077 git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17912 a1c6a512-1295-4272-9138-f99709370657 --- apps/playlist.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'apps') diff --git a/apps/playlist.c b/apps/playlist.c index 8f800f616b..53becb9fc1 100644 --- a/apps/playlist.c +++ b/apps/playlist.c @@ -179,7 +179,7 @@ static int get_filename(struct playlist_info* playlist, int index, int seek, static int get_next_directory(char *dir); static int get_next_dir(char *dir, bool is_forward, bool recursion); static int get_previous_directory(char *dir); -static int check_subdir_for_music(char *dir, char *subdir); +static int check_subdir_for_music(char *dir, char *subdir, bool recurse); static int format_track_path(char *dest, char *src, int buf_length, int max, const char *dir); static void display_playlist_count(int count, const unsigned char *fmt, @@ -1475,7 +1475,6 @@ static int get_next_dir(char *dir, bool is_forward, bool recursion) bool exit = false; struct tree_context* tc = tree_get_context(); int dirfilter = *(tc->dirfilter); - if (global_settings.next_folder == FOLDER_ADVANCE_RANDOM) { int fd = open(ROCKBOX_DIR "/folder_advance_list.dat",O_RDONLY); @@ -1493,7 +1492,7 @@ static int get_next_dir(char *dir, bool is_forward, bool recursion) i = rand()%folder_count; lseek(fd,sizeof(int) + (MAX_PATH*i),SEEK_SET); read(fd,buffer,MAX_PATH); - if (check_subdir_for_music(buffer,"") ==0) + if (check_subdir_for_music(buffer, "", false) ==0) exit = true; } if (folder_count) @@ -1561,7 +1560,7 @@ static int get_next_dir(char *dir, bool is_forward, bool recursion) { if (!start_dir) { - result = check_subdir_for_music(dir, files[i].name); + result = check_subdir_for_music(dir, files[i].name, true); if (result != -1) { exit = true; @@ -1604,7 +1603,7 @@ static int get_next_dir(char *dir, bool is_forward, bool recursion) * Checks if there are any music files in the dir or any of its * subdirectories. May be called recursively. */ -static int check_subdir_for_music(char *dir, char *subdir) +static int check_subdir_for_music(char *dir, char *subdir, bool recurse) { int result = -1; int dirlen = strlen(dir); @@ -1639,8 +1638,8 @@ static int check_subdir_for_music(char *dir, char *subdir) if (has_music) return 0; - - if (has_subdir) + + if (has_subdir && recurse) { for (i=0; i