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:
parent
ce75c2827a
commit
bee99b7554
@ -102,6 +102,7 @@ GroovesharkService::GroovesharkService(Application* app, InternetModel *parent)
|
|||||||
remove_from_playlist_(NULL),
|
remove_from_playlist_(NULL),
|
||||||
remove_from_favorites_(NULL),
|
remove_from_favorites_(NULL),
|
||||||
get_url_to_share_song_(NULL),
|
get_url_to_share_song_(NULL),
|
||||||
|
get_url_to_share_playlist_(NULL),
|
||||||
search_delay_(new QTimer(this)),
|
search_delay_(new QTimer(this)),
|
||||||
last_search_reply_(NULL),
|
last_search_reply_(NULL),
|
||||||
api_key_(QByteArray::fromBase64(kApiSecret)),
|
api_key_(QByteArray::fromBase64(kApiSecret)),
|
||||||
@ -442,7 +443,8 @@ void GroovesharkService::ShowContextMenu(const QPoint& global_pos) {
|
|||||||
bool display_delete_playlist_action = false,
|
bool display_delete_playlist_action = false,
|
||||||
display_remove_from_playlist_action = false,
|
display_remove_from_playlist_action = false,
|
||||||
display_remove_from_favorites_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());
|
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_playlist_->setVisible(display_remove_from_playlist_action);
|
||||||
remove_from_favorites_->setVisible(display_remove_from_favorites_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) {
|
if (index.data(InternetModel::Role_Type).toInt() == Type_Track) {
|
||||||
display_share_song_url = true;
|
display_share_song_url = true;
|
||||||
current_song_id_ = ExtractSongId(index.data(InternetModel::Role_Url).toUrl());
|
current_song_id_ = ExtractSongId(index.data(InternetModel::Role_Url).toUrl());
|
||||||
}
|
}
|
||||||
get_url_to_share_song_->setVisible(display_share_song_url);
|
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);
|
context_menu_->popup(global_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -501,6 +517,9 @@ void GroovesharkService::EnsureMenuCreated() {
|
|||||||
get_url_to_share_song_ = context_menu_->addAction(
|
get_url_to_share_song_ = context_menu_->addAction(
|
||||||
tr("Get an URL to share this Grooveshark song"),
|
tr("Get an URL to share this Grooveshark song"),
|
||||||
this, SLOT(GetCurrentSongUrlToShare()));
|
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_->addSeparator();
|
||||||
context_menu_->addAction(IconLoader::Load("edit-find"),
|
context_menu_->addAction(IconLoader::Load("edit-find"),
|
||||||
tr("Search Grooveshark (opens a new tab)") + "...",
|
tr("Search Grooveshark (opens a new tab)") + "...",
|
||||||
@ -1071,9 +1090,34 @@ void GroovesharkService::SongUrlToShareReceived(QNetworkReply* reply) {
|
|||||||
if (!result["url"].isValid())
|
if (!result["url"].isValid())
|
||||||
return;
|
return;
|
||||||
QString url = result["url"].toString();
|
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;
|
QMessageBox url_box;
|
||||||
url_box.setWindowTitle(tr("Grooveshark song's URL"));
|
url_box.setWindowTitle(title);
|
||||||
url_box.setWindowIcon(QIcon(":/icon.png"));
|
url_box.setWindowIcon(QIcon(":/icon.png"));
|
||||||
url_box.setText(url);
|
url_box.setText(url);
|
||||||
url_box.setStandardButtons(QMessageBox::Ok);
|
url_box.setStandardButtons(QMessageBox::Ok);
|
||||||
|
@ -98,6 +98,7 @@ class GroovesharkService : public InternetService {
|
|||||||
void AddUserFavoriteSong(int song_id);
|
void AddUserFavoriteSong(int song_id);
|
||||||
void RemoveFromFavorites(int song_id);
|
void RemoveFromFavorites(int song_id);
|
||||||
void GetSongUrlToShare(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
|
// Start autoplay for the given tag_id, fill the autoplay_state, returns a
|
||||||
// first song to play
|
// first song to play
|
||||||
Song StartAutoplayTag(int tag_id, QVariantMap& autoplay_state);
|
Song StartAutoplayTag(int tag_id, QVariantMap& autoplay_state);
|
||||||
@ -172,6 +173,8 @@ class GroovesharkService : public InternetService {
|
|||||||
void UserFavoriteSongAdded(QNetworkReply* reply, int task_id);
|
void UserFavoriteSongAdded(QNetworkReply* reply, int task_id);
|
||||||
void GetCurrentSongUrlToShare();
|
void GetCurrentSongUrlToShare();
|
||||||
void SongUrlToShareReceived(QNetworkReply* reply);
|
void SongUrlToShareReceived(QNetworkReply* reply);
|
||||||
|
void GetCurrentPlaylistUrlToShare();
|
||||||
|
void PlaylistUrlToShareReceived(QNetworkReply* reply);
|
||||||
void RemoveCurrentFromPlaylist();
|
void RemoveCurrentFromPlaylist();
|
||||||
void RemoveCurrentFromFavorites();
|
void RemoveCurrentFromFavorites();
|
||||||
void SongRemovedFromFavorites(QNetworkReply* reply, int task_id);
|
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
|
// Convenient function which block until 'reply' replies, or timeout after 10
|
||||||
// seconds. Returns false if reply has timeouted
|
// seconds. Returns false if reply has timeouted
|
||||||
bool WaitForReply(QNetworkReply* reply);
|
bool WaitForReply(QNetworkReply* reply);
|
||||||
|
void ShowUrlBox(const QString& title, const QString& url);
|
||||||
// Convenient function for extracting result from reply
|
// Convenient function for extracting result from reply
|
||||||
QVariantMap ExtractResult(QNetworkReply* reply);
|
QVariantMap ExtractResult(QNetworkReply* reply);
|
||||||
// Convenient function for extracting songs from grooveshark result. result
|
// Convenient function for extracting songs from grooveshark result. result
|
||||||
@ -247,7 +251,10 @@ class GroovesharkService : public InternetService {
|
|||||||
NetworkAccessManager* network_;
|
NetworkAccessManager* network_;
|
||||||
|
|
||||||
QMenu* context_menu_;
|
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_song_id_;
|
||||||
|
int current_playlist_id_;
|
||||||
|
|
||||||
QAction* create_playlist_;
|
QAction* create_playlist_;
|
||||||
QAction* delete_playlist_;
|
QAction* delete_playlist_;
|
||||||
@ -255,6 +262,7 @@ class GroovesharkService : public InternetService {
|
|||||||
QAction* remove_from_playlist_;
|
QAction* remove_from_playlist_;
|
||||||
QAction* remove_from_favorites_;
|
QAction* remove_from_favorites_;
|
||||||
QAction* get_url_to_share_song_;
|
QAction* get_url_to_share_song_;
|
||||||
|
QAction* get_url_to_share_playlist_;
|
||||||
QList<QAction*> playlistitem_actions_;
|
QList<QAction*> playlistitem_actions_;
|
||||||
|
|
||||||
QTimer* search_delay_;
|
QTimer* search_delay_;
|
||||||
|
Loading…
Reference in New Issue
Block a user