From 3356fd9b58ff94a409ea02b90927a818543267a5 Mon Sep 17 00:00:00 2001 From: Arnaud Bienner Date: Fri, 11 May 2012 21:28:28 +0200 Subject: [PATCH] Add the ability to remove mulitple GS songs at once. Fixes issue 2933 --- src/internet/groovesharkservice.cpp | 32 ++++++++++++++++++++--------- src/internet/groovesharkservice.h | 2 +- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/internet/groovesharkservice.cpp b/src/internet/groovesharkservice.cpp index 328103ff6..d191269dc 100644 --- a/src/internet/groovesharkservice.cpp +++ b/src/internet/groovesharkservice.cpp @@ -1352,27 +1352,39 @@ void GroovesharkService::UserFavoriteSongAdded(QNetworkReply* reply, int task_id } void GroovesharkService::RemoveCurrentFromPlaylist() { - const QModelIndex& index(model()->current_index()); + const QModelIndexList& indexes(model()->selected_indexes()); + QMap > playlists_songs_ids; + foreach (const QModelIndex& index, indexes) { - if (index.parent().data(InternetModel::Role_Type).toInt() != - InternetModel::Type_UserPlaylist) { - return; + if (index.parent().data(InternetModel::Role_Type).toInt() != + InternetModel::Type_UserPlaylist) { + continue; + } + + int playlist_id = index.data(Role_UserPlaylistId).toInt(); + int song_id = ExtractSongId(index.data(InternetModel::Role_Url).toUrl()); + if (song_id) { + playlists_songs_ids[playlist_id] << song_id; + } } - int playlist_id = index.data(Role_UserPlaylistId).toInt(); - int song_id = ExtractSongId(index.data(InternetModel::Role_Url).toUrl()); - if (song_id) { - RemoveFromPlaylist(playlist_id, song_id); + for (QMap >::const_iterator it = playlists_songs_ids.constBegin(); + it != playlists_songs_ids.constEnd(); + ++it) { + RemoveFromPlaylist(it.key(), it.value()); } } -void GroovesharkService::RemoveFromPlaylist(int playlist_id, int song_id) { +void GroovesharkService::RemoveFromPlaylist(int playlist_id, + const QList& songs_ids_to_remove) { if (!playlists_.contains(playlist_id)) { return; } QList songs_ids = playlists_[playlist_id].songs_ids_; - songs_ids.removeOne(song_id); + foreach (const int song_id, songs_ids_to_remove) { + songs_ids.removeOne(song_id); + } SetPlaylistSongs(playlist_id, songs_ids); } diff --git a/src/internet/groovesharkservice.h b/src/internet/groovesharkservice.h index 92d451878..56d75bb41 100644 --- a/src/internet/groovesharkservice.h +++ b/src/internet/groovesharkservice.h @@ -90,7 +90,7 @@ class GroovesharkService : public InternetService { void RetrieveSubscribedPlaylists(); void RetrieveAutoplayTags(); void SetPlaylistSongs(int playlist_id, const QList& songs_ids); - void RemoveFromPlaylist(int playlist_id, int song_id); + void RemoveFromPlaylist(int playlist_id, const QList& songs_ids_to_remove); // Refresh playlist_id playlist , or create it if it doesn't exist void RefreshPlaylist(int playlist_id); void DeletePlaylist(int playlist_id);