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/stylesheetloader.h"
|
||||||
#include "core/taskmanager.h"
|
#include "core/taskmanager.h"
|
||||||
#include "devices/devicemanager.h"
|
#include "devices/devicemanager.h"
|
||||||
|
#include "devices/devicestatefiltermodel.h"
|
||||||
#include "engines/enginebase.h"
|
#include "engines/enginebase.h"
|
||||||
#include "library/groupbydialog.h"
|
#include "library/groupbydialog.h"
|
||||||
#include "library/libraryconfig.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_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_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_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_delete_ = playlist_menu_->addAction(IconLoader::Load("edit-delete"), tr("Delete files..."), this, SLOT(PlaylistDelete()));
|
||||||
playlist_menu_->addSeparator();
|
playlist_menu_->addSeparator();
|
||||||
playlist_menu_->addAction(ui_->action_clear_playlist);
|
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*)),
|
connect(ui_->playlist, SIGNAL(UndoRedoActionsChanged(QAction*,QAction*)),
|
||||||
SLOT(PlaylistUndoRedoChanged(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
|
// Radio connections
|
||||||
connect(radio_model_, SIGNAL(StreamError(QString)), error_dialog_.get(), SLOT(ShowMessage(QString)));
|
connect(radio_model_, SIGNAL(StreamError(QString)), error_dialog_.get(), SLOT(ShowMessage(QString)));
|
||||||
connect(radio_model_, SIGNAL(AsyncLoadFinished(PlaylistItem::SpecialLoadResult)), player_, SLOT(HandleSpecialLoad(PlaylistItem::SpecialLoadResult)));
|
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) {
|
void MainWindow::CopyFilesToLibrary(const QList<QUrl> &urls) {
|
||||||
|
organise_dialog_->SetDestinationModel(library_->model()->directory_model());
|
||||||
organise_dialog_->SetUrls(urls);
|
organise_dialog_->SetUrls(urls);
|
||||||
organise_dialog_->SetCopy(true);
|
organise_dialog_->SetCopy(true);
|
||||||
organise_dialog_->show();
|
organise_dialog_->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::MoveFilesToLibrary(const QList<QUrl> &urls) {
|
void MainWindow::MoveFilesToLibrary(const QList<QUrl> &urls) {
|
||||||
|
organise_dialog_->SetDestinationModel(library_->model()->directory_model());
|
||||||
organise_dialog_->SetUrls(urls);
|
organise_dialog_->SetUrls(urls);
|
||||||
organise_dialog_->SetCopy(false);
|
organise_dialog_->SetCopy(false);
|
||||||
organise_dialog_->show();
|
organise_dialog_->show();
|
||||||
@ -1360,20 +1368,17 @@ void MainWindow::PlaylistMoveToLibrary() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::PlaylistOrganiseSelected(bool copy) {
|
void MainWindow::PlaylistOrganiseSelected(bool copy) {
|
||||||
QModelIndexList indexes = playlists_->current()->proxy()->mapSelectionToSource(
|
QModelIndexList proxy_indexes = ui_->playlist->view()->selectionModel()->selectedRows();
|
||||||
ui_->playlist->view()->selectionModel()->selection()).indexes();
|
SongList songs;
|
||||||
QList<QUrl> urls;
|
|
||||||
|
|
||||||
int last_row = -1;
|
foreach (const QModelIndex& proxy_index, proxy_indexes) {
|
||||||
foreach (const QModelIndex& index, indexes) {
|
QModelIndex index = playlists_->current()->proxy()->mapToSource(proxy_index);
|
||||||
if (last_row == index.row())
|
|
||||||
continue;
|
|
||||||
last_row = index.row();
|
|
||||||
|
|
||||||
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_->SetCopy(copy);
|
||||||
organise_dialog_->show();
|
organise_dialog_->show();
|
||||||
}
|
}
|
||||||
@ -1391,3 +1396,19 @@ void MainWindow::PlaylistQueue() {
|
|||||||
|
|
||||||
playlists_->current()->queue()->ToggleTracks(indexes);
|
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 PlaylistCopyToLibrary();
|
||||||
void PlaylistMoveToLibrary();
|
void PlaylistMoveToLibrary();
|
||||||
|
void PlaylistCopyToDevice();
|
||||||
void PlaylistOrganiseSelected(bool copy);
|
void PlaylistOrganiseSelected(bool copy);
|
||||||
void PlaylistDelete();
|
void PlaylistDelete();
|
||||||
|
|
||||||
@ -216,6 +217,7 @@ class MainWindow : public QMainWindow, public PlatformInterface {
|
|||||||
QAction* playlist_organise_;
|
QAction* playlist_organise_;
|
||||||
QAction* playlist_copy_to_library_;
|
QAction* playlist_copy_to_library_;
|
||||||
QAction* playlist_move_to_library_;
|
QAction* playlist_move_to_library_;
|
||||||
|
QAction* playlist_copy_to_device_;
|
||||||
QAction* playlist_delete_;
|
QAction* playlist_delete_;
|
||||||
QAction* playlist_queue_;
|
QAction* playlist_queue_;
|
||||||
QModelIndex playlist_menu_index_;
|
QModelIndex playlist_menu_index_;
|
||||||
|
@ -98,6 +98,25 @@ void OrganiseDialog::SetDestinationModel(QAbstractItemModel *model, bool devices
|
|||||||
ui_->eject_after->setVisible(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) {
|
void OrganiseDialog::SetUrls(const QList<QUrl> &urls, quint64 total_size) {
|
||||||
QStringList filenames;
|
QStringList filenames;
|
||||||
|
|
||||||
@ -189,7 +208,7 @@ void OrganiseDialog::UpdatePreviews() {
|
|||||||
const bool format_valid = format_.IsValid();
|
const bool format_valid = format_.IsValid();
|
||||||
|
|
||||||
// Are we gonna enable the ok button?
|
// 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)
|
if (capacity != 0 && total_size_ > free)
|
||||||
ok = false;
|
ok = false;
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ public:
|
|||||||
|
|
||||||
void SetDestinationModel(QAbstractItemModel* model, bool devices = false);
|
void SetDestinationModel(QAbstractItemModel* model, bool devices = false);
|
||||||
|
|
||||||
|
void SetSongs(const SongList& songs);
|
||||||
void SetUrls(const QList<QUrl>& urls, quint64 total_size = 0);
|
void SetUrls(const QList<QUrl>& urls, quint64 total_size = 0);
|
||||||
void SetFilenames(const QStringList& filenames, quint64 total_size = 0);
|
void SetFilenames(const QStringList& filenames, quint64 total_size = 0);
|
||||||
void SetCopy(bool copy);
|
void SetCopy(bool copy);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user