summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Szmigin <smidge@xsco.net>2020-09-16 23:33:52 +0100
committerAdam Szmigin <smidge@xsco.net>2020-10-11 14:41:36 +0100
commite1c2cfc58506aff45dae034534f269258f0bba70 (patch)
tree11f9dc9160b68f3ac87fa8cc1835d4d73b1b4158
parent9f9adda76b306b457007ebb576be7ca1e8c56e79 (diff)
Allow selection of database version when exporting
-rw-r--r--src/library/export/dlglibraryexport.cpp24
-rw-r--r--src/library/export/dlglibraryexport.h2
-rw-r--r--src/library/export/engineprimeexportjob.cpp4
-rw-r--r--src/library/export/engineprimeexportrequest.h4
4 files changed, 31 insertions, 3 deletions
diff --git a/src/library/export/dlglibraryexport.cpp b/src/library/export/dlglibraryexport.cpp
index 54992b3817..428173b946 100644
--- a/src/library/export/dlglibraryexport.cpp
+++ b/src/library/export/dlglibraryexport.cpp
@@ -7,7 +7,8 @@
#include <QLabel>
#include <QPushButton>
#include <QStandardPaths>
-#include <djinterop/enginelibrary.hpp>
+#include <djinterop/djinterop.hpp>
+#include <string>
#include "library/export/engineprimeexportrequest.h"
#include "library/trackcollection.h"
@@ -56,6 +57,21 @@ DlgLibraryExport::DlgLibraryExport(
m_pMusicDirectoryTextField = make_parented<QLineEdit>();
m_pMusicDirectoryTextField->setReadOnly(true);
+ // Drop-down for choosing exported database version.
+ m_pVersionCombo = make_parented<QComboBox>();
+ int versionIndex = 0;
+ for (const djinterop::semantic_version& version : el::all_versions) {
+ std::string label = el::version_name(version);
+ m_pVersionCombo->insertItem(
+ 0, QString::fromStdString(label), QVariant{versionIndex});
+ if (version == el::version_latest_firmware) {
+ // Latest firmware version is the default selection.
+ m_pVersionCombo->setCurrentIndex(0);
+ }
+
+ ++versionIndex;
+ }
+
// Radio buttons to allow choice between exporting the whole music library
// or just tracks in a selection of crates.
m_pWholeLibraryRadio = make_parented<QRadioButton>(tr("Entire music library"));
@@ -83,6 +99,7 @@ DlgLibraryExport::DlgLibraryExport(
auto pFormLayout = make_parented<QFormLayout>();
pFormLayout->addRow(tr("Base export directory"), pExportDirLayout);
+ pFormLayout->addRow(tr("Database version"), m_pVersionCombo);
pFormLayout->addRow(tr("Engine Prime database export directory"),
m_pDatabaseDirectoryTextField);
pFormLayout->addRow(tr("Copy music files to"), m_pMusicDirectoryTextField);
@@ -188,12 +205,17 @@ void DlgLibraryExport::exportRequested() {
}
}
+ // Work out what version was requested.
+ int versionIndex = m_pVersionCombo->currentData().toInt();
+ djinterop::semantic_version exportVersion = el::all_versions[versionIndex];
+
// Construct a request to export the library/crates.
// Assumed to always be an Engine Prime export in this iteration of the
// dialog.
EnginePrimeExportRequest request;
request.engineLibraryDbDir = QDir{m_pDatabaseDirectoryTextField->text()};
request.musicFilesDir = QDir{m_pMusicDirectoryTextField->text()};
+ request.exportVersion = exportVersion;
request.exportSelectedCrates = m_pCratesList->isEnabled();
if (request.exportSelectedCrates) {
for (auto* pItem : m_pCratesList->selectedItems()) {
diff --git a/src/library/export/dlglibraryexport.h b/src/library/export/dlglibraryexport.h
index 364acb2b94..bd3d17423c 100644
--- a/src/library/export/dlglibraryexport.h
+++ b/src/library/export/dlglibraryexport.h
@@ -1,5 +1,6 @@
#pragma once
+#include <QComboBox>
#include <QDialog>
#include <QLineEdit>
#include <QListWidget>
@@ -57,6 +58,7 @@ class DlgLibraryExport : public QDialog {
parented_ptr<QRadioButton> m_pCratesRadio;
parented_ptr<QListWidget> m_pCratesList;
parented_ptr<QLineEdit> m_pBaseDirectoryTextField;
+ parented_ptr<QComboBox> m_pVersionCombo;
parented_ptr<QLineEdit> m_pDatabaseDirectoryTextField;
parented_ptr<QLineEdit> m_pMusicDirectoryTextField;
};
diff --git a/src/library/export/engineprimeexportjob.cpp b/src/library/export/engineprimeexportjob.cpp
index 83df500f28..353b1d113d 100644
--- a/src/library/export/engineprimeexportjob.cpp
+++ b/src/library/export/engineprimeexportjob.cpp
@@ -8,12 +8,12 @@
#include <cstdint>
#include <djinterop/djinterop.hpp>
#include <memory>
-#include <optional>
#include <stdexcept>
#include "library/trackcollection.h"
#include "library/trackset/crate/crate.h"
#include "track/track.h"
+#include "util/optional.h"
#include "waveform/waveformfactory.h"
namespace el = djinterop::enginelibrary;
@@ -452,7 +452,7 @@ void EnginePrimeExportJob::run() {
bool created;
djinterop::database db = el::create_or_load_database(
m_request.engineLibraryDbDir.path().toStdString(),
- el::version_latest,
+ m_request.exportVersion,
created);
++currProgress;
emit jobProgress(currProgress);
diff --git a/src/library/export/engineprimeexportrequest.h b/src/library/export/engineprimeexportrequest.h
index d4000e65f7..3a60155277 100644
--- a/src/library/export/engineprimeexportrequest.h
+++ b/src/library/export/engineprimeexportrequest.h
@@ -1,6 +1,7 @@
#pragma once
#include <QDir>
+#include <djinterop/djinterop.hpp>
#include "library/export/exportrequest.h"
@@ -13,6 +14,9 @@ struct EnginePrimeExportRequest : public ExportRequest {
/// Directory in which to write the exported music files.
QDir musicFilesDir;
+
+ /// Version of Engine Prime database to use when exporting.
+ djinterop::semantic_version exportVersion;
};
} // namespace mixxx