From 2137ac4709a1b482f67e41262d49df82e41e1a4f Mon Sep 17 00:00:00 2001 From: Mattias Andersson Date: Sun, 18 May 2014 14:15:06 +0200 Subject: [PATCH] Keep working until tagging is complete. --- src/ui/ripcd.cpp | 19 +++++++++++++++++-- src/ui/ripcd.h | 1 + 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/ui/ripcd.cpp b/src/ui/ripcd.cpp index 769df1a93..509bf3449 100644 --- a/src/ui/ripcd.cpp +++ b/src/ui/ripcd.cpp @@ -30,6 +30,8 @@ #include #include #include +#include +#include #include #include #include @@ -334,6 +336,7 @@ void RipCD::JobComplete(const QString& filename, bool success) { void RipCD::AllJobsComplete() { RemoveTemporaryDirectory(); + // Save tags in the background. TranscoderPreset preset = ui_->format->itemData(ui_->format->currentIndex()) .value(); @@ -341,8 +344,11 @@ void RipCD::AllJobsComplete() { ui_->albumLineEdit->text(), ui_->artistLineEdit->text(), ui_->genreLineEdit->text(), ui_->yearLineEdit->text().toInt(), ui_->discLineEdit->text().toInt(), preset.type_); - QtConcurrent::run(this, &RipCD::TagFiles, album, tracks_); - SetWorking(false); + QFuture future = + QtConcurrent::run(this, &RipCD::TagFiles, album, tracks_); + QFutureWatcher* watcher = new QFutureWatcher(this); + connect(watcher, SIGNAL(finished()), SLOT(TaggingComplete())); + watcher->setFuture(future); } void RipCD::TagFiles(const AlbumInformation& album, @@ -365,6 +371,15 @@ void RipCD::TagFiles(const AlbumInformation& album, } } +void RipCD::TaggingComplete() { + QFutureWatcher* watcher = dynamic_cast*>(sender()); + if (!watcher) return; + watcher->deleteLater(); + + SetWorking(false); + qLog(Debug) << "CD ripper finished."; +} + void RipCD::Options() { TranscoderPreset preset = ui_->format->itemData(ui_->format->currentIndex()) .value(); diff --git a/src/ui/ripcd.h b/src/ui/ripcd.h index f045a51b5..a99ba1ada 100644 --- a/src/ui/ripcd.h +++ b/src/ui/ripcd.h @@ -124,6 +124,7 @@ signals: void ClickedRipButton(); void JobComplete(const QString& filename, bool success); void AllJobsComplete(); + void TaggingComplete(); void Options(); void AddDestination(); void Cancel();