+QStringList PLSelector::mimeTypes() const
+{
+ QStringList types;
+ types << "vlc/qt-playlist-item";
+ return types;
+}
+
+bool PLSelector::dropMimeData ( QTreeWidgetItem * parent, int index,
+ const QMimeData * data, Qt::DropAction action )
+{
+ if( !parent ) return false;
+
+ QVariant type = parent->data( 0, TYPE_ROLE );
+ if( type == QVariant() ) return false;
+ int i_truth = parent->data( 0, SPECIAL_ROLE ).toInt();
+
+ if( i_truth != IS_PL && i_truth != IS_ML ) return false;
+ bool to_pl = ( i_truth == IS_PL );
+
+ if( data->hasFormat( "vlc/qt-playlist-item" ) )
+ {
+ QByteArray encodedData = data->data( "vlc/qt-playlist-item" );
+ QDataStream stream( &encodedData, QIODevice::ReadOnly );
+ playlist_Lock( THEPL );
+ while( !stream.atEnd() )
+ {
+ PLItem *item;
+ stream.readRawData( (char*)&item, sizeof(PLItem*) );
+ input_item_t *pl_input =item->inputItem();
+ playlist_AddExt ( THEPL,
+ pl_input->psz_uri, pl_input->psz_name,
+ PLAYLIST_APPEND | PLAYLIST_SPREPARSE, PLAYLIST_END,
+ pl_input->i_duration,
+ pl_input->i_options, pl_input->ppsz_options, pl_input->optflagc,
+ to_pl, true );
+ }
+ playlist_Unlock( THEPL );
+ }
+ return true;
+}
+
+void PLSelector::plItemAdded( int item, int parent )
+{
+ if( parent != podcastsParentId ) return;
+
+ playlist_Lock( THEPL );
+
+ playlist_item_t *p_item = playlist_ItemGetById( THEPL, item );
+ if( !p_item ) {
+ playlist_Unlock( THEPL );
+ return;
+ }
+
+ int c = podcastsParent->childCount();
+ for( int i = 0; i < c; i++ )
+ {
+ QTreeWidgetItem *podItem = podcastsParent->child(i);
+ if( podItem->data( 0, PL_ITEM_ID_ROLE ).toInt() == item )
+ {
+ //msg_Dbg( p_intf, "Podcast already in: (%d) %s", item, p_item->p_input->psz_uri);
+ playlist_Unlock( THEPL );
+ return;
+ }
+ }
+
+ //msg_Dbg( p_intf, "Adding podcast: (%d) %s", item, p_item->p_input->psz_uri );
+ addPodcastItem( p_item );
+
+ playlist_Unlock( THEPL );
+
+ podcastsParent->setExpanded( true );
+}
+
+void PLSelector::plItemRemoved( int id )
+{
+ int c = podcastsParent->childCount();
+ for( int i = 0; i < c; i++ )
+ {
+ QTreeWidgetItem *item = podcastsParent->child(i);
+ if( item->data( 0, PL_ITEM_ID_ROLE ).toInt() == id )
+ {
+ input_item_t *p_input = item->data( 0, IN_ITEM_ROLE ).value<input_item_t*>();
+ //msg_Dbg( p_intf, "Removing podcast: (%d) %s", id, p_input->psz_uri );
+ vlc_gc_decref( p_input );
+ delete item;
+ return;
+ }
+ }
+}
+
+void PLSelector::inputItemUpdate( input_item_t *arg )
+{
+ int c = podcastsParent->childCount();
+ for( int i = 0; i < c; i++ )
+ {
+ QTreeWidgetItem *item = podcastsParent->child(i);
+ input_item_t *p_input = item->data( 0, IN_ITEM_ROLE ).value<input_item_t*>();
+ if( p_input == arg )
+ {
+ PLSelItem *si = itemWidget( item );
+ char *psz_name = input_item_GetName( p_input );
+ si->setText( qfu( psz_name ) );
+ free( psz_name );
+ return;
+ }
+ }
+}
+
+void PLSelector::podcastAdd( PLSelItem* item )
+{
+ bool ok;
+ QString url = QInputDialog::getText( this, qtr( "Subscribe" ),
+ qtr( "Enter URL of the podcast to subscribe to:" ),
+ QLineEdit::Normal, QString(), &ok );
+ if( !ok || url.isEmpty() ) return;
+
+ setSource( podcastsParent ); //to load the SD in case it's not loaded
+
+ vlc_object_t *p_obj = (vlc_object_t*) vlc_object_find_name(
+ p_intf->p_libvlc, "podcast", FIND_CHILD );
+ if( !p_obj ) return;
+
+ QString request("ADD:");
+ request += url;
+ var_SetString( p_obj, "podcast-request", qtu( request ) );
+ vlc_object_release( p_obj );
+}
+
+void PLSelector::podcastRemove( PLSelItem* item )
+{
+ QString question ( qtr( "Do you really want to unsubscribe from %1?" ) );
+ question = question.arg( item->text() );
+ QMessageBox::StandardButton res =
+ QMessageBox::question( this, qtr( "Unsubscribe" ), question,
+ QMessageBox::Ok | QMessageBox::Cancel,
+ QMessageBox::Cancel );
+ if( res == QMessageBox::Cancel ) return;
+
+ input_item_t *input = item->treeItem()->data( 0, IN_ITEM_ROLE ).value<input_item_t*>();
+ if( !input ) return;
+
+ vlc_object_t *p_obj = (vlc_object_t*) vlc_object_find_name(
+ p_intf->p_libvlc, "podcast", FIND_CHILD );
+ if( !p_obj ) return;
+
+ QString request("RM:");
+ char *psz_uri = input_item_GetURI( input );
+ request += qfu( psz_uri );
+ var_SetString( p_obj, "podcast-request", qtu( request ) );
+ vlc_object_release( p_obj );
+ free( psz_uri );
+}
+
+PLSelItem * PLSelector::itemWidget( QTreeWidgetItem *item )
+{
+ return ( static_cast<PLSelItem*>( QTreeWidget::itemWidget( item, 0 ) ) );
+}
+
+void PLSelector::drawBranches ( QPainter * painter, const QRect & rect, const QModelIndex & index ) const