Create GS playlists items when retrieving playlists instead of creating them when retrieving playlists' songs
This commit is contained in:
parent
74ea844811
commit
b364d3fa84
|
@ -619,8 +619,15 @@ void GroovesharkService::UserPlaylistsRetrieved() {
|
||||||
int playlist_id = playlist["PlaylistID"].toInt();
|
int playlist_id = playlist["PlaylistID"].toInt();
|
||||||
QString playlist_name = playlist["PlaylistName"].toString();
|
QString playlist_name = playlist["PlaylistName"].toString();
|
||||||
|
|
||||||
|
QStandardItem* playlist_item =
|
||||||
|
CreatePlaylistItem(playlist_name, playlist_id);
|
||||||
|
// Insert this new item just below the favorites list
|
||||||
|
root_->insertRow(favorites_->row() + 1, playlist_item);
|
||||||
|
// Keep in mind this playlist
|
||||||
|
playlists_.insert(playlist_id,
|
||||||
|
PlaylistInfo(playlist_id, playlist_name, playlist_item));
|
||||||
// Request playlist's songs
|
// Request playlist's songs
|
||||||
RefreshPlaylist(playlist_id, playlist_name);
|
RefreshPlaylist(playlist_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (playlists.isEmpty()) {
|
if (playlists.isEmpty()) {
|
||||||
|
@ -636,23 +643,12 @@ void GroovesharkService::PlaylistSongsRetrieved() {
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
|
|
||||||
// Find corresponding playlist info
|
// Find corresponding playlist info
|
||||||
PlaylistInfo playlist_info = pending_retrieve_playlists_.take(reply);
|
int playlist_id = pending_retrieve_playlists_.take(reply);
|
||||||
// Get the playlist item (in case of refresh) or create a new one
|
PlaylistInfo& playlist_info = playlists_[playlist_id];
|
||||||
QStandardItem* item = NULL;
|
if (subscribed_playlists_.contains(playlist_id)) {
|
||||||
PlaylistType playlist_type = UserPlaylist;
|
playlist_info = subscribed_playlists_[playlist_id];
|
||||||
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) {
|
|
||||||
item_already_exists = true;
|
|
||||||
item->removeRows(0, item->rowCount());
|
|
||||||
} else {
|
|
||||||
item = CreatePlaylistItem(playlist_info.name_, playlist_info.id_);
|
|
||||||
}
|
}
|
||||||
|
playlist_info.item_->removeRows(0, playlist_info.item_->rowCount());
|
||||||
|
|
||||||
QVariantMap result = ExtractResult(reply);
|
QVariantMap result = ExtractResult(reply);
|
||||||
SongList songs = ExtractSongs(result);
|
SongList songs = ExtractSongs(result);
|
||||||
|
@ -665,21 +661,11 @@ void GroovesharkService::PlaylistSongsRetrieved() {
|
||||||
child->setData(playlist_info.id_, Role_UserPlaylistId);
|
child->setData(playlist_info.id_, Role_UserPlaylistId);
|
||||||
child->setData(true, InternetModel::Role_CanBeModified);
|
child->setData(true, InternetModel::Role_CanBeModified);
|
||||||
|
|
||||||
item->appendRow(child);
|
playlist_info.item_->appendRow(child);
|
||||||
}
|
|
||||||
if (!item_already_exists) {
|
|
||||||
// Insert this new item just below the favorites list
|
|
||||||
root_->insertRow(favorites_->row() + 1, item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Keep in mind this playlist
|
// Keep in mind this playlist
|
||||||
playlist_info.songs_ids_ = ExtractSongsIds(result);
|
playlist_info.songs_ids_ = ExtractSongsIds(result);
|
||||||
playlist_info.item_ = item;
|
|
||||||
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()) {
|
if (pending_retrieve_playlists_.isEmpty()) {
|
||||||
model()->task_manager()->SetTaskFinished(task_playlists_id_);
|
model()->task_manager()->SetTaskFinished(task_playlists_id_);
|
||||||
|
@ -805,7 +791,7 @@ void GroovesharkService::SubscribedPlaylistsRetrieved(QNetworkReply* reply) {
|
||||||
root_->insertRow(subscribed_playlists_divider_->row() + 1, playlist_item);
|
root_->insertRow(subscribed_playlists_divider_->row() + 1, playlist_item);
|
||||||
|
|
||||||
// Request playlist's songs
|
// Request playlist's songs
|
||||||
RefreshPlaylist(playlist_id, playlist_name);
|
RefreshPlaylist(playlist_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1089,6 +1075,10 @@ void GroovesharkService::AddCurrentSongToPlaylist(QAction* action) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void GroovesharkService::SetPlaylistSongs(int playlist_id, const QList<int>& songs_ids) {
|
void GroovesharkService::SetPlaylistSongs(int playlist_id, const QList<int>& songs_ids) {
|
||||||
|
// If we are still retrieving playlists songs, don't update playlist: don't
|
||||||
|
// take the risk to erase all (not yet retrieved) playlist's songs.
|
||||||
|
if (!pending_retrieve_playlists_.isEmpty())
|
||||||
|
return;
|
||||||
int task_id =
|
int task_id =
|
||||||
model()->task_manager()->StartTask(tr("Update Grooveshark playlist"));
|
model()->task_manager()->StartTask(tr("Update Grooveshark playlist"));
|
||||||
|
|
||||||
|
@ -1120,17 +1110,17 @@ void GroovesharkService::PlaylistSongsSet(QNetworkReply* reply, int playlist_id,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RefreshPlaylist(playlist_id, playlists_[playlist_id].name_);
|
RefreshPlaylist(playlist_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GroovesharkService::RefreshPlaylist(int playlist_id, const QString& playlist_name) {
|
void GroovesharkService::RefreshPlaylist(int playlist_id) {
|
||||||
QList<Param> parameters;
|
QList<Param> parameters;
|
||||||
parameters << Param("playlistID", playlist_id);
|
parameters << Param("playlistID", playlist_id);
|
||||||
QNetworkReply* reply = CreateRequest("getPlaylistSongs", parameters);
|
QNetworkReply* reply = CreateRequest("getPlaylistSongs", parameters);
|
||||||
connect(reply, SIGNAL(finished()), SLOT(PlaylistSongsRetrieved()));
|
connect(reply, SIGNAL(finished()), SLOT(PlaylistSongsRetrieved()));
|
||||||
|
|
||||||
// Keep in mind correspondance between reply object and playlist
|
// Keep in mind correspondance between reply object and playlist
|
||||||
pending_retrieve_playlists_.insert(reply, PlaylistInfo(playlist_id, playlist_name));
|
pending_retrieve_playlists_.insert(reply, playlist_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GroovesharkService::CreateNewPlaylist() {
|
void GroovesharkService::CreateNewPlaylist() {
|
||||||
|
@ -1160,7 +1150,7 @@ void GroovesharkService::NewPlaylistCreated(QNetworkReply* reply, const QString&
|
||||||
|
|
||||||
int playlist_id = result["playlistID"].toInt();
|
int playlist_id = result["playlistID"].toInt();
|
||||||
QStandardItem* new_playlist_item = CreatePlaylistItem(name, playlist_id);
|
QStandardItem* new_playlist_item = CreatePlaylistItem(name, playlist_id);
|
||||||
PlaylistInfo playlist_info(playlist_id, name);
|
PlaylistInfo playlist_info(playlist_id, name, new_playlist_item);
|
||||||
playlist_info.item_ = new_playlist_item;
|
playlist_info.item_ = new_playlist_item;
|
||||||
// Insert the newly created playlist just above the subscribed playlists
|
// Insert the newly created playlist just above the subscribed playlists
|
||||||
root_->insertRow(subscribed_playlists_divider_->row(), new_playlist_item);
|
root_->insertRow(subscribed_playlists_divider_->row(), new_playlist_item);
|
||||||
|
|
|
@ -88,7 +88,7 @@ class GroovesharkService : public InternetService {
|
||||||
void SetPlaylistSongs(int playlist_id, const QList<int>& songs_ids);
|
void SetPlaylistSongs(int playlist_id, const QList<int>& songs_ids);
|
||||||
void RemoveFromPlaylist(int playlist_id, int song_id);
|
void RemoveFromPlaylist(int playlist_id, int song_id);
|
||||||
// Refresh playlist_id playlist , or create it if it doesn't exist
|
// Refresh playlist_id playlist , or create it if it doesn't exist
|
||||||
void RefreshPlaylist(int playlist_id, const QString& playlist_name);
|
void RefreshPlaylist(int playlist_id);
|
||||||
void DeletePlaylist(int playlist_id);
|
void DeletePlaylist(int playlist_id);
|
||||||
void RenamePlaylist(int playlist_id);
|
void RenamePlaylist(int playlist_id);
|
||||||
void AddUserFavoriteSong(int song_id);
|
void AddUserFavoriteSong(int song_id);
|
||||||
|
@ -129,7 +129,7 @@ class GroovesharkService : public InternetService {
|
||||||
|
|
||||||
struct PlaylistInfo {
|
struct PlaylistInfo {
|
||||||
PlaylistInfo() {}
|
PlaylistInfo() {}
|
||||||
PlaylistInfo(int id, QString name, QStandardItem* item = NULL)
|
PlaylistInfo(int id, QString name, QStandardItem* item)
|
||||||
: id_(id), name_(name), item_(item) {}
|
: id_(id), name_(name), item_(item) {}
|
||||||
|
|
||||||
int id_;
|
int id_;
|
||||||
|
@ -221,7 +221,7 @@ class GroovesharkService : public InternetService {
|
||||||
int next_pending_search_id_;
|
int next_pending_search_id_;
|
||||||
QMap<QNetworkReply*, int> pending_searches_;
|
QMap<QNetworkReply*, int> pending_searches_;
|
||||||
|
|
||||||
QMap<QNetworkReply*, PlaylistInfo> pending_retrieve_playlists_;
|
QMap<QNetworkReply*, int> pending_retrieve_playlists_;
|
||||||
|
|
||||||
QMap<int, PlaylistInfo> playlists_;
|
QMap<int, PlaylistInfo> playlists_;
|
||||||
QMap<int, PlaylistInfo> subscribed_playlists_;
|
QMap<int, PlaylistInfo> subscribed_playlists_;
|
||||||
|
|
Loading…
Reference in New Issue