# HG changeset patch # User nenolod # Date 1152014367 25200 # Node ID ca4f3115d33ce5e71ec7d1fd9f18f211555cd2e6 # Parent f969fe2464973fac9af06615cbb4a958804a2add [svn] - recursively locate album art, by external contributor Oliver Lumpton. diff -r f969fe246497 -r ca4f3115d33c ChangeLog --- a/ChangeLog Tue Jul 04 00:48:43 2006 -0700 +++ b/ChangeLog Tue Jul 04 04:59:27 2006 -0700 @@ -1,3 +1,12 @@ +2006-07-04 07:48:43 +0000 William Pitcock + revision [1654] + - make this a compile-time define + + + Changes: Modified: + +2 -1 trunk/Plugins/Input/mpg123/common.c + + 2006-07-04 07:46:20 +0000 William Pitcock revision [1652] - bitch about invalid bitstreams right in the middle of our stream diff -r f969fe246497 -r ca4f3115d33c audacious/ui_fileinfo.c --- a/audacious/ui_fileinfo.c Tue Jul 04 00:48:43 2006 -0700 +++ b/audacious/ui_fileinfo.c Tue Jul 04 04:59:27 2006 -0700 @@ -304,7 +304,6 @@ fileinfo_show_for_tuple(TitleInput *tuple) { gchar *tmp; - GDir *d; if (tuple == NULL) return; @@ -324,36 +323,72 @@ if (tuple->track_number != 0) fileinfo_entry_set_text_free("entry_track", g_strdup_printf("%d", tuple->track_number)); - d = g_dir_open(tuple->file_path, 0, NULL); + tmp = fileinfo_recursive_get_image(tuple->file_path, 0); + + if(tmp) + { + fileinfo_entry_set_image("image_artwork", tmp); + g_free(tmp); + } + + gtk_widget_show(fileinfo_win); +} + +gchar* +fileinfo_recursive_get_image(const gchar* path, gint depth) +{ + GDir *d; + + if(depth > 3) + return NULL; + + d = g_dir_open(path, 0, NULL); + if (d) { const gchar *f = g_dir_read_name(d); - while(f) + + while (f) { + gchar *newpath = g_strdup_printf("%s/%s", path, f); + /* ok. why did I not have strcasestr, thought glib had that one */ if ((strstr(f,".jpg") || strstr(f,".jpeg") || strstr(f,".png") || strstr(f,".JPG") || strstr(f,".JPEG") || strstr(f,".PNG")) && !strstr(f,"back") && !strstr(f,"Back") && !strstr(f,"BACK")) { - tmp = g_strdup_printf("%s/%s", tuple->file_path, f); - fileinfo_entry_set_image("image_artwork", tmp); - g_free(tmp); - f = NULL; + /* We found a suitable file in the current directory, use that. The string will be freed by the caller */ + return newpath; } else { - f = g_dir_read_name(d); + /* File/directory wasn't suitable, try and recurse into it. + * This should either return a filename for a image file, + * or NULL if there was no suitable file, or 'f' wasn't a dir. + */ + gchar *tmp = fileinfo_recursive_get_image(newpath, depth+1); + + if(tmp) + { + g_free(newpath); + return tmp; + } + else + { + /* Not got anything, move onto the next item in the directory */ + f = g_dir_read_name(d); + } } } + g_dir_close(d); } - - gtk_widget_show(fileinfo_win); + + return NULL; } void filepopup_show_for_tuple(TitleInput *tuple) { gchar *tmp; - GDir *d; gint x, y, x_off = 3, y_off = 3, h, w; if (tuple == NULL) @@ -375,28 +410,14 @@ if (tuple->track_number != 0) filepopup_entry_set_text_free("label_track", g_strdup_printf("%d", tuple->track_number)); - d = g_dir_open(tuple->file_path, 0, NULL); - if (d) - { - const gchar *f = g_dir_read_name(d); - while(f) - { - /* ok. why did I not have strcasestr, thought glib had that one */ - if ((strstr(f,".jpg") || strstr(f,".jpeg") || strstr(f,".png") || strstr(f,".JPG") || strstr(f,".JPEG") || strstr(f,".PNG")) && !strstr(f,"back") && !strstr(f,"Back") && !strstr(f,"BACK")) - { - tmp = g_strdup_printf("%s/%s", tuple->file_path, f); - filepopup_entry_set_image("image_artwork", tmp); - g_free(tmp); - f = NULL; - } - else - { - f = g_dir_read_name(d); - } - } - g_dir_close(d); + tmp = fileinfo_recursive_get_image(tuple->file_path, 0); + + if(tmp) + { + filepopup_entry_set_image("image_artwork", tmp); + g_free(tmp); } - + gdk_window_get_pointer(NULL, &x, &y, NULL); gtk_window_get_size(GTK_WINDOW(filepopup_win), &w, &h); if (gdk_screen_width()-(w+3) < x) x_off = (w*-1)-3; diff -r f969fe246497 -r ca4f3115d33c audacious/ui_fileinfo.h --- a/audacious/ui_fileinfo.h Tue Jul 04 00:48:43 2006 -0700 +++ b/audacious/ui_fileinfo.h Tue Jul 04 04:59:27 2006 -0700 @@ -25,6 +25,7 @@ void create_filepopup_window(void); void fileinfo_show_for_tuple(TitleInput *tuple); void filepopup_show_for_tuple(TitleInput *tuple); +gchar* fileinfo_recursive_get_image(const gchar* path, gint depth); void fileinfo_show_for_path(gchar *path); void filepopup_hide(gpointer unused);