Add Copy to device... to the playlist context menu
This commit is contained in:
parent
d81db5f255
commit
68d7156071
@ -27,6 +27,7 @@
|
||||
#include "core/stylesheetloader.h"
|
||||
#include "core/taskmanager.h"
|
||||
#include "devices/devicemanager.h"
|
||||
#include "devices/devicestatefiltermodel.h"
|
||||
#include "engines/enginebase.h"
|
||||
#include "library/groupbydialog.h"
|
||||
#include "library/libraryconfig.h"
|
||||
@ -398,6 +399,7 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
|
||||
playlist_copy_to_library_ = playlist_menu_->addAction(IconLoader::Load("edit-copy"), tr("Copy to library..."), this, SLOT(PlaylistCopyToLibrary()));
|
||||
playlist_move_to_library_ = playlist_menu_->addAction(IconLoader::Load("go-jump"), tr("Move to library..."), this, SLOT(PlaylistMoveToLibrary()));
|
||||
playlist_organise_ = playlist_menu_->addAction(IconLoader::Load("edit-copy"), tr("Organise files..."), this, SLOT(PlaylistMoveToLibrary()));
|
||||
playlist_copy_to_device_ = playlist_menu_->addAction(IconLoader::Load("multimedia-player-ipod-mini-blue"), tr("Copy to device..."), this, SLOT(PlaylistCopyToDevice()));
|
||||
playlist_delete_ = playlist_menu_->addAction(IconLoader::Load("edit-delete"), tr("Delete files..."), this, SLOT(PlaylistDelete()));
|
||||
playlist_menu_->addSeparator();
|
||||
playlist_menu_->addAction(ui_->action_clear_playlist);
|
||||
@ -412,6 +414,10 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
|
||||
connect(ui_->playlist, SIGNAL(UndoRedoActionsChanged(QAction*,QAction*)),
|
||||
SLOT(PlaylistUndoRedoChanged(QAction*,QAction*)));
|
||||
|
||||
playlist_copy_to_device_->setDisabled(devices_->connected_devices_model()->rowCount() == 0);
|
||||
connect(devices_->connected_devices_model(), SIGNAL(IsEmptyChanged(bool)),
|
||||
playlist_copy_to_device_, SLOT(setDisabled(bool)));
|
||||
|
||||
// Radio connections
|
||||
connect(radio_model_, SIGNAL(StreamError(QString)), error_dialog_.get(), SLOT(ShowMessage(QString)));
|
||||
connect(radio_model_, SIGNAL(AsyncLoadFinished(PlaylistItem::SpecialLoadResult)), player_, SLOT(HandleSpecialLoad(PlaylistItem::SpecialLoadResult)));
|
||||
@ -1340,12 +1346,14 @@ void MainWindow::NowPlayingWidgetPositionChanged(bool above_status_bar) {
|
||||
}
|
||||
|
||||
void MainWindow::CopyFilesToLibrary(const QList<QUrl> &urls) {
|
||||
organise_dialog_->SetDestinationModel(library_->model()->directory_model());
|
||||
organise_dialog_->SetUrls(urls);
|
||||
organise_dialog_->SetCopy(true);
|
||||
organise_dialog_->show();
|
||||
}
|
||||
|
||||
void MainWindow::MoveFilesToLibrary(const QList<QUrl> &urls) {
|
||||
organise_dialog_->SetDestinationModel(library_->model()->directory_model());
|
||||
organise_dialog_->SetUrls(urls);
|
||||
organise_dialog_->SetCopy(false);
|
||||
organise_dialog_->show();
|
||||
@ -1360,20 +1368,17 @@ void MainWindow::PlaylistMoveToLibrary() {
|
||||
}
|
||||
|
||||
void MainWindow::PlaylistOrganiseSelected(bool copy) {
|
||||
QModelIndexList indexes = playlists_->current()->proxy()->mapSelectionToSource(
|
||||
ui_->playlist->view()->selectionModel()->selection()).indexes();
|
||||
QList<QUrl> urls;
|
||||
QModelIndexList proxy_indexes = ui_->playlist->view()->selectionModel()->selectedRows();
|
||||
SongList songs;
|
||||
|
||||
int last_row = -1;
|
||||
foreach (const QModelIndex& index, indexes) {
|
||||
if (last_row == index.row())
|
||||
continue;
|
||||
last_row = index.row();
|
||||
foreach (const QModelIndex& proxy_index, proxy_indexes) {
|
||||
QModelIndex index = playlists_->current()->proxy()->mapToSource(proxy_index);
|
||||
|
||||
urls << playlists_->current()->item_at(index.row())->Url();
|
||||
songs << playlists_->current()->item_at(index.row())->Metadata();
|
||||
}
|
||||
|
||||
organise_dialog_->SetUrls(urls);
|
||||
organise_dialog_->SetDestinationModel(library_->model()->directory_model());
|
||||
organise_dialog_->SetSongs(songs);
|
||||
organise_dialog_->SetCopy(copy);
|
||||
organise_dialog_->show();
|
||||
}
|
||||
@ -1391,3 +1396,19 @@ void MainWindow::PlaylistQueue() {
|
||||
|
||||
playlists_->current()->queue()->ToggleTracks(indexes);
|
||||
}
|
||||
|
||||
void MainWindow::PlaylistCopyToDevice() {
|
||||
QModelIndexList proxy_indexes = ui_->playlist->view()->selectionModel()->selectedRows();
|
||||
SongList songs;
|
||||
|
||||
foreach (const QModelIndex& proxy_index, proxy_indexes) {
|
||||
QModelIndex index = playlists_->current()->proxy()->mapToSource(proxy_index);
|
||||
|
||||
songs << playlists_->current()->item_at(index.row())->Metadata();
|
||||
}
|
||||
|
||||
organise_dialog_->SetDestinationModel(devices_->connected_devices_model(), true);
|
||||
organise_dialog_->SetSongs(songs);
|
||||
organise_dialog_->SetCopy(true);
|
||||
organise_dialog_->show();
|
||||
}
|
||||
|
@ -113,6 +113,7 @@ class MainWindow : public QMainWindow, public PlatformInterface {
|
||||
|
||||
void PlaylistCopyToLibrary();
|
||||
void PlaylistMoveToLibrary();
|
||||
void PlaylistCopyToDevice();
|
||||
void PlaylistOrganiseSelected(bool copy);
|
||||
void PlaylistDelete();
|
||||
|
||||
@ -216,6 +217,7 @@ class MainWindow : public QMainWindow, public PlatformInterface {
|
||||
QAction* playlist_organise_;
|
||||
QAction* playlist_copy_to_library_;
|
||||
QAction* playlist_move_to_library_;
|
||||
QAction* playlist_copy_to_device_;
|
||||
QAction* playlist_delete_;
|
||||
QAction* playlist_queue_;
|
||||
QModelIndex playlist_menu_index_;
|
||||
|
@ -98,6 +98,25 @@ void OrganiseDialog::SetDestinationModel(QAbstractItemModel *model, bool devices
|
||||
ui_->eject_after->setVisible(devices);
|
||||
}
|
||||
|
||||
void OrganiseDialog::SetSongs(const SongList &songs) {
|
||||
quint64 total_size = 0;
|
||||
QStringList filenames;
|
||||
|
||||
foreach (const Song& song, songs) {
|
||||
QUrl url(song.filename());
|
||||
if (url.isEmpty())
|
||||
continue;
|
||||
if (!url.scheme().isEmpty() && url.scheme() != "file")
|
||||
continue;
|
||||
|
||||
if (song.filesize() > 0)
|
||||
total_size += song.filesize();
|
||||
filenames << url.toLocalFile();
|
||||
}
|
||||
|
||||
SetFilenames(filenames, total_size);
|
||||
}
|
||||
|
||||
void OrganiseDialog::SetUrls(const QList<QUrl> &urls, quint64 total_size) {
|
||||
QStringList filenames;
|
||||
|
||||
@ -189,7 +208,7 @@ void OrganiseDialog::UpdatePreviews() {
|
||||
const bool format_valid = format_.IsValid();
|
||||
|
||||
// Are we gonna enable the ok button?
|
||||
bool ok = format_valid && storage;
|
||||
bool ok = format_valid && storage && !filenames_.isEmpty();
|
||||
if (capacity != 0 && total_size_ > free)
|
||||
ok = false;
|
||||
|
||||
|
@ -47,6 +47,7 @@ public:
|
||||
|
||||
void SetDestinationModel(QAbstractItemModel* model, bool devices = false);
|
||||
|
||||
void SetSongs(const SongList& songs);
|
||||
void SetUrls(const QList<QUrl>& urls, quint64 total_size = 0);
|
||||
void SetFilenames(const QStringList& filenames, quint64 total_size = 0);
|
||||
void SetCopy(bool copy);
|
||||
|
Loading…
x
Reference in New Issue
Block a user