[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/multimedia/amarok/src
From:       Bart Cerneels <bart.cerneels () kde ! org>
Date:       2009-07-13 21:00:47
Message-ID: 1247518847.205709.21086.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 996114 by shanachie:

Remove interaction with the Providers from Model to PlaylistManager.
Also use QAction.setData() so that we don't have to query for selected items in the \
slots. This should remove a shit-ton of ugly out of the UserPlaylistModel.

 M  +13 -1     playlistmanager/PlaylistFileProvider.cpp  
 M  +8 -2      playlistmanager/PlaylistFileProvider.h  
 M  +16 -3     playlistmanager/PlaylistManager.cpp  
 M  +6 -0      playlistmanager/PlaylistProvider.h  
 M  +15 -0     playlistmanager/UserPlaylistProvider.cpp  
 M  +4 -1      playlistmanager/UserPlaylistProvider.h  
 M  +31 -4     playlistmanager/sql/SqlUserPlaylistProvider.cpp  
 M  +3 -2      playlistmanager/sql/SqlUserPlaylistProvider.h  
 M  +6 -0      podcasts/PodcastProvider.h  


--- trunk/extragear/multimedia/amarok/src/playlistmanager/PlaylistFileProvider.cpp \
#996113:996114 @@ -26,7 +26,7 @@
 #include <KUrl>
 
 PlaylistFileProvider::PlaylistFileProvider()
- : PlaylistProvider()
+ : UserPlaylistProvider()
 {
     DEBUG_BLOCK
     //load the playlists defined in the config
@@ -86,3 +86,15 @@
     return m_playlists;
 }
 
+Meta::PlaylistPtr
+PlaylistFileProvider::save( const Meta::TrackList &tracks )
+{
+    return Meta::PlaylistPtr();
+}
+
+Meta::PlaylistPtr
+PlaylistFileProvider::save( const Meta::TrackList &tracks, const QString &name )
+{
+    return Meta::PlaylistPtr();
+}
+
--- trunk/extragear/multimedia/amarok/src/playlistmanager/PlaylistFileProvider.h \
#996113:996114 @@ -17,14 +17,14 @@
 #ifndef PLAYLISTFILEPROVIDER_H
 #define PLAYLISTFILEPROVIDER_H
 
-#include <PlaylistManager.h>
+#include <UserPlaylistProvider.h>
 
 class KUrl;
 
 /**
     @author Bart Cerneels <bart.cerneels@kde.org>
 */
-class PlaylistFileProvider : public PlaylistProvider
+class PlaylistFileProvider : public UserPlaylistProvider
 {
     public:
         PlaylistFileProvider();
@@ -36,6 +36,12 @@
 
         virtual Meta::PlaylistList playlists();
 
+        virtual bool canSavePlaylists() { return true; }
+
+        virtual Meta::PlaylistPtr save( const Meta::TrackList &tracks );
+        virtual Meta::PlaylistPtr save( const Meta::TrackList &tracks,
+                                        const QString &name );
+
     private:
         Meta::PlaylistList m_playlists;
 };
--- trunk/extragear/multimedia/amarok/src/playlistmanager/PlaylistManager.cpp \
#996113:996114 @@ -399,15 +399,28 @@
 }
 
 QList<PopupDropperAction *>
-PlaylistManager::playlistActions( const Meta::PlaylistList lists )
+PlaylistManager::playlistActions( const Meta::PlaylistList playlists )
 {
-    return QList<PopupDropperAction *>();
+    QList<PopupDropperAction *> actions;
+    foreach( const Meta::PlaylistPtr playlist, playlists )
+    {
+        PlaylistProvider *provider = getProviderForPlaylist( playlist );
+        if( provider )
+            actions << provider->playlistActions( playlist );
+    }
+
+    return actions;
 }
 
 QList<PopupDropperAction *>
 PlaylistManager::trackActions( const Meta::PlaylistPtr playlist, int trackIndex )
 {
-    return QList<PopupDropperAction *>();
+    QList<PopupDropperAction *> actions;
+    PlaylistProvider *provider = getProviderForPlaylist( playlist );
+    if( provider )
+        actions << provider->trackActions( playlist, trackIndex );
+
+    return actions;
 }
 
 namespace Amarok
--- trunk/extragear/multimedia/amarok/src/playlistmanager/PlaylistProvider.h \
#996113:996114 @@ -23,6 +23,8 @@
 
 #include <QString>
 
+class PopupDropperAction;
+
 class AMAROK_EXPORT PlaylistProvider : public QObject, public Amarok::Plugin
 {
     Q_OBJECT
@@ -43,6 +45,10 @@
 
         virtual Meta::PlaylistList playlists() = 0;
 
+        virtual QList<PopupDropperAction *> playlistActions( Meta::PlaylistPtr \
playlist ) = 0; +        virtual QList<PopupDropperAction *> trackActions( \
Meta::PlaylistPtr playlist, +                                                  int \
trackIndex ) = 0; +
     signals:
         virtual void updated();
 
--- trunk/extragear/multimedia/amarok/src/playlistmanager/UserPlaylistProvider.cpp \
#996113:996114 @@ -33,4 +33,19 @@
     return false;
 }
 
+QList<PopupDropperAction *>
+UserPlaylistProvider::playlistActions( Meta::PlaylistPtr playlist )
+{
+    Q_UNUSED( playlist );
+    return QList<PopupDropperAction *>();
+}
+
+QList<PopupDropperAction *>
+UserPlaylistProvider::trackActions( Meta::PlaylistPtr playlist, int trackIndex )
+{
+    Q_UNUSED( playlist );
+    Q_UNUSED( trackIndex );
+    return QList<PopupDropperAction *>();
+}
+
 #include "UserPlaylistProvider.moc"
