diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index 9334317ed..bafbe45d8 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -68,6 +68,7 @@ #include #include #include +#include #include "core/logging.h" #include "core/closure.h" @@ -646,6 +647,7 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co playlist_open_in_browser_ = playlist_menu_->addAction(IconLoader::Load("document-open-folder"), tr("Show in file browser..."), this, SLOT(PlaylistOpenInBrowser())); playlist_open_in_browser_->setVisible(false); playlist_show_in_collection_ = playlist_menu_->addAction(IconLoader::Load("edit-find"), tr("Show in collection..."), this, SLOT(ShowInCollection())); + playlist_copy_url_ = playlist_menu_->addAction(IconLoader::Load("edit-copy"), tr("Copy URL(s)..."), this, SLOT(PlaylistCopyUrl())); playlist_menu_->addSeparator(); playlistitem_actions_separator_ = playlist_menu_->addSeparator(); playlist_menu_->addAction(ui_->action_clear_playlist); @@ -1705,6 +1707,8 @@ void MainWindow::PlaylistRightClick(const QPoint &global_pos, const QModelIndex #endif playlist_organize_->setVisible(false); + playlist_copy_url_->setVisible(selected > 0); + if (selected < 1) { playlist_queue_->setVisible(false); playlist_queue_play_next_->setVisible(false); @@ -2373,6 +2377,25 @@ void MainWindow::PlaylistOpenInBrowser() { } +void MainWindow::PlaylistCopyUrl() { + + QList urls; + for (const QModelIndex &proxy_index : ui_->playlist->view()->selectionModel()->selectedRows()) { + const QModelIndex source_index = app_->playlist_manager()->current()->proxy()->mapToSource(proxy_index); + if (!source_index.isValid()) continue; + PlaylistItemPtr item = app_->playlist_manager()->current()->item_at(source_index.row()); + if (!item) continue; + urls << item->StreamUrl(); + } + + if (urls.count() > 0) { + QMimeData *mime_data = new QMimeData; + mime_data->setUrls(urls); + QApplication::clipboard()->setMimeData(mime_data); + } + +} + void MainWindow::PlaylistQueue() { QModelIndexList indexes; diff --git a/src/core/mainwindow.h b/src/core/mainwindow.h index 7f3164152..b2f48d80f 100644 --- a/src/core/mainwindow.h +++ b/src/core/mainwindow.h @@ -170,6 +170,7 @@ class MainWindow : public QMainWindow, public PlatformInterface { void PlaylistCopyToDevice(); void PlaylistOrganizeSelected(const bool copy); void PlaylistOpenInBrowser(); + void PlaylistCopyUrl(); void ShowInCollection(); void ChangeCollectionQueryMode(QAction *action); @@ -338,6 +339,7 @@ class MainWindow : public QMainWindow, public PlatformInterface { QAction *playlist_copy_to_device_; #endif QAction *playlist_open_in_browser_; + QAction *playlist_copy_url_; QAction *playlist_queue_; QAction* playlist_queue_play_next_; QAction *playlist_skip_;