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();