From 4fe293b6d08e572572109e5f30be4e02d5ab02af Mon Sep 17 00:00:00 2001 From: Andreas Date: Wed, 31 Jul 2013 19:06:29 +0200 Subject: [PATCH] The insert and remove signal for a playlist was not correct. --- src/networkremote/incomingdataparser.cpp | 27 ++++++++---------------- src/networkremote/incomingdataparser.h | 4 ++-- src/playlist/playlistmanager.cpp | 13 ++++++++++++ src/playlist/playlistmanager.h | 4 ++++ 4 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/networkremote/incomingdataparser.cpp b/src/networkremote/incomingdataparser.cpp index 91afdf9f0..910828089 100644 --- a/src/networkremote/incomingdataparser.cpp +++ b/src/networkremote/incomingdataparser.cpp @@ -66,12 +66,12 @@ IncomingDataParser::IncomingDataParser(Application* app) connect(this, SIGNAL(SetShuffleMode(PlaylistSequence::ShuffleMode)), app_->playlist_manager()->sequence(), SLOT(SetShuffleMode(PlaylistSequence::ShuffleMode))); - connect(this, SIGNAL(InsertUrls(const QList&, int, bool, bool)), - app_->playlist_manager()->active(), - SLOT(InsertUrls(const QList&, int, bool, bool))); - connect(this, SIGNAL(RemoveSongs(const QList&)), - app_->playlist_manager()->active(), - SLOT(RemoveItemsWithoutUndo(const QList&))); + connect(this, SIGNAL(InsertUrls(int, const QList&, int, bool, bool)), + app_->playlist_manager(), + SLOT(InsertUrls(int, const QList&, int, bool, bool))); + connect(this, SIGNAL(RemoveSongs(int, const QList&)), + app_->playlist_manager(), + SLOT(RemoveItemsWithoutUndo(int, const QList&))); connect(this, SIGNAL(Open(int)), app_->playlist_manager(), SLOT(Open(int))); connect(this, SIGNAL(Close(int)), @@ -217,11 +217,6 @@ void IncomingDataParser::SetShuffleMode(const pb::remote::Shuffle& shuffle) { void IncomingDataParser::InsertUrls(const pb::remote::Message& msg) { const pb::remote::RequestInsertUrls& request = msg.request_insert_urls(); - // Check if we need to change the playlist - if (request.playlist_id() != app_->playlist_manager()->active_id()) { - emit SetActivePlaylist(request.playlist_id()); - } - // Extract urls QList urls; for (auto it = request.urls().begin(); it != request.urls().end(); ++it) { @@ -229,23 +224,19 @@ void IncomingDataParser::InsertUrls(const pb::remote::Message& msg) { } // Insert the urls - emit InsertUrls(urls, request.position(), request.play_now(), request.enqueue()); + emit InsertUrls(request.playlist_id(), urls, request.position(), + request.play_now(), request.enqueue()); } void IncomingDataParser::RemoveSongs(const pb::remote::Message& msg) { const pb::remote::RequestRemoveSongs& request = msg.request_remove_songs(); - // Check if we need to change the playlist - if (request.playlist_id() != app_->playlist_manager()->active_id()) { - emit SetActivePlaylist(request.playlist_id()); - } - // Extract urls QList songs; std::copy(request.songs().begin(), request.songs().end(), songs.begin()); // Insert the urls - emit RemoveSongs(songs); + emit RemoveSongs(request.playlist_id(), songs); } void IncomingDataParser::ClientConnect(const pb::remote::Message& msg) { diff --git a/src/networkremote/incomingdataparser.h b/src/networkremote/incomingdataparser.h index 6f4951c1a..a731d7e40 100644 --- a/src/networkremote/incomingdataparser.h +++ b/src/networkremote/incomingdataparser.h @@ -42,8 +42,8 @@ signals: void ShuffleCurrent(); void SetRepeatMode(PlaylistSequence::RepeatMode mode); void SetShuffleMode(PlaylistSequence::ShuffleMode mode); - void InsertUrls(const QList& urls, int pos, bool play_now, bool enqueue); - void RemoveSongs(const QList& indices); + void InsertUrls(int id, const QList& urls, int pos, bool play_now, bool enqueue); + void RemoveSongs(int id, const QList& indices); void SeekTo(int seconds); void SendSongs(const pb::remote::RequestDownloadSongs& request, RemoteClient* client); void ResponseSongOffer(RemoteClient* client, bool accepted); diff --git a/src/playlist/playlistmanager.cpp b/src/playlist/playlistmanager.cpp index 09711e823..01b789037 100644 --- a/src/playlist/playlistmanager.cpp +++ b/src/playlist/playlistmanager.cpp @@ -462,6 +462,19 @@ void PlaylistManager::SongChangeRequestProcessed(const QUrl& url, bool valid) { } } +void PlaylistManager::InsertUrls(int id, const QList &urls, int pos, + bool play_now, bool enqueue) { + Q_ASSERT(playlists_.contains(id)); + + playlists_[id].p->InsertUrls(urls, pos, play_now, enqueue); +} + +void PlaylistManager::RemoveItemsWithoutUndo(int id, const QList &indices) { + Q_ASSERT(playlists_.contains(id)); + + playlists_[id].p->RemoveItemsWithoutUndo(indices); +} + void PlaylistManager::InvalidateDeletedSongs() { foreach(Playlist* playlist, GetAllPlaylists()) { playlist->InvalidateDeletedSongs(); diff --git a/src/playlist/playlistmanager.h b/src/playlist/playlistmanager.h index d383e84a2..6be882f7f 100644 --- a/src/playlist/playlistmanager.h +++ b/src/playlist/playlistmanager.h @@ -211,6 +211,10 @@ public slots: void SongChangeRequestProcessed(const QUrl& url, bool valid); + void InsertUrls(int id, const QList& urls, int pos = -1, bool play_now = false, bool enqueue = false); + // Removes items with given indices from the playlist. This operation is not undoable. + void RemoveItemsWithoutUndo(int id, const QList& indices); + private slots: void SetActivePlaying(); void SetActivePaused();