From c299c198decb6de2d621c3e2b6179e651985c671 Mon Sep 17 00:00:00 2001 From: Jim Broadus Date: Sat, 6 Jun 2020 21:40:07 -0700 Subject: [PATCH] organise: Update the song preview when the selected destination's data changes This will cause the file exensions to change when transcode options are changed. --- src/ui/organisedialog.cpp | 17 +++++++++++++++++ src/ui/organisedialog.h | 6 +++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/ui/organisedialog.cpp b/src/ui/organisedialog.cpp index 1705ff8a0..4904786ff 100644 --- a/src/ui/organisedialog.cpp +++ b/src/ui/organisedialog.cpp @@ -113,6 +113,13 @@ void OrganiseDialog::SetDestinationModel(QAbstractItemModel* model, ui_->destination->setModel(model); ui_->eject_after->setVisible(devices); + + // In case this is called more than once, disconnect old model. + if (model_connection_) disconnect(model_connection_); + // If a device changes, transcoding options may have changed. + model_connection_ = + connect(model, SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, + SLOT(DestDataChanged(QModelIndex, QModelIndex))); } bool OrganiseDialog::SetSongs(const SongList& songs) { @@ -306,6 +313,16 @@ void OrganiseDialog::UpdatePreviews() { } } +void OrganiseDialog::DestDataChanged(const QModelIndex& begin, + const QModelIndex& end) { + const QModelIndex destination = + ui_->destination->model()->index(ui_->destination->currentIndex(), 0); + if (QItemSelection(begin, end).contains(destination)) { + qLog(Debug) << "Destination data changed"; + UpdatePreviews(); + } +} + QSize OrganiseDialog::sizeHint() const { return QSize(650, 0); } void OrganiseDialog::Reset() { diff --git a/src/ui/organisedialog.h b/src/ui/organisedialog.h index 3bd7677d2..5504c0ae4 100644 --- a/src/ui/organisedialog.h +++ b/src/ui/organisedialog.h @@ -64,7 +64,7 @@ class OrganiseDialog : public QDialog { void SetCopy(bool copy); -signals: + signals: void FileCopied(int); public slots: @@ -80,6 +80,8 @@ signals: void InsertTag(const QString& tag); void UpdatePreviews(); + void DestDataChanged(const QModelIndex& begin, const QModelIndex& end); + void OrganiseFinished(const QStringList& files_with_errors); private: @@ -93,6 +95,8 @@ signals: TaskManager* task_manager_; LibraryBackend* backend_; + QMetaObject::Connection model_connection_; + OrganiseFormat format_; QFuture songs_future_;