X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fmeta_engine%2Ffolder.c;h=99c640ce0a3efd52d6f2fafdb3231e6ea9c0f704;hb=470ce70b69e1530173950a8dfd6d274a70caa7bc;hp=36e5ae302d46c2ac26a3b9e8fd212089db623a07;hpb=05492281965ed211badf7e1f4c2220be720d3356;p=vlc diff --git a/modules/meta_engine/folder.c b/modules/meta_engine/folder.c index 36e5ae302d..99c640ce0a 100644 --- a/modules/meta_engine/folder.c +++ b/modules/meta_engine/folder.c @@ -31,11 +31,10 @@ #include #include -#include -#include -#include -#include -#include +#include +#include +#include +#include #ifdef HAVE_SYS_STAT_H # include @@ -45,6 +44,15 @@ # define MAX_PATH 250 #endif +static const char* cover_files[] = { + "Folder.jpg", /* Windows */ + "AlbumArtSmall.jpg", /* Windows */ + ".folder.png", /* KDE? */ + "cover.jpg", /* rockbox */ +}; + +static const int i_covers = (sizeof(cover_files)/sizeof(cover_files[0])); + /***************************************************************************** * Local prototypes *****************************************************************************/ @@ -57,7 +65,8 @@ static int FindMeta( vlc_object_t * ); vlc_module_begin () set_shortname( N_( "Folder" ) ) set_description( N_("Folder meta data") ) - + add_file( "album-art-filename", NULL, NULL, + N_("Album art filename"), N_("Filename to look for album art in current directory"), false ); set_capability( "art finder", 90 ) set_callbacks( FindMeta, NULL ) vlc_module_end () @@ -66,13 +75,14 @@ vlc_module_end () *****************************************************************************/ static int FindMeta( vlc_object_t *p_this ) { - playlist_t *p_playlist = (playlist_t *)p_this; - input_item_t *p_item = (input_item_t *)(p_playlist->p_private); + art_finder_t *p_finder = (art_finder_t *)p_this; + input_item_t *p_item = p_finder->p_item; bool b_have_art = false; - int i = 0; + int i; struct stat a; char psz_filename[MAX_PATH]; + if( !p_item ) return VLC_EGENERIC; @@ -80,52 +90,42 @@ static int FindMeta( vlc_object_t *p_this ) if( !psz_dir ) return VLC_EGENERIC; - char *psz_buf = strrchr( psz_dir, '/' ); + char *psz_path = make_path( psz_dir ); + free( psz_dir ); + if( psz_path == NULL ) + return VLC_EGENERIC; + + char *psz_buf = strrchr( psz_path, DIR_SEP_CHAR ); if( psz_buf ) - { - psz_buf++; - *psz_buf = '\0'; - } + *++psz_buf = '\0'; else - { - *psz_dir = '\0'; - } + *psz_path = '\0'; /* relative path */ - char *psz_path = psz_dir; - if( !strncmp( psz_path, "file://", 7 ) ) - psz_path += 7; - - for( i = 0; b_have_art == false && i < 3; i++ ) + for( i = -1; !b_have_art && i < i_covers; i++ ) { - switch( i ) + if( i == -1 ) /* higher priority : configured filename */ { - case 0: - /* Windows Folder.jpg */ - snprintf( psz_filename, MAX_PATH, - "file://%sFolder.jpg", psz_path ); - break; - - case 1: - /* Windows AlbumArtSmall.jpg == small version of Folder.jpg */ - snprintf( psz_filename, MAX_PATH, - "file://%sAlbumArtSmall.jpg", psz_path ); - break; - - case 2: - /* KDE (?) .folder.png */ - snprintf( psz_filename, MAX_PATH, - "file://%s.folder.png", psz_path ); - break; + char *psz_userfile = var_InheritString( p_this, "album-art-filename" ); + if( !psz_userfile ) + continue; + snprintf( psz_filename, MAX_PATH, "%s%s", psz_path, psz_userfile ); + free( psz_userfile ); } + else + snprintf( psz_filename, MAX_PATH, "%s%s", psz_path, cover_files[i] ); - if( utf8_stat( psz_filename+7, &a ) != -1 ) + if( vlc_stat( psz_filename, &a ) != -1 ) { - input_item_SetArtURL( p_item, psz_filename ); - b_have_art = true; + char *psz_uri = make_URI( psz_filename, "file" ); + if( psz_uri ) + { + input_item_SetArtURL( p_item, psz_uri ); + free( psz_uri ); + b_have_art = true; + } } } - - free( psz_dir ); + free( psz_path ); return b_have_art ? VLC_SUCCESS : VLC_EGENERIC; }