Commit d732fd2f authored by Clément Stenac's avatar Clément Stenac

Beginning of implementation of art fetch when played

parent 420d5f17
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include "main_interface.hpp" #include "main_interface.hpp"
#include "input_manager.hpp" #include "input_manager.hpp"
#include "pixmaps/art.xpm"
#include <vlc/vout.h> #include <vlc/vout.h>
#include <QLabel> #include <QLabel>
...@@ -286,10 +285,13 @@ PlaylistWidget::PlaylistWidget( intf_thread_t *_p_intf ) : ...@@ -286,10 +285,13 @@ PlaylistWidget::PlaylistWidget( intf_thread_t *_p_intf ) :
left->addWidget( selector ); left->addWidget( selector );
art = new QLabel( "" ); art = new QLabel( "" );
art->setMinimumHeight( 128 );
art->setMinimumWidth( 128 );
art->setMaximumHeight( 128 ); art->setMaximumHeight( 128 );
art->setMaximumWidth( 128 ); art->setMaximumWidth( 128 );
art->setScaledContents( true ); art->setScaledContents( true );
art->setPixmap( QPixmap( art_xpm ) ); //":/vlc128.png" ) );
art->setPixmap( QPixmap( ":/noart.png" ) );
left->addWidget( art ); left->addWidget( art );
playlist_item_t *p_root = playlist_GetPreferredNode( THEPL, playlist_item_t *p_root = playlist_GetPreferredNode( THEPL,
...@@ -319,11 +321,11 @@ PlaylistWidget::PlaylistWidget( intf_thread_t *_p_intf ) : ...@@ -319,11 +321,11 @@ PlaylistWidget::PlaylistWidget( intf_thread_t *_p_intf ) :
void PlaylistWidget::setArt( QString url ) void PlaylistWidget::setArt( QString url )
{ {
if( prevArt != url ) if( url.isNull() )
{ art->setPixmap( QPixmap( ":/noart.png" ) );
else if( prevArt != url )
art->setPixmap( QPixmap( url ) ); art->setPixmap( QPixmap( url ) );
prevArt = url; prevArt = url;
}
} }
PlaylistWidget::~PlaylistWidget() PlaylistWidget::~PlaylistWidget()
......
This diff is collapsed.
...@@ -133,12 +133,13 @@ void PLItem::update( playlist_item_t *p_item, bool iscurrent ) ...@@ -133,12 +133,13 @@ void PLItem::update( playlist_item_t *p_item, bool iscurrent )
strings[2] = QString( psz_duration ); strings[2] = QString( psz_duration );
type = p_item->p_input->i_type; type = p_item->p_input->i_type;
current = iscurrent; current = iscurrent;
if( current && p_item->p_input->p_meta && if( current && p_item->p_input->p_meta &&
p_item->p_input->p_meta->psz_arturl && p_item->p_input->p_meta->psz_arturl &&
!strncmp( p_item->p_input->p_meta->psz_arturl, "file://", 7 ) ) !strncmp( p_item->p_input->p_meta->psz_arturl, "file://", 7 ) )
{
model->sendArt( qfu( p_item->p_input->p_meta->psz_arturl ) ); model->sendArt( qfu( p_item->p_input->p_meta->psz_arturl ) );
} else if( current )
model->removeArt();
} }
/************************************************************************* /*************************************************************************
...@@ -729,6 +730,11 @@ void PLModel::sendArt( QString url ) ...@@ -729,6 +730,11 @@ void PLModel::sendArt( QString url )
emit artSet( arturl ); emit artSet( arturl );
} }
void PLModel::removeArt()
{
emit artSet( QString() );
}
/** /**
* Deletion, here we have to do a ugly slow hack as we retrieve the full * Deletion, here we have to do a ugly slow hack as we retrieve the full
* list of indexes to delete at once: when we delete a node and all of * list of indexes to delete at once: when we delete a node and all of
......
...@@ -133,6 +133,7 @@ public: ...@@ -133,6 +133,7 @@ public:
QStringList mimeTypes() const; QStringList mimeTypes() const;
void sendArt( QString url ); void sendArt( QString url );
void removeArt( );
private: private:
void addCallbacks(); void addCallbacks();
void delCallbacks(); void delCallbacks();
......
...@@ -8,5 +8,6 @@ ...@@ -8,5 +8,6 @@
<file>pixmaps/volume-low.png</file> <file>pixmaps/volume-low.png</file>
<file>pixmaps/volume-high.png</file> <file>pixmaps/volume-high.png</file>
<file alias="vlc128.png">../../../share/vlc128x128.png</file> <file alias="vlc128.png">../../../share/vlc128x128.png</file>
<file alias="noart.png">pixmaps/noart.png</file>
</qresource> </qresource>
</RCC> </RCC>
...@@ -66,7 +66,6 @@ public: ...@@ -66,7 +66,6 @@ public:
QPushButton **other, char *psz_other ) QPushButton **other, char *psz_other )
{ {
#ifdef QT42 #ifdef QT42
fprintf( stderr, "Gra\n" );
#else #else
QHBoxLayout *buttons_layout = new QHBoxLayout; QHBoxLayout *buttons_layout = new QHBoxLayout;
QSpacerItem *spacerItem = new QSpacerItem( 40, 20, QSpacerItem *spacerItem = new QSpacerItem( 40, 20,
...@@ -75,7 +74,6 @@ public: ...@@ -75,7 +74,6 @@ public:
if( psz_default ) if( psz_default )
{ {
utf8_fprintf( stderr, "Creating default button %s\n", psz_default );
*defaul = new QPushButton(0); *defaul = new QPushButton(0);
(*defaul)->setFocus(); (*defaul)->setFocus();
buttons_layout->addWidget( *defaul ); buttons_layout->addWidget( *defaul );
......
...@@ -188,7 +188,7 @@ int playlist_PreparseEnqueueItem( playlist_t *p_playlist, ...@@ -188,7 +188,7 @@ int playlist_PreparseEnqueueItem( playlist_t *p_playlist,
} }
int playlist_AskForArtEnqueue( playlist_t *p_playlist, int playlist_AskForArtEnqueue( playlist_t *p_playlist,
input_item_t *p_item ) input_item_t *p_item )
{ {
int i; int i;
preparse_item_t p; preparse_item_t p;
...@@ -437,21 +437,34 @@ playlist_item_t * playlist_NextItem( playlist_t *p_playlist ) ...@@ -437,21 +437,34 @@ playlist_item_t * playlist_NextItem( playlist_t *p_playlist )
int playlist_PlayItem( playlist_t *p_playlist, playlist_item_t *p_item ) int playlist_PlayItem( playlist_t *p_playlist, playlist_item_t *p_item )
{ {
vlc_value_t val; vlc_value_t val;
input_item_t *p_input = p_item->p_input;
int i_activity = var_GetInteger( p_playlist, "activity") ; int i_activity = var_GetInteger( p_playlist, "activity") ;
msg_Dbg( p_playlist, "creating new input thread" ); msg_Dbg( p_playlist, "creating new input thread" );
p_item->p_input->i_nb_played++; p_input->i_nb_played++;
p_playlist->status.p_item = p_item; p_playlist->status.p_item = p_item;
p_playlist->status.i_status = PLAYLIST_RUNNING; p_playlist->status.i_status = PLAYLIST_RUNNING;
var_SetInteger( p_playlist, "activity", i_activity + var_SetInteger( p_playlist, "activity", i_activity +
DEFAULT_INPUT_ACTIVITY ); DEFAULT_INPUT_ACTIVITY );
p_playlist->p_input = input_CreateThread( p_playlist, p_item->p_input ); p_playlist->p_input = input_CreateThread( p_playlist, p_input );
if( p_playlist->p_fetcher->i_art_policy == ALBUM_ART_WHEN_PLAYED )
{
if( p_input->p_meta && EMPTY_STR( p_input->p_meta->psz_arturl ) )
{
PL_DEBUG( "requesting art for %s", p_input->psz_name );
playlist_AskForArtEnqueue( p_playlist, p_input );
}
else if( !p_input->p_meta )
{
PL_DEBUG2( "unable to request art for %s, no meta", p_input->psz_name );
}
}
val.i_int = p_item->p_input->i_id; val.i_int = p_input->i_id;
/* unlock the playlist to set the var...mmm */
vlc_mutex_unlock( &p_playlist->object_lock); vlc_mutex_unlock( &p_playlist->object_lock);
var_Set( p_playlist, "playlist-current", val); var_Set( p_playlist, "playlist-current", val);
vlc_mutex_lock( &p_playlist->object_lock); vlc_mutex_lock( &p_playlist->object_lock);
......
...@@ -558,9 +558,9 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj ) ...@@ -558,9 +558,9 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj )
p.p_item = p_current; p.p_item = p_current;
p.b_fetch_art = VLC_TRUE; p.b_fetch_art = VLC_TRUE;
vlc_mutex_lock( &p_playlist->p_fetcher->object_lock ); vlc_mutex_lock( &p_playlist->p_fetcher->object_lock );
TAB_APPEND( p_playlist->p_fetcher->i_waiting, INSERT_ELEM( p_playlist->p_fetcher->p_waiting,
p_playlist->p_fetcher->p_waiting, p_playlist->p_fetcher->i_waiting,
p ); p_playlist->p_fetcher->i_waiting, p);
vlc_mutex_unlock( &p_playlist->p_fetcher->object_lock ); vlc_mutex_unlock( &p_playlist->p_fetcher->object_lock );
vlc_cond_signal( &p_playlist->p_fetcher->object_wait ); vlc_cond_signal( &p_playlist->p_fetcher->object_wait );
} }
...@@ -642,15 +642,19 @@ void playlist_FetcherLoop( playlist_fetcher_t *p_obj ) ...@@ -642,15 +642,19 @@ void playlist_FetcherLoop( playlist_fetcher_t *p_obj )
if( i_ret == 1 ) if( i_ret == 1 )
{ {
PL_DEBUG("downloading art for %s", p_item->psz_name ); PL_DEBUG("downloading art for %s", p_item->psz_name );
if( !input_DownloadAndCacheArt( p_playlist, p_item ) ) if( input_DownloadAndCacheArt( p_playlist, p_item ) )
p_item->p_meta->i_status |= ITEM_ART_NOTFOUND; p_item->p_meta->i_status |= ITEM_ART_NOTFOUND;
else else {
p_item->p_meta->i_status |= ITEM_ART_FETCHED; p_item->p_meta->i_status |= ITEM_ART_FETCHED;
var_SetInteger( p_playlist, "item-change",
p_item->i_id );
}
} }
else if( i_ret == 0 ) /* Was in cache */ else if( i_ret == 0 ) /* Was in cache */
{ {
PL_DEBUG("found art for %s in cache", p_item->psz_name ); PL_DEBUG("found art for %s in cache", p_item->psz_name );
p_item->p_meta->i_status |= ITEM_ART_FETCHED; p_item->p_meta->i_status |= ITEM_ART_FETCHED;
var_SetInteger( p_playlist, "item-change", p_item->i_id );
} }
else else
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment