mirror of
https://github.com/clementine-player/Clementine
synced 2024-12-17 12:02:48 +01:00
Make Grooveshark playlists drag'n'drop possible
This commit is contained in:
parent
b3b890b9cf
commit
03e30d19c4
@ -402,6 +402,7 @@ void GroovesharkService::ResetSessionId() {
|
|||||||
void GroovesharkService::ShowContextMenu(const QModelIndex& index, const QPoint& global_pos) {
|
void GroovesharkService::ShowContextMenu(const QModelIndex& index, const QPoint& global_pos) {
|
||||||
EnsureMenuCreated();
|
EnsureMenuCreated();
|
||||||
context_menu_->popup(global_pos);
|
context_menu_->popup(global_pos);
|
||||||
|
context_item_ = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
QModelIndex GroovesharkService::GetCurrentIndex() {
|
QModelIndex GroovesharkService::GetCurrentIndex() {
|
||||||
@ -423,8 +424,7 @@ void GroovesharkService::EnsureMenuCreated() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GroovesharkService::EnsureItemsCreated() {
|
void GroovesharkService::EnsureItemsCreated() {
|
||||||
if (!session_id_.isEmpty() /* only if user is authenticated */ &&
|
if (IsLoggedIn() && !search_) {
|
||||||
!search_) {
|
|
||||||
search_ = new QStandardItem(IconLoader::Load("edit-find"),
|
search_ = new QStandardItem(IconLoader::Load("edit-find"),
|
||||||
tr("Search Grooveshark (opens a new tab)"));
|
tr("Search Grooveshark (opens a new tab)"));
|
||||||
search_->setData(Type_SearchResults, InternetModel::Role_Type);
|
search_->setData(Type_SearchResults, InternetModel::Role_Type);
|
||||||
@ -490,6 +490,7 @@ void GroovesharkService::PlaylistSongsRetrieved() {
|
|||||||
QStandardItem* item = new QStandardItem(playlist_info.name_);
|
QStandardItem* item = new QStandardItem(playlist_info.name_);
|
||||||
item->setData(Type_UserPlaylist, InternetModel::Role_Type);
|
item->setData(Type_UserPlaylist, InternetModel::Role_Type);
|
||||||
item->setData(true, InternetModel::Role_CanLazyLoad);
|
item->setData(true, InternetModel::Role_CanLazyLoad);
|
||||||
|
item->setData(InternetModel::PlayBehaviour_SingleItem, InternetModel::Role_PlayBehaviour);
|
||||||
|
|
||||||
QVariantMap result = ExtractResult(reply);
|
QVariantMap result = ExtractResult(reply);
|
||||||
SongList songs = ExtractSongs(result);
|
SongList songs = ExtractSongs(result);
|
||||||
|
@ -199,6 +199,7 @@ QMimeData* InternetModel::mimeData(const QModelIndexList& indexes) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QList<QUrl> urls;
|
QList<QUrl> urls;
|
||||||
|
QModelIndexList new_indexes;
|
||||||
|
|
||||||
QModelIndex last_valid_index;
|
QModelIndex last_valid_index;
|
||||||
foreach (const QModelIndex& index, indexes) {
|
foreach (const QModelIndex& index, indexes) {
|
||||||
@ -206,7 +207,21 @@ QMimeData* InternetModel::mimeData(const QModelIndexList& indexes) const {
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
last_valid_index = index;
|
last_valid_index = index;
|
||||||
urls << index.data(Role_Url).toUrl();
|
QUrl url = index.data(Role_Url).toUrl();
|
||||||
|
if (url.isEmpty()) {
|
||||||
|
// If this particular item has nothing, check if its children have something
|
||||||
|
int row = 0;
|
||||||
|
int column = 0;
|
||||||
|
QModelIndex child = index.child(row, column);
|
||||||
|
while (child.isValid()) {
|
||||||
|
new_indexes << child;
|
||||||
|
urls << child.data(Role_Url).toUrl();
|
||||||
|
child = index.child(++row, column);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
new_indexes = indexes;
|
||||||
|
urls << url;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (urls.isEmpty())
|
if (urls.isEmpty())
|
||||||
@ -214,7 +229,7 @@ QMimeData* InternetModel::mimeData(const QModelIndexList& indexes) const {
|
|||||||
|
|
||||||
InternetMimeData* data = new InternetMimeData(this);
|
InternetMimeData* data = new InternetMimeData(this);
|
||||||
data->setUrls(urls);
|
data->setUrls(urls);
|
||||||
data->indexes = indexes;
|
data->indexes = new_indexes;
|
||||||
data->name_for_new_playlist_ = InternetModel::ServiceForIndex(last_valid_index)->name();
|
data->name_for_new_playlist_ = InternetModel::ServiceForIndex(last_valid_index)->name();
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
|
Loading…
Reference in New Issue
Block a user