diff --git a/src/internet/groovesharkservice.cpp b/src/internet/groovesharkservice.cpp index 417261800..6b82d8bd0 100644 --- a/src/internet/groovesharkservice.cpp +++ b/src/internet/groovesharkservice.cpp @@ -88,6 +88,9 @@ GroovesharkService::GroovesharkService(InternetModel *parent) subscribed_playlists_divider_(NULL), network_(new NetworkAccessManager(this)), context_menu_(NULL), + create_playlist_(NULL), + delete_playlist_(NULL), + rename_playlist_(NULL), remove_from_playlist_(NULL), remove_from_favorites_(NULL), search_delay_(new QTimer(this)), @@ -466,6 +469,8 @@ void GroovesharkService::ShowContextMenu(const QModelIndex& index, const QPoint& display_remove_from_playlist_action = true; } delete_playlist_->setVisible(display_delete_playlist_action); + // If we can delete this playlist, we can also rename it + rename_playlist_->setVisible(display_delete_playlist_action); remove_from_playlist_->setVisible(display_remove_from_playlist_action); remove_from_favorites_->setVisible(display_remove_from_favorites_action); @@ -490,6 +495,9 @@ void GroovesharkService::EnsureMenuCreated() { delete_playlist_ = context_menu_->addAction( IconLoader::Load("edit-delete"), tr("Delete Grooveshark playlist"), this, SLOT(DeleteCurrentPlaylist())); + rename_playlist_ = context_menu_->addAction( + IconLoader::Load("edit-rename"), tr("Rename Grooveshark playlist"), + this, SLOT(RenameCurrentPlaylist())); context_menu_->addSeparator(); remove_from_playlist_ = context_menu_->addAction( IconLoader::Load("list-remove"), tr("Remove from playlist"), @@ -1104,6 +1112,54 @@ void GroovesharkService::PlaylistDeleted(QNetworkReply* reply, int playlist_id) root_->removeRow(playlist_info.item_->row()); } +void GroovesharkService::RenameCurrentPlaylist() { + if (context_item_.data(InternetModel::Role_Type).toInt() != InternetModel::Type_UserPlaylist + || context_item_.data(Role_PlaylistType).toInt() != UserPlaylist) { + return; + } + + int playlist_id = context_item_.data(Role_UserPlaylistId).toInt(); + RenamePlaylist(playlist_id); +} + +void GroovesharkService::RenamePlaylist(int playlist_id) { + if (!playlists_.contains(playlist_id)) { + return; + } + const QString& old_name = playlists_[playlist_id].name_; + QString new_name = QInputDialog::getText(NULL, + tr("Rename \"%1\" playlist").arg(old_name), + tr("Name"), + QLineEdit::Normal); + if (new_name.isEmpty()) { + return; + } + + QList parameters; + parameters << Param("playlistID", playlist_id) + << Param("name", new_name); + QNetworkReply* reply = CreateRequest("renamePlaylist", parameters); + NewClosure(reply, SIGNAL(finished()), + this, SLOT(PlaylistRenamed(QNetworkReply*, int, const QString&)), reply, playlist_id, new_name); +} + +void GroovesharkService::PlaylistRenamed(QNetworkReply* reply, + int playlist_id, + const QString& new_name) { + reply->deleteLater(); + QVariantMap result = ExtractResult(reply); + if (!result["success"].toBool()) { + qLog(Warning) << "Grooveshark renamePlaylist failed"; + return; + } + if (!playlists_.contains(playlist_id)) { + return; + } + PlaylistInfo& playlist_info = playlists_[playlist_id]; + playlist_info.name_ = new_name; + playlist_info.item_->setText(new_name); +} + void GroovesharkService::AddUserFavoriteSong(int song_id) { int task_id = model()->task_manager()->StartTask(tr("Adding song to favorites")); QList parameters; diff --git a/src/internet/groovesharkservice.h b/src/internet/groovesharkservice.h index 0e27eafad..51fe77c4c 100644 --- a/src/internet/groovesharkservice.h +++ b/src/internet/groovesharkservice.h @@ -88,6 +88,7 @@ class GroovesharkService : public InternetService { // Refresh playlist_id playlist , or create it if it doesn't exist void RefreshPlaylist(int playlist_id, const QString& playlist_name); void DeletePlaylist(int playlist_id); + void RenamePlaylist(int playlist_id); void AddUserFavoriteSong(int song_id); void RemoveFromFavorites(int song_id); void GetSongUrlToShare(int song_id); @@ -150,7 +151,9 @@ class GroovesharkService : public InternetService { void CreateNewPlaylist(); void NewPlaylistCreated(QNetworkReply* reply, const QString& name); void DeleteCurrentPlaylist(); + void RenameCurrentPlaylist(); void PlaylistDeleted(QNetworkReply* reply, int playlist_id); + void PlaylistRenamed(QNetworkReply* reply, int playlist_id, const QString& new_name); void AddCurrentSongToUserFavorites() { AddUserFavoriteSong(current_song_id_); } void AddCurrentSongToPlaylist(QAction* action); void UserFavoriteSongAdded(QNetworkReply* reply, int task_id); @@ -221,6 +224,7 @@ class GroovesharkService : public InternetService { QAction* create_playlist_; QAction* delete_playlist_; + QAction* rename_playlist_; QAction* remove_from_playlist_; QAction* remove_from_favorites_; QList playlistitem_actions_;