X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fplaylist%2Ffetcher.c;h=2075c0dfdbde6a626486c208b7354aa43a24a551;hb=8d00d8b7069d5b8d1090708976334cc31849fa50;hp=eaecfd06adb645c228fae58df3d687e31d09e487;hpb=617b6ed7b4ff3255f41c804ed291ae27beb43154;p=vlc diff --git a/src/playlist/fetcher.c b/src/playlist/fetcher.c index eaecfd06ad..2075c0dfdb 100644 --- a/src/playlist/fetcher.c +++ b/src/playlist/fetcher.c @@ -33,6 +33,7 @@ #include #include #include +#include #include "art.h" #include "fetcher.h" @@ -233,7 +234,11 @@ static int FindArt( playlist_fetcher_t *p_fetcher, input_item_t *p_item ) if( p_module ) { module_unneed( p_finder, p_module ); - i_ret = 1; + /* Try immediately if found in cache by download URL */ + if( !playlist_FindArtInCache( p_item ) ) + i_ret = 0; + else + i_ret = 1; } vlc_object_release( p_finder ); } @@ -324,6 +329,28 @@ error: return VLC_EGENERIC; } +/** + * FetchMeta, run the "meta fetcher". They are going to do network + * connections, and gather information upon the playing media. + * (even artwork). + */ +static void FetchMeta( playlist_fetcher_t *p_fetcher, input_item_t *p_item ) +{ + demux_meta_t *p_demux_meta = vlc_custom_create(p_fetcher->p_playlist, + sizeof(*p_demux_meta), + VLC_OBJECT_GENERIC, "demux meta" ); + if( !p_demux_meta ) + return; + + vlc_object_attach( p_demux_meta, p_fetcher->p_playlist ); + p_demux_meta->p_demux = NULL; + p_demux_meta->p_item = p_item; + + module_t *p_meta_fetcher = module_need( p_demux_meta, "meta fetcher", NULL, false ); + if( p_meta_fetcher ) + module_unneed( p_demux_meta, p_meta_fetcher ); + vlc_object_release( p_demux_meta ); +} static int InputEvent( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ) @@ -411,6 +438,12 @@ static void *Thread( void *p_data ) /* Wait that the input item is preparsed if it is being played */ WaitPreparsed( p_fetcher, p_item ); + /* Triggers "meta fetcher", eventually fetch meta on the network. + * They are identical to "meta reader" expect that may actually + * takes time. That's why they are running here. + * The result of this fetch is not cached. */ + FetchMeta( p_fetcher, p_item ); + /* Find art, and download it if needed */ int i_ret = FindArt( p_fetcher, p_item ); if( i_ret == 1 )