Add the ability to remove mulitple GS songs at once. Fixes issue 2933

This commit is contained in:
Arnaud Bienner 2012-05-11 21:28:28 +02:00
parent efbe30a618
commit 3356fd9b58
2 changed files with 23 additions and 11 deletions

View File

@ -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<int, QList<int> > 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<int, QList<int> >::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<int>& songs_ids_to_remove) {
if (!playlists_.contains(playlist_id)) {
return;
}
QList<int> 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);
}

View File

@ -90,7 +90,7 @@ class GroovesharkService : public InternetService {
void RetrieveSubscribedPlaylists();
void RetrieveAutoplayTags();
void SetPlaylistSongs(int playlist_id, const QList<int>& songs_ids);
void RemoveFromPlaylist(int playlist_id, int song_id);
void RemoveFromPlaylist(int playlist_id, const QList<int>& 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);