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_;