1
0
mirror of https://github.com/clementine-player/Clementine synced 2024-12-16 19:31:02 +01:00

Add Spotify tracks to Spotify playlists by drag and drop

This commit is contained in:
Arnaud Bienner 2014-12-03 23:58:09 +01:00
parent f7924905d2
commit f34f868c0f
3 changed files with 17 additions and 12 deletions

View File

@ -300,7 +300,8 @@ bool InternetModel::dropMimeData(const QMimeData* data, Qt::DropAction action,
if (action == Qt::IgnoreAction) {
return false;
}
if (parent.data(Role_CanBeModified).toBool()) {
if (parent.data(Role_CanBeModified).toBool() ||
parent.parent().data(Role_CanBeModified).toBool()) {
InternetModel::ServiceForIndex(parent)->DropMimeData(data, parent);
}

View File

@ -427,7 +427,7 @@ void SpotifyService::PlaylistsUpdated(const pb::spotify::Playlists& response) {
item->setData(InternetModel::Type_UserPlaylist, InternetModel::Role_Type);
item->setData(true, InternetModel::Role_CanLazyLoad);
item->setData(msg.index(), Role_UserPlaylistIndex);
item->setData(msg.is_mine(), Role_UserPlaylistIsMine);
item->setData(msg.is_mine(), InternetModel::Role_CanBeModified);
item->setData(InternetModel::PlayBehaviour_MultipleItems,
InternetModel::Role_PlayBehaviour);
@ -568,7 +568,7 @@ QList<QAction*> SpotifyService::playlistitem_actions(const Song& song) {
tr("Add to Spotify playlists"), this);
QMenu* playlists_menu = new QMenu();
for (const QStandardItem* playlist_item : playlists_) {
if (!playlist_item->data(Role_UserPlaylistIsMine).toBool()) {
if (!playlist_item->data(InternetModel::Role_CanBeModified).toBool()) {
continue;
}
QAction* add_to_playlist = new QAction(playlist_item->text(), this);
@ -744,7 +744,7 @@ void SpotifyService::ShowContextMenu(const QPoint& global_pos) {
// Is this track contained in a playlist we can modify?
bool is_playlist_modifiable =
item->parent() &&
item->parent()->data(Role_UserPlaylistIsMine).toBool();
item->parent()->data(InternetModel::Role_CanBeModified).toBool();
remove_from_playlist_->setVisible(is_playlist_modifiable);
song_context_menu_->popup(global_pos);
@ -759,7 +759,15 @@ void SpotifyService::ItemDoubleClicked(QStandardItem* item) {}
void SpotifyService::DropMimeData(const QMimeData* data,
const QModelIndex& index) {
qLog(Debug) << Q_FUNC_INFO << data->urls();
QVariant q_playlist_index = index.data(Role_UserPlaylistIndex);
if (!q_playlist_index.isValid()) {
// In case song was dropped on a playlist item, not on the playlist title/root element
q_playlist_index = index.parent().data(Role_UserPlaylistIndex);
}
if (!q_playlist_index.isValid())
return;
AddSongsToPlaylist(q_playlist_index.toInt(), data->urls());
}
void SpotifyService::LoadImage(const QString& id) {

View File

@ -28,11 +28,7 @@ class SpotifyService : public InternetService {
Type_Toplist,
};
enum Role {
Role_UserPlaylistIndex = InternetModel::RoleCount,
Role_UserPlaylistIsMine, // Is this playlist owned by the user currently
// logged-in?
};
enum Role { Role_UserPlaylistIndex = InternetModel::RoleCount, };
// Values are persisted - don't change.
enum LoginState {
@ -57,8 +53,8 @@ class SpotifyService : public InternetService {
void ItemDoubleClicked(QStandardItem* item) override;
void DropMimeData(const QMimeData* data, const QModelIndex& index) override;
QList<QAction*> playlistitem_actions(const Song& song) override;
PlaylistItem::Options playlistitem_options() const;
QWidget* HeaderWidget() const;
PlaylistItem::Options playlistitem_options() const override;
QWidget* HeaderWidget() const override;
void Logout();
void Login(const QString& username, const QString& password);