From 9f2d610e9d6186dd2abcb2ded66687a6ea1cf1b5 Mon Sep 17 00:00:00 2001 From: David Sansome Date: Mon, 19 Jul 2010 21:16:22 +0000 Subject: [PATCH] Add a menu item for copying songs to devices. Only filesystem devices supported so far --- src/devices/devicemanager.cpp | 9 +++++++++ src/library/libraryview.cpp | 28 +++++++++++++++++++++++----- src/library/libraryview.h | 7 +++++++ src/translations/ar.po | 3 +++ src/translations/cs.po | 3 +++ src/translations/da.po | 3 +++ src/translations/de.po | 3 +++ src/translations/el.po | 3 +++ src/translations/en_CA.po | 3 +++ src/translations/en_GB.po | 3 +++ src/translations/es.po | 3 +++ src/translations/fi.po | 3 +++ src/translations/fr.po | 3 +++ src/translations/gl.po | 3 +++ src/translations/it.po | 3 +++ src/translations/kk.po | 3 +++ src/translations/nb.po | 3 +++ src/translations/oc.po | 3 +++ src/translations/pl.po | 3 +++ src/translations/pt.po | 3 +++ src/translations/pt_BR.po | 3 +++ src/translations/ro.po | 3 +++ src/translations/ru.po | 3 +++ src/translations/sk.po | 3 +++ src/translations/sv.po | 3 +++ src/translations/tr.po | 3 +++ src/translations/translations.pot | 3 +++ src/translations/uk.po | 3 +++ src/translations/zh_CN.po | 3 +++ src/translations/zh_TW.po | 3 +++ src/ui/mainwindow.cpp | 1 + src/ui/organisedialog.cpp | 15 ++++++++------- src/ui/organisedialog.ui | 8 +++++--- 33 files changed, 134 insertions(+), 15 deletions(-) diff --git a/src/devices/devicemanager.cpp b/src/devices/devicemanager.cpp index c220860b5..84cf2e609 100644 --- a/src/devices/devicemanager.cpp +++ b/src/devices/devicemanager.cpp @@ -21,6 +21,7 @@ #include "filesystemdevice.h" #include "giolister.h" #include "gpoddevice.h" +#include "core/musicstorage.h" #include "core/taskmanager.h" #include "core/utilities.h" #include "ui/iconloader.h" @@ -38,6 +39,7 @@ DeviceStateFilterModel::DeviceStateFilterModel(QObject *parent, : QSortFilterProxyModel(parent), state_(state) { + setDynamicSortFilter(true); } bool DeviceStateFilterModel::filterAcceptsRow(int row, const QModelIndex&) const { @@ -235,6 +237,11 @@ QVariant DeviceManager::data(const QModelIndex& index, int role) const { return QVariant(); return info.task_percentage_; + case MusicStorage::kStorageRole: + if (info.device_) + return QVariant::fromValue(info.device_->storage()); + return QVariant(); + default: return QVariant(); } @@ -428,6 +435,7 @@ boost::shared_ptr DeviceManager::Connect(int row) { qWarning() << "Could not create device for" << url.toString(); } else { info.device_ = ret; + emit dataChanged(index(row), index(row)); connect(info.device_.get(), SIGNAL(TaskStarted(int)), SLOT(DeviceTaskStarted(int))); connect(info.device_.get(), SIGNAL(Error(QString)), SIGNAL(Error(QString))); } @@ -453,6 +461,7 @@ void DeviceManager::Disconnect(int row) { return; info.device_.reset(); + emit dataChanged(index(row), index(row)); emit DeviceDisconnected(row); } diff --git a/src/library/libraryview.cpp b/src/library/libraryview.cpp index d94042991..bf08f2471 100644 --- a/src/library/libraryview.cpp +++ b/src/library/libraryview.cpp @@ -19,6 +19,7 @@ #include "libraryview.h" #include "libraryitem.h" #include "librarybackend.h" +#include "devices/devicemanager.h" #include "ui/iconloader.h" #include "ui/organisedialog.h" @@ -93,6 +94,8 @@ LibraryView::LibraryView(QWidget* parent) context_menu_->addSeparator(); organise_ = context_menu_->addAction(IconLoader::Load("edit-copy"), tr("Organise files..."), this, SLOT(Organise())); + copy_to_device_ = context_menu_->addAction(IconLoader::Load("multimedia-player-ipod-mini-blue"), + tr("Copy to device..."), this, SLOT(CopyToDevice())); delete_ = context_menu_->addAction(IconLoader::Load("edit-delete"), tr("Delete from disk..."), this, SLOT(Delete())); context_menu_->addSeparator(); @@ -118,13 +121,16 @@ void LibraryView::ReloadSettings() { void LibraryView::SetTaskManager(TaskManager *task_manager) { organise_dialog_.reset(new OrganiseDialog(task_manager)); - organise_dialog_->SetDestinationModel(library_->directory_model()); } void LibraryView::SetLibrary(LibraryModel *library) { library_ = library; } +void LibraryView::SetDeviceManager(DeviceManager *device_manager) { + devices_ = device_manager; +} + void LibraryView::TotalSongCountUpdated(int count) { bool old = total_song_count_; total_song_count_ = count; @@ -240,22 +246,34 @@ void LibraryView::scrollTo(const QModelIndex &index, ScrollHint hint) { QTreeView::scrollTo(index, hint); } -void LibraryView::Organise() { +QStringList LibraryView::GetSelectedFilenames() const { QModelIndexList selected_indexes = qobject_cast(model())->mapSelectionToSource( selectionModel()->selection()).indexes(); SongList songs = library_->GetChildSongs(selected_indexes); - QStringList filenames; + QStringList ret; foreach (const Song& song, songs) { - filenames << song.filename(); + ret << song.filename(); } + return ret; +} + +void LibraryView::Organise() { + organise_dialog_->SetDestinationModel(library_->directory_model()); organise_dialog_->SetCopy(false); - organise_dialog_->SetFilenames(filenames); + organise_dialog_->SetFilenames(GetSelectedFilenames()); organise_dialog_->show(); } void LibraryView::Delete() { } + +void LibraryView::CopyToDevice() { + organise_dialog_->SetDestinationModel(devices_->connected_devices_model()); + organise_dialog_->SetCopy(true); + organise_dialog_->SetFilenames(GetSelectedFilenames()); + organise_dialog_->show(); +} diff --git a/src/library/libraryview.h b/src/library/libraryview.h index 7b678e446..5be9b73bc 100644 --- a/src/library/libraryview.h +++ b/src/library/libraryview.h @@ -23,6 +23,7 @@ #include +class DeviceManager; class LibraryModel; class OrganiseDialog; class TaskManager; @@ -44,6 +45,7 @@ class LibraryView : public AutoExpandingTreeView { void SetTaskManager(TaskManager* task_manager); void SetLibrary(LibraryModel* library); + void SetDeviceManager(DeviceManager* device_manager); // QTreeView void keyboardSearch(const QString &search); @@ -68,6 +70,7 @@ class LibraryView : public AutoExpandingTreeView { void Load(); void AddToPlaylist(); void Organise(); + void CopyToDevice(); void Delete(); void ShowInVarious(); void NoShowInVarious(); @@ -75,9 +78,12 @@ class LibraryView : public AutoExpandingTreeView { private: void RecheckIsEmpty(); void ShowInVarious(bool on); + QStringList GetSelectedFilenames() const; private: LibraryModel* library_; + DeviceManager* devices_; + int total_song_count_; QPixmap nomusic_; @@ -87,6 +93,7 @@ class LibraryView : public AutoExpandingTreeView { QAction* load_; QAction* add_to_playlist_; QAction* organise_; + QAction* copy_to_device_; QAction* delete_; QAction* show_in_various_; QAction* no_show_in_various_; diff --git a/src/translations/ar.po b/src/translations/ar.po index 2fd5c6c75..f9de855a3 100644 --- a/src/translations/ar.po +++ b/src/translations/ar.po @@ -375,6 +375,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "" diff --git a/src/translations/cs.po b/src/translations/cs.po index 0495f57aa..afba00e95 100644 --- a/src/translations/cs.po +++ b/src/translations/cs.po @@ -376,6 +376,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Zkopírovat do knihovny..." diff --git a/src/translations/da.po b/src/translations/da.po index d94a4dece..52d199499 100644 --- a/src/translations/da.po +++ b/src/translations/da.po @@ -376,6 +376,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Kopiér til bibliotek..." diff --git a/src/translations/de.po b/src/translations/de.po index 29b3942c4..1492d7a65 100644 --- a/src/translations/de.po +++ b/src/translations/de.po @@ -375,6 +375,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "In die Musiksammlung kopieren..." diff --git a/src/translations/el.po b/src/translations/el.po index af28d97fd..1fdca1839 100644 --- a/src/translations/el.po +++ b/src/translations/el.po @@ -383,6 +383,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Αντιγραφή στην βιβλιοθήκη..." diff --git a/src/translations/en_CA.po b/src/translations/en_CA.po index 8bf024cfd..00e3a2a86 100644 --- a/src/translations/en_CA.po +++ b/src/translations/en_CA.po @@ -375,6 +375,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Copy to library..." diff --git a/src/translations/en_GB.po b/src/translations/en_GB.po index 73f82ab48..ff59cde46 100644 --- a/src/translations/en_GB.po +++ b/src/translations/en_GB.po @@ -375,6 +375,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Copy to library..." diff --git a/src/translations/es.po b/src/translations/es.po index 5a9eb667f..b58b2afa7 100644 --- a/src/translations/es.po +++ b/src/translations/es.po @@ -377,6 +377,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Copiar a la colección..." diff --git a/src/translations/fi.po b/src/translations/fi.po index ee765cb2f..fb1008944 100644 --- a/src/translations/fi.po +++ b/src/translations/fi.po @@ -375,6 +375,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Kopioi kirjastoon" diff --git a/src/translations/fr.po b/src/translations/fr.po index 37afff545..1fa393371 100644 --- a/src/translations/fr.po +++ b/src/translations/fr.po @@ -376,6 +376,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Copier dans la bilbiothèque..." diff --git a/src/translations/gl.po b/src/translations/gl.po index 4dc3a2914..b031fc13e 100644 --- a/src/translations/gl.po +++ b/src/translations/gl.po @@ -375,6 +375,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Copiar para a biblioteca" diff --git a/src/translations/it.po b/src/translations/it.po index 6463833c9..ba71563cf 100644 --- a/src/translations/it.po +++ b/src/translations/it.po @@ -376,6 +376,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Copia nella raccolta..." diff --git a/src/translations/kk.po b/src/translations/kk.po index 1dbf8422e..ee3ef9194 100644 --- a/src/translations/kk.po +++ b/src/translations/kk.po @@ -375,6 +375,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "" diff --git a/src/translations/nb.po b/src/translations/nb.po index ed6610281..2e0ec6de9 100644 --- a/src/translations/nb.po +++ b/src/translations/nb.po @@ -375,6 +375,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Kopier til bibliotek..." diff --git a/src/translations/oc.po b/src/translations/oc.po index 3a75b6cb2..305585248 100644 --- a/src/translations/oc.po +++ b/src/translations/oc.po @@ -375,6 +375,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "" diff --git a/src/translations/pl.po b/src/translations/pl.po index f72f36206..f39c7f407 100644 --- a/src/translations/pl.po +++ b/src/translations/pl.po @@ -376,6 +376,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Skopiuj do biblioteki..." diff --git a/src/translations/pt.po b/src/translations/pt.po index 89c924309..2095e9938 100644 --- a/src/translations/pt.po +++ b/src/translations/pt.po @@ -380,6 +380,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Copiar para a biblioteca..." diff --git a/src/translations/pt_BR.po b/src/translations/pt_BR.po index 4d993c928..bf23f0e39 100644 --- a/src/translations/pt_BR.po +++ b/src/translations/pt_BR.po @@ -378,6 +378,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Copiar para biblioteca..." diff --git a/src/translations/ro.po b/src/translations/ro.po index b54d7007f..3a57a0640 100644 --- a/src/translations/ro.po +++ b/src/translations/ro.po @@ -375,6 +375,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Copiază în bibliotecă..." diff --git a/src/translations/ru.po b/src/translations/ru.po index 610252025..5057ae497 100644 --- a/src/translations/ru.po +++ b/src/translations/ru.po @@ -374,6 +374,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Копировать в коллекцию..." diff --git a/src/translations/sk.po b/src/translations/sk.po index 97dc2e301..43771acda 100644 --- a/src/translations/sk.po +++ b/src/translations/sk.po @@ -380,6 +380,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Skopírovať do zbierky..." diff --git a/src/translations/sv.po b/src/translations/sv.po index f4037b946..91fec202a 100644 --- a/src/translations/sv.po +++ b/src/translations/sv.po @@ -375,6 +375,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Kopiera till bibliotek..." diff --git a/src/translations/tr.po b/src/translations/tr.po index f19e9f473..0a18087aa 100644 --- a/src/translations/tr.po +++ b/src/translations/tr.po @@ -375,6 +375,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "" diff --git a/src/translations/translations.pot b/src/translations/translations.pot index fc6175527..775e64f89 100644 --- a/src/translations/translations.pot +++ b/src/translations/translations.pot @@ -365,6 +365,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "" diff --git a/src/translations/uk.po b/src/translations/uk.po index c711beaac..e162287cc 100644 --- a/src/translations/uk.po +++ b/src/translations/uk.po @@ -379,6 +379,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "Скопіювати до фонотеки..." diff --git a/src/translations/zh_CN.po b/src/translations/zh_CN.po index 5cb5d3975..5c85a84c0 100644 --- a/src/translations/zh_CN.po +++ b/src/translations/zh_CN.po @@ -375,6 +375,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "" diff --git a/src/translations/zh_TW.po b/src/translations/zh_TW.po index 355076489..e706727aa 100644 --- a/src/translations/zh_TW.po +++ b/src/translations/zh_TW.po @@ -375,6 +375,9 @@ msgstr "" msgid "Connected" msgstr "" +msgid "Copy to device..." +msgstr "" + msgid "Copy to library..." msgstr "" diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 3f696beed..bb844f77f 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -196,6 +196,7 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg ui_->library_view->setModel(library_sort_model_); ui_->library_view->SetLibrary(library_->model()); ui_->library_view->SetTaskManager(task_manager_); + ui_->library_view->SetDeviceManager(devices_); settings_dialog_->SetLibraryDirectoryModel(library_->model()->directory_model()); ui_->radio_view->SetModel(radio_model_); diff --git a/src/ui/organisedialog.cpp b/src/ui/organisedialog.cpp index 48261720a..5bbb7ab74 100644 --- a/src/ui/organisedialog.cpp +++ b/src/ui/organisedialog.cpp @@ -149,12 +149,13 @@ void OrganiseDialog::InsertTag(const QString &tag) { void OrganiseDialog::UpdatePreviews() { const QModelIndex destination = ui_->destination->model()->index( ui_->destination->currentIndex(), 0); - if (!destination.isValid()) - return; - const MusicStorage* storage = - destination.data(MusicStorage::kStorageRole).value(); + MusicStorage* storage = NULL; + bool has_local_destination = false; - const bool has_local_destination = !storage->LocalPath().isEmpty(); + if (destination.isValid()) { + storage = destination.data(MusicStorage::kStorageRole).value(); + has_local_destination = !storage->LocalPath().isEmpty(); + } // Update the format object format_.set_format(ui_->naming->toPlainText()); @@ -163,13 +164,13 @@ void OrganiseDialog::UpdatePreviews() { format_.set_replace_the(ui_->replace_the->isChecked()); const bool format_valid = format_.IsValid(); - ui_->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(format_valid); + ui_->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(format_valid && storage); if (!format_valid) return; // Update the previews ui_->preview->clear(); - ui_->preview->setVisible(has_local_destination); + ui_->preview_group->setVisible(has_local_destination); if (has_local_destination) { foreach (const Song& song, preview_songs_) { QString filename = storage->LocalPath() + "/" + diff --git a/src/ui/organisedialog.ui b/src/ui/organisedialog.ui index 7e0ddc2c0..ae2cec8db 100644 --- a/src/ui/organisedialog.ui +++ b/src/ui/organisedialog.ui @@ -7,7 +7,7 @@ 0 0 639 - 436 + 492 @@ -114,7 +114,7 @@ - + Preview @@ -146,7 +146,9 @@
widgets/linetextedit.h
- + + + buttonBox