1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#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(),
&DlgLibraryExport::startEnginePrimeExport,
this,
&LibraryExporter::beginEnginePrimeExport);
} else {
m_pDialog->show();
m_pDialog->raise();
m_pDialog->setWindowState(
(m_pDialog->windowState() & ~Qt::WindowMinimized) |
Qt::WindowActive);
}
m_pDialog->refresh();
m_pDialog->setSelectedCrate(initialSelectedCrate);
}
void LibraryExporter::beginEnginePrimeExport(
QSharedPointer<EnginePrimeExportRequest> pRequest) {
// Note that the job will run in a background thread.
auto pJobThread = make_parented<EnginePrimeExportJob>(
this,
m_pTrackCollectionManager,
pRequest);
connect(pJobThread, &EnginePrimeExportJob::finished, pJobThread, &QObject::deleteLater);
// TODO(XXX) The conclusion of the export (succeeded/failed) could be better
// presented as a user notification, rather than using a message box, if
// such functionality is added to Mixxx.
connect(pJobThread,
&EnginePrimeExportJob::completed,
this,
[](int numTracks, int numCrates) {
QMessageBox::information(nullptr,
tr("Export Completed"),
QString{tr("Exported %1 track(s) and %2 crate(s).")}
.arg(numTracks)
.arg(numCrates));
});
connect(pJobThread,
&EnginePrimeExportJob::failed,
this,
[](const QString& message) {
QMessageBox::critical(nullptr,
tr("Export Failed"),
QString{tr("Export failed: %1")}.arg(message));
});
// Construct a dialog to monitor job progress and offer cancellation.
auto pProgressDlg = make_parented<QProgressDialog>(this);
pProgressDlg->setLabelText(tr("Exporting to Engine Prime..."));
pProgressDlg->setMinimumDuration(0);
connect(pJobThread,
&EnginePrimeExportJob::jobMaximum,
pProgressDlg,
&QProgressDialog::setMaximum);
connect(pJobThread,
&EnginePrimeExportJob::jobProgress,
pProgressDlg,
&QProgressDialog::setValue);
connect(pJobThread, &EnginePrimeExportJob::finished, pProgressDlg, &QObject::deleteLater);
connect(pProgressDlg,
&QProgressDialog::canceled,
pJobThread,
&EnginePrimeExportJob::slotCancel);
pJobThread->start();
}
} // namespace mixxx
|