[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