vlc | branch: master | Thomas Guillem <[email protected]> | Thu Aug 22 11:35:50 2019 +0200| [f6b2e629a79374a1185cae18e77be3624d7b8d79] | committer: Thomas Guillem
preparser: fix cover mismatch with albums having the same name Yes, some artists can have multiple albums with the same name, cf. https://www.discogs.com/fr/artist/700759-The-Spits?filter_anv=0&subtype=Albums&type=Releases This doesn't solve the problem if such artists produce more than one album per year. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f6b2e629a79374a1185cae18e77be3624d7b8d79 --- src/preparser/art.c | 20 +++++++++++++++----- src/preparser/fetcher.c | 6 ++++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/preparser/art.c b/src/preparser/art.c index ad4b677d52..f7dabbd725 100644 --- a/src/preparser/art.c +++ b/src/preparser/art.c @@ -58,7 +58,8 @@ static void ArtCacheCreateDir( const char *psz_dir ) } static char* ArtCacheGetDirPath( const char *psz_arturl, const char *psz_artist, - const char *psz_album, const char *psz_title ) + const char *psz_album, const char *psz_date, + const char *psz_title ) { char *psz_dir; char *psz_cachedir = config_GetUserDir(VLC_CACHE_DIR); @@ -81,12 +82,20 @@ static char* ArtCacheGetDirPath( const char *psz_arturl, const char *psz_artist, return NULL; } filename_sanitize( psz_artist_sanitized ); + + char *psz_date_sanitized = !EMPTY_STR(psz_date) ? strdup( psz_date ) : NULL; + if (psz_date_sanitized) + filename_sanitize(psz_date_sanitized); + if( asprintf( &psz_dir, "%s" DIR_SEP "art" DIR_SEP "artistalbum" - DIR_SEP "%s" DIR_SEP "%s", psz_cachedir, - psz_artist_sanitized, psz_album_sanitized ) == -1 ) + DIR_SEP "%s" DIR_SEP "%s" DIR_SEP "%s", psz_cachedir, + psz_artist_sanitized, + psz_date_sanitized ? psz_date_sanitized : "0000", + psz_album_sanitized ) == -1 ) psz_dir = NULL; free( psz_album_sanitized ); free( psz_artist_sanitized ); + free( psz_date_sanitized ); } else { @@ -121,6 +130,7 @@ static char *ArtCachePath( input_item_t *p_item ) const char *psz_album; const char *psz_arturl; const char *psz_title; + const char *psz_date; vlc_mutex_lock( &p_item->lock ); @@ -133,14 +143,14 @@ static char *ArtCachePath( input_item_t *p_item ) psz_album = vlc_meta_Get( p_item->p_meta, vlc_meta_Album ); psz_arturl = vlc_meta_Get( p_item->p_meta, vlc_meta_ArtworkURL ); psz_title = vlc_meta_Get( p_item->p_meta, vlc_meta_Title ); + psz_date = vlc_meta_Get( p_item->p_meta, vlc_meta_Date ); if( !psz_title ) psz_title = p_item->psz_name; - if( (EMPTY_STR(psz_artist) || EMPTY_STR(psz_album) ) && !psz_arturl ) goto end; - psz_path = ArtCacheGetDirPath( psz_arturl, psz_artist, psz_album, psz_title ); + psz_path = ArtCacheGetDirPath( psz_arturl, psz_artist, psz_album, psz_date, psz_title ); end: vlc_mutex_unlock( &p_item->lock ); diff --git a/src/preparser/fetcher.c b/src/preparser/fetcher.c index 14dcaab8ba..a49090c2fe 100644 --- a/src/preparser/fetcher.c +++ b/src/preparser/fetcher.c @@ -81,14 +81,16 @@ static char* CreateCacheKey( input_item_t* item ) char const* artist = vlc_meta_Get( item->p_meta, vlc_meta_Artist ); char const* album = vlc_meta_Get( item->p_meta, vlc_meta_Album ); + char const *date = vlc_meta_Get( item->p_meta, vlc_meta_Date ); char* key; /** * Simple concatenation of artist and album can lead to the same key * for entities that should not have such. Imagine { dogs, tick } and * { dog, stick } */ - if( !artist || !album || asprintf( &key, "%s:%zu:%s:%zu", - artist, strlen( artist ), album, strlen( album ) ) < 0 ) + if( !artist || !album || asprintf( &key, "%s:%zu:%s:%zu:%s", + artist, strlen( artist ), album, strlen( album ), + date ? date : "0000" ) < 0 ) { key = NULL; } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
