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 @@
#include "main_interface.hpp"
#include "input_manager.hpp"
#include "pixmaps/art.xpm"
#include <vlc/vout.h>
#include <QLabel>
......@@ -286,10 +285,13 @@ PlaylistWidget::PlaylistWidget( intf_thread_t *_p_intf ) :
left->addWidget( selector );
art = new QLabel( "" );
art->setMinimumHeight( 128 );
art->setMinimumWidth( 128 );
art->setMaximumHeight( 128 );
art->setMaximumWidth( 128 );
art->setScaledContents( true );
art->setPixmap( QPixmap( art_xpm ) ); //":/vlc128.png" ) );
art->setPixmap( QPixmap( ":/noart.png" ) );
left->addWidget( art );
playlist_item_t *p_root = playlist_GetPreferredNode( THEPL,
......@@ -319,11 +321,11 @@ PlaylistWidget::PlaylistWidget( intf_thread_t *_p_intf ) :
void PlaylistWidget::setArt( QString url )
{
if( prevArt != url )
{
if( url.isNull() )
art->setPixmap( QPixmap( ":/noart.png" ) );
else if( prevArt != url )
art->setPixmap( QPixmap( url ) );
prevArt = url;
}
prevArt = url;
}
PlaylistWidget::~PlaylistWidget()
......
This diff is collapsed.
......@@ -133,12 +133,13 @@ void PLItem::update( playlist_item_t *p_item, bool iscurrent )
strings[2] = QString( psz_duration );
type = p_item->p_input->i_type;
current = iscurrent;
if( current && p_item->p_input->p_meta &&
p_item->p_input->p_meta->psz_arturl &&
!strncmp( p_item->p_input->p_meta->psz_arturl, "file://", 7 ) )
{
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 )
emit artSet( arturl );
}
void PLModel::removeArt()
{
emit artSet( QString() );
}
/**
* 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
......
......@@ -133,6 +133,7 @@ public:
QStringList mimeTypes() const;
void sendArt( QString url );
void removeArt( );
private:
void addCallbacks();
void delCallbacks();
......
......@@ -8,5 +8,6 @@
<file>pixmaps/volume-low.png</file>
<file>pixmaps/volume-high.png</file>
<file alias="vlc128.png">../../../share/vlc128x128.png</file>
<file alias="noart.png">pixmaps/noart.png</file>
</qresource>
</RCC>
......@@ -66,7 +66,6 @@ public:
QPushButton **other, char *psz_other )
{
#ifdef QT42
fprintf( stderr, "Gra\n" );
#else
QHBoxLayout *buttons_layout = new QHBoxLayout;
QSpacerItem *spacerItem = new QSpacerItem( 40, 20,
......@@ -75,7 +74,6 @@ public:
if( psz_default )
{
utf8_fprintf( stderr, "Creating default button %s\n", psz_default );
*defaul = new QPushButton(0);
(*defaul)->setFocus();
buttons_layout->addWidget( *defaul );
......
......@@ -188,7 +188,7 @@ int playlist_PreparseEnqueueItem( playlist_t *p_playlist,
}
int playlist_AskForArtEnqueue( playlist_t *p_playlist,
input_item_t *p_item )
input_item_t *p_item )
{
int i;
preparse_item_t p;
......@@ -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 )
{
vlc_value_t val;
input_item_t *p_input = p_item->p_input;
int i_activity = var_GetInteger( p_playlist, "activity") ;
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.i_status = PLAYLIST_RUNNING;
var_SetInteger( p_playlist, "activity", i_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;
/* unlock the playlist to set the var...mmm */
val.i_int = p_input->i_id;
vlc_mutex_unlock( &p_playlist->object_lock);
var_Set( p_playlist, "playlist-current", val);
vlc_mutex_lock( &p_playlist->object_lock);
......
......@@ -558,9 +558,9 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj )
p.p_item = p_current;
p.b_fetch_art = VLC_TRUE;
vlc_mutex_lock( &p_playlist->p_fetcher->object_lock );
TAB_APPEND( p_playlist->p_fetcher->i_waiting,
p_playlist->p_fetcher->p_waiting,
p );
INSERT_ELEM( p_playlist->p_fetcher->p_waiting,
p_playlist->p_fetcher->i_waiting,
p_playlist->p_fetcher->i_waiting, p);
vlc_mutex_unlock( &p_playlist->p_fetcher->object_lock );
vlc_cond_signal( &p_playlist->p_fetcher->object_wait );
}
......@@ -642,15 +642,19 @@ void playlist_FetcherLoop( playlist_fetcher_t *p_obj )
if( i_ret == 1 )
{
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;
else
else {
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 */
{
PL_DEBUG("found art for %s in cache", p_item->psz_name );
p_item->p_meta->i_status |= ITEM_ART_FETCHED;
var_SetInteger( p_playlist, "item-change", p_item->i_id );
}
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