VLC_EXPORT( void, playlist_Clear, ( playlist_t *, bool ) );
/** Enqueue an input item for preparsing */
-VLC_EXPORT( int, playlist_PreparseEnqueue, (playlist_t *, input_item_t *) );
+VLC_EXPORT( int, playlist_PreparseEnqueue, (playlist_t *, input_item_t *, bool b_locked ) );
/** Request the art for an input item to be fetched */
-VLC_EXPORT( int, playlist_AskForArtEnqueue, (playlist_t *, input_item_t *) );
+VLC_EXPORT( int, playlist_AskForArtEnqueue, (playlist_t *, input_item_t *, bool b_locked ) );
/* Playlist sorting */
VLC_EXPORT( int, playlist_TreeMove, ( playlist_t *, playlist_item_t *, playlist_item_t *, int ) );
{
if( p_item->i_children == -1 )
{
- playlist_PreparseEnqueue( p_playlist, p_item->p_input );
+ playlist_PreparseEnqueue( p_playlist, p_item->p_input, pl_Unlocked );
}
else
{
if( p_item && p_item->i_children == -1 )
{
- playlist_AskForArtEnqueue( p_playlist, p_item->p_input );
+ playlist_AskForArtEnqueue( p_playlist, p_item->p_input, pl_Unlocked );
}
}
vlc_object_release( p_playlist );
if( !input_item_IsPreparsed( p_item ) )
{
playlist_t * p_playlist = pl_Hold( VLCIntf );
- playlist_PreparseEnqueue( p_playlist, p_item );
+ playlist_PreparseEnqueue( p_playlist, p_item, pl_Unlocked );
pl_Release( VLCIntf );
}
- (IBAction)downloadCoverArt:(id)sender
{
playlist_t * p_playlist = pl_Hold( VLCIntf );
- if( p_item) playlist_AskForArtEnqueue( p_playlist, p_item );
+ if( p_item) playlist_AskForArtEnqueue( p_playlist, p_item, pl_Unlocked );
pl_Release( VLCIntf );
}
doUpdate();
}
+CoverArtLabel::~CoverArtLabel()
+{
+ playlist_t *p_playlist = pl_Hold( p_this );
+ var_DelCallback( p_playlist, "item-change", downloadCoverCallback, this );
+ pl_Release( p_this );
+
+ if( p_input )
+ vlc_gc_decref( p_input );
+};
+
void CoverArtLabel::downloadCover()
{
if( p_input )
{
playlist_t *p_playlist = pl_Hold( p_this );
- playlist_AskForArtEnqueue( p_playlist, p_input );
+ playlist_AskForArtEnqueue( p_playlist, p_input, pl_Unlocked );
pl_Release( p_this );
}
}
CoverArtLabel( QWidget *parent,
vlc_object_t *p_this,
input_item_t *p_input = NULL );
- virtual ~CoverArtLabel()
- { if( p_input ) vlc_gc_decref( p_input ); }
+ virtual ~CoverArtLabel();
+
private:
input_item_t *p_input;
vlc_object_t *p_this;
{
if( p_popup_item->i_children == -1 )
{
- playlist_PreparseEnqueue( p_playlist, p_popup_item->p_input );
+ playlist_PreparseEnqueue( p_playlist, p_popup_item->p_input, pl_Unlocked );
}
else
{
{
playlist_PreparseEnqueue(
libvlc_priv (p_md->p_libvlc_instance->p_libvlc_int)->p_playlist,
- p_md->p_input_item );
+ p_md->p_input_item, pl_Unlocked );
p_md->b_preparsed = true;
}
}
{
playlist_AskForArtEnqueue(
libvlc_priv(p_md->p_libvlc_instance->p_libvlc_int)->p_playlist,
- p_md->p_input_item );
+ p_md->p_input_item, pl_Unlocked );
}
/* Should be integrated in core */
*****************************************************************************/
/** Enqueue an item for preparsing */
int playlist_PreparseEnqueue( playlist_t *p_playlist,
- input_item_t *p_item )
+ input_item_t *p_item, bool b_locked )
{
playlist_private_t *p_sys = pl_priv(p_playlist);
- PL_LOCK;
+ PL_LOCK_IF( !b_locked );
if( p_sys->p_preparser )
playlist_preparser_Push( p_sys->p_preparser, p_item );
- PL_UNLOCK;
+ PL_UNLOCK_IF( !b_locked );
return VLC_SUCCESS;
}
int playlist_AskForArtEnqueue( playlist_t *p_playlist,
- input_item_t *p_item )
+ input_item_t *p_item, bool b_locked )
{
playlist_private_t *p_sys = pl_priv(p_playlist);
- PL_LOCK;
+ PL_LOCK_IF( !b_locked );
if( p_sys->p_fetcher )
playlist_fetcher_Push( p_sys->p_fetcher, p_item );
- PL_UNLOCK;
+ PL_UNLOCK_IF( !b_locked );
return VLC_SUCCESS;
}
( i_mode & PLAYLIST_SPREPARSE &&
( EMPTY_STR( psz_artist ) || ( EMPTY_STR( psz_album ) ) )
) ) )
- playlist_PreparseEnqueue( p_playlist, p_item_cat->p_input );
+ playlist_PreparseEnqueue( p_playlist, p_item_cat->p_input, pl_Locked );
/* If we already have it, signal it */
else if( !EMPTY_STR( psz_artist ) && !EMPTY_STR( psz_album ) )
input_item_SetPreparsed( p_item_cat->p_input, true );
if( !b_has_art || strncmp( psz_arturl, "attachment://", 13 ) )
{
PL_DEBUG( "requesting art for %s", psz_name );
- playlist_AskForArtEnqueue( p_playlist, p_input );
+ playlist_AskForArtEnqueue( p_playlist, p_input, pl_Locked );
}
free( psz_arturl );
free( psz_name );