--- trunk/extragear/multimedia/amarok/src/playlistmanager/UserPlaylistProvider.h \
#996113:996114 @@ -51,7 +51,10 @@
 
         virtual bool supportsEmptyGroups();
 
-        virtual QList<PopupDropperAction *> playlistActions( Meta::PlaylistList list \
) = 0; +        QList<PopupDropperAction *> playlistActions( Meta::PlaylistPtr \
playlist ); +        QList<PopupDropperAction *> trackActions( Meta::PlaylistPtr \
playlist, +                                                  int trackIndex );
+
 };
 
 #endif
--- trunk/extragear/multimedia/amarok/src/playlistmanager/sql/SqlUserPlaylistProvider.cpp \
#996113:996114 @@ -38,6 +38,9 @@
 static const int USERPLAYLIST_DB_VERSION = 2;
 static const QString key("AMAROK_USERPLAYLIST");
 
+typedef QMultiMap<Meta::PlaylistPtr, Meta::TrackPtr> PlaylistTrackMap;
+Q_DECLARE_METATYPE( PlaylistTrackMap );
+
 SqlUserPlaylistProvider::SqlUserPlaylistProvider()
     : UserPlaylistProvider()
     , m_renameAction( 0 )
@@ -103,13 +106,30 @@
     }
 }
 
+void
+SqlUserPlaylistProvider::slotRemove()
+{
+    QAction *action = qobject_cast<QAction *>( QObject::sender() );
+    if( action == 0 )
+        return;
+
+    PlaylistTrackMap playlistMap = action->data().value<PlaylistTrackMap>();
+    foreach( Meta::PlaylistPtr playlist, playlistMap.keys() )
+        foreach( Meta::TrackPtr track, playlistMap.values( playlist ) )
+            playlist->removeTrack( playlist->tracks().indexOf( track ) );
+
+    //clear the data
+    action->setData( QVariant() );
+}
+
 QList<PopupDropperAction *>
-SqlUserPlaylistProvider::playlistActions( Meta::PlaylistList list )
+SqlUserPlaylistProvider::playlistActions( Meta::PlaylistPtr playlist )
 {
+    Q_UNUSED( playlist );
     QList<PopupDropperAction *> actions;
 
     m_selectedPlaylists.clear();
-    m_selectedPlaylists << toSqlPlaylists( list );
+    m_selectedPlaylists << Meta::SqlPlaylistPtr::dynamicCast( playlist );
 
     if ( m_renameAction == 0 )
     {
@@ -129,8 +149,9 @@
 }
 
 QList<PopupDropperAction *>
-SqlUserPlaylistProvider::trackActions( Meta::PlaylistPtr playlist, Meta::TrackList \
list ) +SqlUserPlaylistProvider::trackActions( Meta::PlaylistPtr playlist, int \
trackIndex )  {
+    Q_UNUSED( trackIndex );
     QList<PopupDropperAction *> actions;
 
     if( m_removeTrackAction == 0 )
@@ -142,8 +163,14 @@
                     i18n( "Remove From Playlist" ),
                     this
                 );
-        connect( m_deleteAction, SIGNAL( triggered() ), SLOT( slotDelete() ) );
+        connect( m_removeTrackAction, SIGNAL( triggered() ), SLOT( slotRemove() ) );
     }
+    //Add the playlist/track combination to a QMultiMap that is stored in the \
action. +    //In the slot we use this data and use it to remove that track.
+    PlaylistTrackMap playlistMap = m_removeTrackAction->data();
+    playlistMap.insert( playlist, playlist->tracks()[trackIndex] );
+    m_removeTrackAction->setData( QVariant::fromValue( playlistMap ) );
+
     actions << m_removeTrackAction;
 
     return actions;
--- trunk/extragear/multimedia/amarok/src/playlistmanager/sql/SqlUserPlaylistProvider.h \
#996113:996114 @@ -44,9 +44,9 @@
 
         virtual bool supportsEmptyGroups() { return true; }
 
-        QList<PopupDropperAction *> playlistActions( Meta::PlaylistList list );
+        QList<PopupDropperAction *> playlistActions( Meta::PlaylistPtr playlist );
         QList<PopupDropperAction *> trackActions( Meta::PlaylistPtr playlist,
-                                                  Meta::TrackList list );
+                                                  int trackIndex );
 
         Meta::SqlPlaylistGroupPtr group( const QString &name );
         bool import( const QString& fromLocation );
@@ -59,6 +59,7 @@
     private slots:
         void slotDelete();
         void slotRename();
+        void slotRemove();
 
     private:
         void reloadFromDb();
--- trunk/extragear/multimedia/amarok/src/podcasts/PodcastProvider.h #996113:996114
@@ -62,6 +62,12 @@
         virtual QList<PopupDropperAction *> channelActions( Meta::PodcastChannelList \
)  { return QList<PopupDropperAction *>(); }
 
+        virtual QList<PopupDropperAction *> playlistActions( Meta::PlaylistPtr \
playlist ) +                { return QList<PopupDropperAction *>(); }
+        virtual QList<PopupDropperAction *> trackActions( Meta::PlaylistPtr \
playlist, +                                                  int trackIndex )
+                { return QList<PopupDropperAction *>(); }
+
     public slots:
         virtual void updateAll() = 0;
         virtual void update( Meta::PodcastChannelPtr channel ) = 0;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic