summaryrefslogtreecommitdiffstats
path: root/src/library/export/libraryexporter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/library/export/libraryexporter.cpp')
-rw-r--r--src/library/export/libraryexporter.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/library/export/libraryexporter.cpp b/src/library/export/libraryexporter.cpp
new file mode 100644
index 0000000000..d01d46ecc1
--- /dev/null
+++ b/src/library/export/libraryexporter.cpp
@@ -0,0 +1,60 @@
+#include "library/export/libraryexporter.h"
+
+#include <QProgressDialog>
+#include <QThreadPool>
+
+#include "library/export/engineprimeexportjob.h"
+#include "util/parented_ptr.h"
+
+namespace mixxx {
+
+LibraryExporter::LibraryExporter(QWidget* parent,
+ UserSettingsPointer pConfig,
+ TrackCollectionManager* pTrackCollectionManager)
+ : QWidget{parent},
+ m_pConfig{std::move(pConfig)},
+ m_pTrackCollectionManager{pTrackCollectionManager} {
+}
+
+void LibraryExporter::requestExportWithOptionalInitialCrate(
+ std::optional<CrateId> initialSelectedCrate) {
+ if (!m_pDialog) {
+ m_pDialog = make_parented<DlgLibraryExport>(
+ this, m_pConfig, m_pTrackCollectionManager);
+ connect(m_pDialog.get(),
+ SIGNAL(startEnginePrimeExport(EnginePrimeExportRequest)),
+ this,
+ SLOT(beginEnginePrimeExport(EnginePrimeExportRequest)));
+ } else {
+ m_pDialog->show();
+ m_pDialog->raise();
+ m_pDialog->setWindowState(
+ (m_pDialog->windowState() & ~Qt::WindowMinimized) |
+ Qt::WindowActive);
+ }
+
+ m_pDialog->setSelectedCrate(initialSelectedCrate);
+}
+
+void LibraryExporter::beginEnginePrimeExport(
+ EnginePrimeExportRequest request) {
+ // Note that the job will run in a background thread.
+ auto pJobThread = make_parented<EnginePrimeExportJob>(
+ this,
+ m_pTrackCollectionManager,
+ std::move(request));
+ connect(pJobThread, &EnginePrimeExportJob::finished, pJobThread, &QObject::deleteLater);
+
+ // Construct a dialog to monitor job progress and offer cancellation.
+ auto pd = make_parented<QProgressDialog>(this);
+ pd->setLabelText(tr("Exporting to Engine Prime..."));
+ pd->setMinimumDuration(0);
+ connect(pJobThread, &EnginePrimeExportJob::jobMaximum, pd, &QProgressDialog::setMaximum);
+ connect(pJobThread, &EnginePrimeExportJob::jobProgress, pd, &QProgressDialog::setValue);
+ connect(pJobThread, &EnginePrimeExportJob::finished, pd, &QObject::deleteLater);
+ connect(pd, &QProgressDialog::canceled, pJobThread, &EnginePrimeExportJob::cancel);
+
+ pJobThread->start();
+}
+
+} // namespace mixxx