1
0
mirror of https://github.com/clementine-player/Clementine synced 2024-12-17 20:09:50 +01:00

Ability to get a URL to share GS playlists

This commit is contained in:
Arnaud Bienner 2012-03-27 00:43:47 +02:00
parent ce75c2827a
commit bee99b7554
2 changed files with 54 additions and 2 deletions

View File

@ -102,6 +102,7 @@ GroovesharkService::GroovesharkService(Application* app, InternetModel *parent)
remove_from_playlist_(NULL),
remove_from_favorites_(NULL),
get_url_to_share_song_(NULL),
get_url_to_share_playlist_(NULL),
search_delay_(new QTimer(this)),
last_search_reply_(NULL),
api_key_(QByteArray::fromBase64(kApiSecret)),
@ -442,7 +443,8 @@ void GroovesharkService::ShowContextMenu(const QPoint& global_pos) {
bool display_delete_playlist_action = false,
display_remove_from_playlist_action = false,
display_remove_from_favorites_action = false,
display_share_song_url = false;
display_share_song_url = false,
display_share_playlist_url = false;
QModelIndex index(model()->current_index());
@ -466,12 +468,26 @@ void GroovesharkService::ShowContextMenu(const QPoint& global_pos) {
remove_from_playlist_->setVisible(display_remove_from_playlist_action);
remove_from_favorites_->setVisible(display_remove_from_favorites_action);
// Check if we can display actions to get URL for sharing songs/playlists:
// - share song
if (index.data(InternetModel::Role_Type).toInt() == Type_Track) {
display_share_song_url = true;
current_song_id_ = ExtractSongId(index.data(InternetModel::Role_Url).toUrl());
}
get_url_to_share_song_->setVisible(display_share_song_url);
// - share playlist
if (index.data(InternetModel::Role_Type).toInt() == InternetModel::Type_UserPlaylist
&& index.data(Role_UserPlaylistId).isValid()) {
display_share_playlist_url = true;
current_playlist_id_ = index.data(Role_UserPlaylistId).toInt();
} else if (parent_type == InternetModel::Type_UserPlaylist
&& index.parent().data(Role_UserPlaylistId).isValid()) {
display_share_playlist_url = true;
current_playlist_id_ = index.parent().data(Role_UserPlaylistId).toInt();
}
get_url_to_share_playlist_->setVisible(display_share_playlist_url);
context_menu_->popup(global_pos);
}
@ -501,6 +517,9 @@ void GroovesharkService::EnsureMenuCreated() {
get_url_to_share_song_ = context_menu_->addAction(
tr("Get an URL to share this Grooveshark song"),
this, SLOT(GetCurrentSongUrlToShare()));
get_url_to_share_playlist_ = context_menu_->addAction(
tr("Get an URL to share this Grooveshark playlist"),
this, SLOT(GetCurrentPlaylistUrlToShare()));
context_menu_->addSeparator();
context_menu_->addAction(IconLoader::Load("edit-find"),
tr("Search Grooveshark (opens a new tab)") + "...",
@ -1071,9 +1090,34 @@ void GroovesharkService::SongUrlToShareReceived(QNetworkReply* reply) {
if (!result["url"].isValid())
return;
QString url = result["url"].toString();
ShowUrlBox(tr("Grooveshark song's URL"), url);
}
void GroovesharkService::GetCurrentPlaylistUrlToShare() {
GetPlaylistUrlToShare(current_playlist_id_);
}
void GroovesharkService::GetPlaylistUrlToShare(int playlist_id) {
QList<Param> parameters;
parameters << Param("playlistID", playlist_id);
QNetworkReply* reply = CreateRequest("getPlaylistURLFromPlaylistID", parameters);
NewClosure(reply, SIGNAL(finished()), this,
SLOT(PlaylistUrlToShareReceived(QNetworkReply*)), reply);
}
void GroovesharkService::PlaylistUrlToShareReceived(QNetworkReply* reply) {
reply->deleteLater();
QVariantMap result = ExtractResult(reply);
if (!result["url"].isValid())
return;
QString url = result["url"].toString();
ShowUrlBox(tr("Grooveshark playlist's URL"), url);
}
void GroovesharkService::ShowUrlBox(const QString& title, const QString& url) {
QMessageBox url_box;
url_box.setWindowTitle(tr("Grooveshark song's URL"));
url_box.setWindowTitle(title);
url_box.setWindowIcon(QIcon(":/icon.png"));
url_box.setText(url);
url_box.setStandardButtons(QMessageBox::Ok);

View File

@ -98,6 +98,7 @@ class GroovesharkService : public InternetService {
void AddUserFavoriteSong(int song_id);
void RemoveFromFavorites(int song_id);
void GetSongUrlToShare(int song_id);
void GetPlaylistUrlToShare(int playlist_id);
// Start autoplay for the given tag_id, fill the autoplay_state, returns a
// first song to play
Song StartAutoplayTag(int tag_id, QVariantMap& autoplay_state);
@ -172,6 +173,8 @@ class GroovesharkService : public InternetService {
void UserFavoriteSongAdded(QNetworkReply* reply, int task_id);
void GetCurrentSongUrlToShare();
void SongUrlToShareReceived(QNetworkReply* reply);
void GetCurrentPlaylistUrlToShare();
void PlaylistUrlToShareReceived(QNetworkReply* reply);
void RemoveCurrentFromPlaylist();
void RemoveCurrentFromFavorites();
void SongRemovedFromFavorites(QNetworkReply* reply, int task_id);
@ -205,6 +208,7 @@ class GroovesharkService : public InternetService {
// Convenient function which block until 'reply' replies, or timeout after 10
// seconds. Returns false if reply has timeouted
bool WaitForReply(QNetworkReply* reply);
void ShowUrlBox(const QString& title, const QString& url);
// Convenient function for extracting result from reply
QVariantMap ExtractResult(QNetworkReply* reply);
// Convenient function for extracting songs from grooveshark result. result
@ -247,7 +251,10 @@ class GroovesharkService : public InternetService {
NetworkAccessManager* network_;
QMenu* context_menu_;
// IDs kept when showing menu, to know what the user has clicked on, to be
// able to perform actions on corresponding items
int current_song_id_;
int current_playlist_id_;
QAction* create_playlist_;
QAction* delete_playlist_;
@ -255,6 +262,7 @@ class GroovesharkService : public InternetService {
QAction* remove_from_playlist_;
QAction* remove_from_favorites_;
QAction* get_url_to_share_song_;
QAction* get_url_to_share_playlist_;
QList<QAction*> playlistitem_actions_;
QTimer* search_delay_;