Add GS subscribed playlits

This commit is contained in:
Arnaud Bienner 2011-11-25 01:00:58 +01:00
parent 7a188787de
commit 1e02bbe485
3 changed files with 128 additions and 67 deletions

View File

@ -85,6 +85,7 @@ GroovesharkService::GroovesharkService(InternetModel *parent)
popular_month_(NULL),
popular_today_(NULL),
favorites_(NULL),
subscribed_playlists_divider_(NULL),
network_(new NetworkAccessManager(this)),
context_menu_(NULL),
remove_from_playlist_(NULL),
@ -429,7 +430,9 @@ void GroovesharkService::Logout() {
popular_month_ = NULL;
popular_today_ = NULL;
favorites_ = NULL;
subscribed_playlists_divider_ = NULL;
playlists_.clear();
subscribed_playlists_.clear();
}
void GroovesharkService::ResetSessionId() {
@ -459,7 +462,7 @@ void GroovesharkService::ShowContextMenu(const QModelIndex& index, const QPoint&
int parent_playlist_type = index.parent().data(Role_PlaylistType).toInt();
if (parent_playlist_type == UserFavorites)
display_remove_from_favorites_action = true;
else
else if (parent_playlist_type == UserPlaylist)
display_remove_from_playlist_action = true;
}
delete_playlist_->setVisible(display_delete_playlist_action);
@ -546,8 +549,13 @@ void GroovesharkService::EnsureItemsCreated() {
InternetModel::Role_PlayBehaviour);
root_->appendRow(favorites_);
subscribed_playlists_divider_ = new QStandardItem(tr("Subscribed playlists"));
subscribed_playlists_divider_->setData(true, InternetModel::Role_IsDivider);
root_->appendRow(subscribed_playlists_divider_);
RetrieveUserFavorites();
RetrieveUserPlaylists();
RetrieveSubscribedPlaylists();
RetrievePopularSongs();
}
}
@ -612,8 +620,12 @@ void GroovesharkService::PlaylistSongsRetrieved() {
PlaylistInfo playlist_info = pending_retrieve_playlists_.take(reply);
// Get the playlist item (in case of refresh) or create a new one
QStandardItem* item = NULL;
PlaylistType playlist_type = UserPlaylist;
if (playlists_.contains(playlist_info.id_)) {
item = playlists_[playlist_info.id_].item_;
} else if (subscribed_playlists_.contains(playlist_info.id_)) {
item = subscribed_playlists_[playlist_info.id_].item_;
playlist_type = SubscribedPlaylist;
}
bool item_already_exists = false;
if (item) {
@ -637,13 +649,18 @@ void GroovesharkService::PlaylistSongsRetrieved() {
item->appendRow(child);
}
if (!item_already_exists) {
root_->appendRow(item);
// Insert this new item just below the favorites list
root_->insertRow(favorites_->row() + 1, item);
}
// Keep in mind this playlist
playlist_info.songs_ids_ = ExtractSongsIds(result);
playlist_info.item_ = item;
playlists_.insert(playlist_info.id_, playlist_info);
if (playlist_type == SubscribedPlaylist) {
subscribed_playlists_.insert(playlist_info.id_, playlist_info);
} else {
playlists_.insert(playlist_info.id_, playlist_info);
}
if (pending_retrieve_playlists_.isEmpty()) {
model()->task_manager()->SetTaskFinished(task_playlists_id_);
@ -742,6 +759,37 @@ void GroovesharkService::PopularSongsTodayRetrieved(QNetworkReply* reply) {
}
}
void GroovesharkService::RetrieveSubscribedPlaylists() {
QNetworkReply* reply = CreateRequest("getUserPlaylistsSubscribed", QList<Param>());
NewClosure(reply, SIGNAL(finished()),
this, SLOT(SubscribedPlaylistsRetrieved(QNetworkReply*)), reply);
}
void GroovesharkService::SubscribedPlaylistsRetrieved(QNetworkReply* reply) {
reply->deleteLater();
QVariantMap result = ExtractResult(reply);
QVariantList playlists = result["playlists"].toList();
QVariantList::iterator it;
for (it = playlists.begin(); it != playlists.end(); ++it) {
// Get playlist info
QVariantMap playlist = (*it).toMap();
int playlist_id = playlist["PlaylistID"].toInt();
QString playlist_name = playlist["PlaylistName"].toString();
QStandardItem* playlist_item = CreatePlaylistItem(playlist_name, playlist_id);
// Refine some playlist properties that should be different for subscribed
// playlists
playlist_item->setData(SubscribedPlaylist, Role_PlaylistType);
playlist_item->setData(false, InternetModel::Role_CanBeModified);
PlaylistInfo playlist_info(playlist_id, playlist_name, playlist_item);
subscribed_playlists_.insert(playlist_id, playlist_info);
root_->insertRow(subscribed_playlists_divider_->row() + 1, playlist_item);
// Request playlist's songs
RefreshPlaylist(playlist_id, playlist_name);
}
}
void GroovesharkService::MarkStreamKeyOver30Secs(const QString& stream_key,
const QString& server_id) {
QList<Param> parameters;

View File

@ -48,7 +48,8 @@ class GroovesharkService : public InternetService {
UserPlaylist = Qt::UserRole,
// Favorites list is like a playlist, but we want to do special treatments
// in some cases
UserFavorites
UserFavorites,
SubscribedPlaylist
};
// Values are persisted - don't change.
@ -81,6 +82,7 @@ class GroovesharkService : public InternetService {
void RetrievePopularSongs();
void RetrievePopularSongsMonth();
void RetrievePopularSongsToday();
void RetrieveSubscribedPlaylists();
void SetPlaylistSongs(int playlist_id, const QList<int>& songs_ids);
void RemoveFromPlaylist(int playlist_id, int song_id);
// Refresh playlist_id playlist , or create it if it doesn't exist
@ -118,8 +120,8 @@ class GroovesharkService : public InternetService {
struct PlaylistInfo {
PlaylistInfo() {}
PlaylistInfo(int id, QString name)
: id_(id), name_(name), item_(NULL) {}
PlaylistInfo(int id, QString name, QStandardItem* item = NULL)
: id_(id), name_(name), item_(item) {}
int id_;
QString name_;
@ -142,6 +144,7 @@ class GroovesharkService : public InternetService {
void UserFavoritesRetrieved(QNetworkReply* reply, int task_id);
void PopularSongsMonthRetrieved(QNetworkReply* reply);
void PopularSongsTodayRetrieved(QNetworkReply* reply);
void SubscribedPlaylistsRetrieved(QNetworkReply* reply);
void PlaylistSongsRetrieved();
void PlaylistSongsSet(QNetworkReply* reply, int playlist_id, int task_id);
void CreateNewPlaylist();
@ -201,12 +204,14 @@ class GroovesharkService : public InternetService {
QMap<QNetworkReply*, PlaylistInfo> pending_retrieve_playlists_;
QMap<int, PlaylistInfo> playlists_;
QMap<int, PlaylistInfo> subscribed_playlists_;
QStandardItem* root_;
QStandardItem* search_;
QStandardItem* popular_month_;
QStandardItem* popular_today_;
QStandardItem* favorites_;
QStandardItem* subscribed_playlists_divider_;
NetworkAccessManager* network_;

View File

@ -213,11 +213,7 @@ msgstr ""
msgid "1 track"
msgstr ""
#: ui_magnatunedownloaddialog.h:143
msgid "128K MP3"
msgstr ""
#: ui_magnatunesettingspage.h:170
#: ui_magnatunedownloaddialog.h:143 ui_magnatunesettingspage.h:170
msgid "128k MP3"
msgstr ""
@ -241,7 +237,7 @@ msgstr ""
msgid "A Grooveshark Anywhere account is required."
msgstr ""
#: internet/spotifysettingspage.cpp:147
#: internet/spotifysettingspage.cpp:145
msgid "A Spotify Premium account is required."
msgstr ""
@ -419,11 +415,11 @@ msgstr ""
msgid "Add stream..."
msgstr ""
#: internet/groovesharkservice.cpp:840
#: internet/groovesharkservice.cpp:905
msgid "Add to Grooveshark favorites"
msgstr ""
#: internet/groovesharkservice.cpp:846
#: internet/groovesharkservice.cpp:911
msgid "Add to Grooveshark playlists"
msgstr ""
@ -467,7 +463,7 @@ msgstr ""
msgid "Added within three months"
msgstr ""
#: internet/groovesharkservice.cpp:1038
#: internet/groovesharkservice.cpp:1103
msgid "Adding song to favorites"
msgstr ""
@ -479,7 +475,7 @@ msgstr ""
msgid "After copying..."
msgstr ""
#: playlist/playlist.cpp:1099 ui/organisedialog.cpp:52
#: playlist/playlist.cpp:1103 ui/organisedialog.cpp:52
#: ui/qtsystemtrayicon.cpp:252 ui_groupbydialog.h:129 ui_groupbydialog.h:142
#: ui_groupbydialog.h:155 ui_albumcoversearcher.h:110
#: ui_albumcoversearcher.h:112 ui_edittagdialog.h:656
@ -491,7 +487,7 @@ msgstr ""
msgid "Album (ideal loudness for all tracks)"
msgstr ""
#: playlist/playlist.cpp:1105 ui/organisedialog.cpp:55 ui_edittagdialog.h:658
#: playlist/playlist.cpp:1109 ui/organisedialog.cpp:55 ui_edittagdialog.h:658
msgid "Album artist"
msgstr ""
@ -622,7 +618,7 @@ msgstr ""
msgid "Are you sure you want to delete the \"%1\" preset?"
msgstr ""
#: internet/groovesharkservice.cpp:1010
#: internet/groovesharkservice.cpp:1075
msgid "Are you sure you want to delete this playlist?"
msgstr ""
@ -630,7 +626,7 @@ msgstr ""
msgid "Are you sure you want to reset this song's statistics?"
msgstr ""
#: playlist/playlist.cpp:1098 ui/organisedialog.cpp:53
#: playlist/playlist.cpp:1102 ui/organisedialog.cpp:53
#: ui/qtsystemtrayicon.cpp:250 ui_groupbydialog.h:130 ui_groupbydialog.h:143
#: ui_groupbydialog.h:156 ui_albumcoversearcher.h:106
#: ui_albumcoversearcher.h:108 ui_edittagdialog.h:654
@ -696,7 +692,7 @@ msgstr ""
msgid "Average image size"
msgstr ""
#: playlist/playlist.cpp:1114 ui/organisedialog.cpp:59 ui_edittagdialog.h:638
#: playlist/playlist.cpp:1118 ui/organisedialog.cpp:59 ui_edittagdialog.h:638
msgid "BPM"
msgstr ""
@ -741,7 +737,7 @@ msgstr ""
msgid "Biography from %1"
msgstr ""
#: playlist/playlist.cpp:1115 ui_edittagdialog.h:640
#: playlist/playlist.cpp:1119 ui_edittagdialog.h:640
msgid "Bit rate"
msgstr ""
@ -958,7 +954,7 @@ msgstr ""
msgid "Comma separated list of class:level, level is 0-3"
msgstr ""
#: playlist/playlist.cpp:1124 smartplaylists/searchterm.cpp:279
#: playlist/playlist.cpp:1128 smartplaylists/searchterm.cpp:279
#: ui/organisedialog.cpp:62 ui_edittagdialog.h:661
msgid "Comment"
msgstr ""
@ -971,12 +967,12 @@ msgstr ""
msgid "Complete tags automatically..."
msgstr ""
#: playlist/playlist.cpp:1106 ui/organisedialog.cpp:56 ui_groupbydialog.h:132
#: playlist/playlist.cpp:1110 ui/organisedialog.cpp:56 ui_groupbydialog.h:132
#: ui_groupbydialog.h:145 ui_groupbydialog.h:158 ui_edittagdialog.h:659
msgid "Composer"
msgstr ""
#: internet/groovesharkservice.cpp:492
#: internet/groovesharkservice.cpp:504
msgid "Configure Grooveshark..."
msgstr ""
@ -1029,7 +1025,7 @@ msgstr ""
msgid "Convert any music that the device can't play"
msgstr ""
#: internet/groovesharkservice.cpp:893
#: internet/groovesharkservice.cpp:958
msgid "Copy to clipboard"
msgstr ""
@ -1108,7 +1104,7 @@ msgstr ""
msgid "Covers from %1"
msgstr ""
#: internet/groovesharkservice.cpp:477 internet/groovesharkservice.cpp:962
#: internet/groovesharkservice.cpp:488 internet/groovesharkservice.cpp:1027
msgid "Create a new Grooveshark playlist"
msgstr ""
@ -1216,11 +1212,11 @@ msgstr ""
msgid "Dance"
msgstr ""
#: playlist/playlist.cpp:1122 ui_edittagdialog.h:649
#: playlist/playlist.cpp:1126 ui_edittagdialog.h:649
msgid "Date created"
msgstr ""
#: playlist/playlist.cpp:1121 ui_edittagdialog.h:648
#: playlist/playlist.cpp:1125 ui_edittagdialog.h:648
msgid "Date modified"
msgstr ""
@ -1248,7 +1244,7 @@ msgstr ""
msgid "Delay between visualizations"
msgstr ""
#: internet/groovesharkservice.cpp:480 internet/groovesharkservice.cpp:1009
#: internet/groovesharkservice.cpp:491 internet/groovesharkservice.cpp:1074
msgid "Delete Grooveshark playlist"
msgstr ""
@ -1354,7 +1350,7 @@ msgstr ""
msgid "Disabled"
msgstr ""
#: playlist/playlist.cpp:1102 ui/organisedialog.cpp:58 ui_edittagdialog.h:655
#: playlist/playlist.cpp:1106 ui/organisedialog.cpp:58 ui_edittagdialog.h:655
msgid "Disc"
msgstr ""
@ -1675,7 +1671,7 @@ msgstr ""
msgid "Fast"
msgstr ""
#: internet/groovesharkservice.cpp:524
#: internet/groovesharkservice.cpp:543
msgid "Favorites"
msgstr ""
@ -1707,19 +1703,19 @@ msgstr ""
msgid "File formats"
msgstr ""
#: playlist/playlist.cpp:1117 ui_edittagdialog.h:650
#: playlist/playlist.cpp:1121 ui_edittagdialog.h:650
msgid "File name"
msgstr ""
#: playlist/playlist.cpp:1118
#: playlist/playlist.cpp:1122
msgid "File name (without path)"
msgstr ""
#: playlist/playlist.cpp:1119 ui_edittagdialog.h:644
#: playlist/playlist.cpp:1123 ui_edittagdialog.h:644
msgid "File size"
msgstr ""
#: playlist/playlist.cpp:1120 ui_groupbydialog.h:133 ui_groupbydialog.h:146
#: playlist/playlist.cpp:1124 ui_groupbydialog.h:133 ui_groupbydialog.h:146
#: ui_groupbydialog.h:159 ui_edittagdialog.h:646
msgid "File type"
msgstr ""
@ -1845,16 +1841,16 @@ msgstr ""
msgid "General settings"
msgstr ""
#: playlist/playlist.cpp:1104 ui/organisedialog.cpp:61 ui_groupbydialog.h:134
#: playlist/playlist.cpp:1108 ui/organisedialog.cpp:61 ui_groupbydialog.h:134
#: ui_groupbydialog.h:147 ui_groupbydialog.h:160 ui_edittagdialog.h:660
msgid "Genre"
msgstr ""
#: internet/groovesharkservice.cpp:857
#: internet/groovesharkservice.cpp:922
msgid "Get an URL to share this Grooveshark song"
msgstr ""
#: internet/groovesharkservice.cpp:667
#: internet/groovesharkservice.cpp:701
msgid "Getting Grooveshark popular songs"
msgstr ""
@ -1900,11 +1896,11 @@ msgstr ""
msgid "Grooveshark"
msgstr ""
#: internet/groovesharkservice.cpp:404
#: internet/groovesharkservice.cpp:413
msgid "Grooveshark login error"
msgstr ""
#: internet/groovesharkservice.cpp:889
#: internet/groovesharkservice.cpp:954
msgid "Grooveshark song's URL"
msgstr ""
@ -2099,7 +2095,7 @@ msgstr ""
msgid "Invalid session key"
msgstr ""
#: internet/groovesharkservice.cpp:397
#: internet/groovesharkservice.cpp:406
msgid "Invalid username and/or password"
msgstr ""
@ -2174,7 +2170,7 @@ msgstr ""
msgid "Large sidebar"
msgstr ""
#: library/library.cpp:66 playlist/playlist.cpp:1111 ui_edittagdialog.h:641
#: library/library.cpp:66 playlist/playlist.cpp:1115 ui_edittagdialog.h:641
msgid "Last played"
msgstr ""
@ -2252,7 +2248,7 @@ msgstr ""
msgid "Leave blank for the default. Examples: \"/dev/dsp\", \"front\", etc."
msgstr ""
#: playlist/playlist.cpp:1100 ui/organisedialog.cpp:63
#: playlist/playlist.cpp:1104 ui/organisedialog.cpp:63
#: ui/qtsystemtrayicon.cpp:255 ui_edittagdialog.h:636
msgid "Length"
msgstr ""
@ -2567,7 +2563,7 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
#: internet/groovesharkservice.cpp:963 ui/equalizer.cpp:172
#: internet/groovesharkservice.cpp:1028 ui/equalizer.cpp:172
#: ui_deviceproperties.h:369 ui_magnatunedownloaddialog.h:135
#: ui_wizardfinishpage.h:84 ui_globalshortcutssettingspage.h:174
msgid "Name"
@ -2733,7 +2729,7 @@ msgid "Only show the first"
msgstr ""
#: internet/digitallyimportedservicebase.cpp:178
#: internet/groovesharkservice.cpp:493 internet/icecastservice.cpp:300
#: internet/groovesharkservice.cpp:503 internet/icecastservice.cpp:300
#: internet/jamendoservice.cpp:414 internet/magnatuneservice.cpp:271
#: internet/somafmservice.cpp:84
#, qt-format
@ -2863,7 +2859,7 @@ msgstr ""
msgid "Play artist radio..."
msgstr ""
#: playlist/playlist.cpp:1109 ui_edittagdialog.h:637
#: playlist/playlist.cpp:1113 ui_edittagdialog.h:637
msgid "Play count"
msgstr ""
@ -2924,6 +2920,10 @@ msgstr ""
msgid "Playlist type"
msgstr ""
#: internet/groovesharkservice.cpp:539
msgid "Playlists"
msgstr ""
#: ui_spotifysettingspage.h:185
msgid "Plugin status:"
msgstr ""
@ -2932,11 +2932,15 @@ msgstr ""
msgid "Pop"
msgstr ""
#: internet/groovesharkservice.cpp:510
#: internet/groovesharkservice.cpp:521
msgid "Popular songs"
msgstr ""
#: internet/groovesharkservice.cpp:525
msgid "Popular songs of the Month"
msgstr ""
#: internet/groovesharkservice.cpp:517
#: internet/groovesharkservice.cpp:532
msgid "Popular songs today"
msgstr ""
@ -3091,7 +3095,7 @@ msgstr ""
msgid "Rate the current song 5 stars"
msgstr ""
#: playlist/playlist.cpp:1108 ui_edittagdialog.h:645
#: playlist/playlist.cpp:1112 ui_edittagdialog.h:645
msgid "Rating"
msgstr ""
@ -3148,11 +3152,11 @@ msgstr ""
msgid "Remove folder"
msgstr ""
#: internet/groovesharkservice.cpp:487
#: internet/groovesharkservice.cpp:498
msgid "Remove from favorites"
msgstr ""
#: internet/groovesharkservice.cpp:484 ui_mainwindow.h:674
#: internet/groovesharkservice.cpp:495 ui_mainwindow.h:674
msgid "Remove from playlist"
msgstr ""
@ -3160,7 +3164,7 @@ msgstr ""
msgid "Remove playlist"
msgstr ""
#: internet/groovesharkservice.cpp:1096
#: internet/groovesharkservice.cpp:1161
msgid "Removing song from favorites"
msgstr ""
@ -3238,11 +3242,11 @@ msgstr ""
msgid "Results"
msgstr ""
#: internet/groovesharkservice.cpp:638
#: internet/groovesharkservice.cpp:672
msgid "Retrieving Grooveshark favorites songs"
msgstr ""
#: internet/groovesharkservice.cpp:560
#: internet/groovesharkservice.cpp:585
msgid "Retrieving Grooveshark playlists"
msgstr ""
@ -3262,7 +3266,7 @@ msgstr ""
msgid "Safely remove the device after copying"
msgstr ""
#: playlist/playlist.cpp:1116 ui_edittagdialog.h:642
#: playlist/playlist.cpp:1120 ui_edittagdialog.h:642
msgid "Sample rate"
msgstr ""
@ -3306,7 +3310,7 @@ msgstr ""
msgid "Scalable sampling rate profile (SSR)"
msgstr ""
#: playlist/playlist.cpp:1112 ui_edittagdialog.h:643
#: playlist/playlist.cpp:1116 ui_edittagdialog.h:643
msgid "Score"
msgstr ""
@ -3319,11 +3323,11 @@ msgid "Search"
msgstr ""
#: internet/groovesharksearchplaylisttype.cpp:32
#: internet/groovesharkservice.cpp:775
#: internet/groovesharkservice.cpp:840
msgid "Search Grooveshark"
msgstr ""
#: internet/groovesharkservice.cpp:490 internet/groovesharkservice.cpp:504
#: internet/groovesharkservice.cpp:501 internet/groovesharkservice.cpp:515
msgid "Search Grooveshark (opens a new tab)"
msgstr ""
@ -3375,7 +3379,7 @@ msgstr ""
msgid "Search terms"
msgstr ""
#: internet/groovesharkservice.cpp:264
#: internet/groovesharkservice.cpp:273
msgid "Searching on Grooveshark"
msgstr ""
@ -3594,7 +3598,7 @@ msgstr ""
msgid "Skip backwards in playlist"
msgstr ""
#: playlist/playlist.cpp:1110 ui_edittagdialog.h:639
#: playlist/playlist.cpp:1114 ui_edittagdialog.h:639
msgid "Skip count"
msgstr ""
@ -3750,6 +3754,10 @@ msgstr ""
msgid "Streaming membership"
msgstr ""
#: internet/groovesharkservice.cpp:552
msgid "Subscribed playlists"
msgstr ""
#: transcoder/transcoder.cpp:198
#, qt-format
msgid "Successfully written %1"
@ -3960,7 +3968,7 @@ msgstr ""
msgid "Timezone"
msgstr ""
#: playlist/playlist.cpp:1097 ui/organisedialog.cpp:51
#: playlist/playlist.cpp:1101 ui/organisedialog.cpp:51
#: ui/qtsystemtrayicon.cpp:248 ui_about.h:142 ui_edittagdialog.h:652
#: ui_trackselectiondialog.h:211
msgid "Title"
@ -3998,7 +4006,7 @@ msgstr ""
msgid "Total network requests made"
msgstr ""
#: playlist/playlist.cpp:1101 ui/organisedialog.cpp:57 ui_edittagdialog.h:653
#: playlist/playlist.cpp:1105 ui/organisedialog.cpp:57 ui_edittagdialog.h:653
#: ui_trackselectiondialog.h:212
msgid "Track"
msgstr ""
@ -4069,7 +4077,7 @@ msgstr ""
msgid "Unset cover"
msgstr ""
#: internet/groovesharkservice.cpp:917
#: internet/groovesharkservice.cpp:982
msgid "Update Grooveshark playlist"
msgstr ""
@ -4147,7 +4155,7 @@ msgstr ""
msgid "Used"
msgstr ""
#: internet/groovesharkservice.cpp:400
#: internet/groovesharkservice.cpp:409
#, qt-format
msgid "User %1 doesn't have a Grooveshark Anywhere account"
msgstr ""
@ -4305,7 +4313,7 @@ msgstr ""
msgid "Would you like to run a full rescan right now?"
msgstr ""
#: playlist/playlist.cpp:1103 ui/organisedialog.cpp:60 ui_groupbydialog.h:135
#: playlist/playlist.cpp:1107 ui/organisedialog.cpp:60 ui_groupbydialog.h:135
#: ui_groupbydialog.h:148 ui_groupbydialog.h:161 ui_edittagdialog.h:657
msgid "Year"
msgstr ""
@ -4376,7 +4384,7 @@ msgstr ""
msgid "You do not have a Grooveshark Anywhere account."
msgstr ""
#: internet/spotifysettingspage.cpp:138
#: internet/spotifysettingspage.cpp:136
msgid "You do not have a Spotify Premium account."
msgstr ""
@ -4439,7 +4447,7 @@ msgid "Your scrobbles: %1"
msgstr ""
#: internet/groovesharksettingspage.cpp:109
#: internet/spotifysettingspage.cpp:143
#: internet/spotifysettingspage.cpp:141
msgid "Your username or password was incorrect."
msgstr ""