X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fmeta_engine%2Ffolder.c;h=ae98de9438bf2ce6de5dfb3e2cd0c1fa9bb10984;hb=736cc6b8930b8c97f2cda4d1dc55c7de6f9701a0;hp=e6493e0e2e8d5545a72a26397196d8cba7843f78;hpb=c4afdf592d3f4261bf05aabefab0b1d3bbf0dd28;p=vlc diff --git a/modules/meta_engine/folder.c b/modules/meta_engine/folder.c index e6493e0e2e..ae98de9438 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 #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 *****************************************************************************/ @@ -54,25 +62,27 @@ static int FindMeta( vlc_object_t * ); * Module descriptor *****************************************************************************/ -vlc_module_begin(); - set_shortname( N_( "Folder" ) ); - set_description( N_("Folder meta data") ); - - set_capability( "art finder", 90 ); - set_callbacks( FindMeta, NULL ); -vlc_module_end(); +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 () /***************************************************************************** *****************************************************************************/ 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,48 +90,47 @@ static int FindMeta( vlc_object_t *p_this ) if( !psz_dir ) return VLC_EGENERIC; - char *psz_buf = strrchr( psz_dir, '/' ); - if( psz_buf ) - { - psz_buf++; - *psz_buf = '\0'; - } - else + char *psz_path = psz_dir; + if( strncmp( psz_path, "file://", 7 ) || !decode_URI( psz_path + 7 ) ) { - *psz_dir = '\0'; + free( psz_dir ); + return VLC_EGENERIC; } - char *psz_path = psz_dir; - if( !strncmp( psz_path, "file://", 7 ) ) - psz_path += 7; +#if defined(WIN32) && !defined(UNDER_CE) + psz_path += 8; +#else + psz_path += 7; +#endif + + char *psz_buf = strrchr( psz_path, '/' ); + if( psz_buf ) + *++psz_buf = '\0'; + else + *psz_path = '\0'; /* relative path */ - 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( utf8_stat( psz_filename, &a ) != -1 ) { - input_item_SetArtURL( p_item, psz_filename ); - b_have_art = true; + char *psz_uri = make_URI( psz_filename ); + if( psz_uri ) + { + input_item_SetArtURL( p_item, psz_uri ); + free( psz_uri ); + b_have_art = true; + } } }