From 1c5f70748db46c560481e38893c43d9acb0a1bae Mon Sep 17 00:00:00 2001 From: Be Date: Mon, 20 Jul 2020 17:44:07 -0500 Subject: RekordboxFeature: always import beat data as a BeatMap Rekordbox lets the user manually set multiple tempos per track. If beat data is imported into a BeatGrid, this would get lost by averaging it all to one constant tempo. Instead, always import beat data from Rekordbox into a BeatMap regardless of whether the "assume constant tempo" preference is set in Mixxx. This preserves data from Rekordbox without introducing the downsides of Mixxx's BeatMap analyzer (noisy tempo fluctuations). --- src/library/rekordbox/rekordboxfeature.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/library/rekordbox/rekordboxfeature.cpp b/src/library/rekordbox/rekordboxfeature.cpp index fa310b88e9..3b479b6e01 100644 --- a/src/library/rekordbox/rekordboxfeature.cpp +++ b/src/library/rekordbox/rekordboxfeature.cpp @@ -1,28 +1,28 @@ // rekordboxfeature.cpp // Created 05/24/2019 by Evan Dekker +#include "library/rekordbox/rekordboxfeature.h" + +#include + #include #include #include #include #include -#include "library/rekordbox/rekordbox_anlz.h" -#include "library/rekordbox/rekordbox_pdb.h" -#include "library/rekordbox/rekordboxfeature.h" - -#include - #include "engine/engine.h" #include "library/dao/trackschema.h" #include "library/library.h" #include "library/librarytablemodel.h" #include "library/missingtablemodel.h" #include "library/queryutil.h" +#include "library/rekordbox/rekordbox_anlz.h" +#include "library/rekordbox/rekordbox_pdb.h" #include "library/trackcollection.h" #include "library/trackcollectionmanager.h" #include "library/treeitem.h" -#include "track/beatfactory.h" +#include "track/beatmap.h" #include "track/cue.h" #include "track/keyfactory.h" #include "util/color/color.h" @@ -31,7 +31,6 @@ #include "util/file.h" #include "util/sandbox.h" #include "waveform/waveform.h" - #include "widget/wlibrary.h" #include "widget/wlibrarytextbrowser.h" @@ -857,10 +856,9 @@ void readAnalyze(TrackPointer track, double sampleRate, int timingOffset, bool i QHash extraVersionInfo; - mixxx::BeatsPointer pBeats = BeatFactory::makePreferredBeats( - *track, beats, extraVersionInfo, false, false, sampleRate, 0, 0, 0); - - track->setBeats(pBeats); + auto pBeats = new mixxx::BeatMap(*track, sampleRate, beats); + pBeats->setSubVersion(QStringLiteral("Rekordbox")); + track->setBeats(mixxx::BeatsPointer(pBeats)); } break; case rekordbox_anlz_t::SECTION_TAGS_CUES: { if (ignoreCues) { -- cgit v1.2.3 From 27ab45926cf39dce5d47595efc9245bd9776e58d Mon Sep 17 00:00:00 2001 From: Be Date: Mon, 20 Jul 2020 18:14:23 -0500 Subject: add preference option for reanalyzing imported beatgrid data --- src/analyzer/analyzerbeats.cpp | 6 ++++++ src/analyzer/analyzerbeats.h | 1 + src/library/rekordbox/rekordboxconstants.h | 5 +++++ src/library/rekordbox/rekordboxfeature.cpp | 3 ++- src/preferences/beatdetectionsettings.h | 3 +++ src/preferences/dialog/dlgprefbeats.cpp | 16 ++++++++++++++-- src/preferences/dialog/dlgprefbeats.h | 2 ++ src/preferences/dialog/dlgprefbeatsdlg.ui | 9 ++++++++- 8 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 src/library/rekordbox/rekordboxconstants.h diff --git a/src/analyzer/analyzerbeats.cpp b/src/analyzer/analyzerbeats.cpp index cdbdbf5012..953e7af77f 100644 --- a/src/analyzer/analyzerbeats.cpp +++ b/src/analyzer/analyzerbeats.cpp @@ -8,6 +8,7 @@ #include "analyzer/constants.h" #include "analyzer/plugins/analyzerqueenmarybeats.h" #include "analyzer/plugins/analyzersoundtouchbeats.h" +#include "library/rekordbox/rekordboxconstants.h" #include "track/beatfactory.h" #include "track/beatmap.h" #include "track/beatutils.h" @@ -32,6 +33,7 @@ AnalyzerBeats::AnalyzerBeats(UserSettingsPointer pConfig, bool enforceBpmDetecti : m_bpmSettings(pConfig), m_enforceBpmDetection(enforceBpmDetection), m_bPreferencesReanalyzeOldBpm(false), + m_bPreferencesReanalyzeImported(false), m_bPreferencesFixedTempo(true), m_bPreferencesOffsetCorrection(false), m_bPreferencesFastAnalysis(false), @@ -67,6 +69,7 @@ bool AnalyzerBeats::initialize(TrackPointer tio, int sampleRate, int totalSample m_bPreferencesFixedTempo = m_bpmSettings.getFixedTempoAssumption(); m_bPreferencesOffsetCorrection = m_bpmSettings.getFixedTempoOffsetCorrection(); m_bPreferencesReanalyzeOldBpm = m_bpmSettings.getReanalyzeWhenSettingsChange(); + m_bPreferencesReanalyzeImported = m_bpmSettings.getReanalyzeImported(); m_bPreferencesFastAnalysis = m_bpmSettings.getFastAnalysis(); if (availablePlugins().size() > 0) { @@ -180,6 +183,9 @@ bool AnalyzerBeats::shouldAnalyze(TrackPointer tio) const { iMinBpm, iMaxBpm, extraVersionInfo); + if (subVersion == mixxx::rekordboxconstants::beatsSubversion) { + return m_bPreferencesReanalyzeImported; + } if (version == newVersion && subVersion == newSubVersion) { // If the version and settings have not changed then if the world is // sane, re-analyzing will do nothing. diff --git a/src/analyzer/analyzerbeats.h b/src/analyzer/analyzerbeats.h index 5dbb9a7f5f..01b9098f28 100644 --- a/src/analyzer/analyzerbeats.h +++ b/src/analyzer/analyzerbeats.h @@ -42,6 +42,7 @@ class AnalyzerBeats : public Analyzer { const bool m_enforceBpmDetection; QString m_pluginId; bool m_bPreferencesReanalyzeOldBpm; + bool m_bPreferencesReanalyzeImported; bool m_bPreferencesFixedTempo; bool m_bPreferencesOffsetCorrection; bool m_bPreferencesFastAnalysis; diff --git a/src/library/rekordbox/rekordboxconstants.h b/src/library/rekordbox/rekordboxconstants.h new file mode 100644 index 0000000000..13a93d29a7 --- /dev/null +++ b/src/library/rekordbox/rekordboxconstants.h @@ -0,0 +1,5 @@ +namespace mixxx { +namespace rekordboxconstants { +const QString beatsSubversion = QStringLiteral("Rekordbox USB drive"); +} +} // namespace mixxx diff --git a/src/library/rekordbox/rekordboxfeature.cpp b/src/library/rekordbox/rekordboxfeature.cpp index 3b479b6e01..1e5a449a05 100644 --- a/src/library/rekordbox/rekordboxfeature.cpp +++ b/src/library/rekordbox/rekordboxfeature.cpp @@ -19,6 +19,7 @@ #include "library/queryutil.h" #include "library/rekordbox/rekordbox_anlz.h" #include "library/rekordbox/rekordbox_pdb.h" +#include "library/rekordbox/rekordboxconstants.h" #include "library/trackcollection.h" #include "library/trackcollectionmanager.h" #include "library/treeitem.h" @@ -857,7 +858,7 @@ void readAnalyze(TrackPointer track, double sampleRate, int timingOffset, bool i QHash extraVersionInfo; auto pBeats = new mixxx::BeatMap(*track, sampleRate, beats); - pBeats->setSubVersion(QStringLiteral("Rekordbox")); + pBeats->setSubVersion(mixxx::rekordboxconstants::beatsSubversion); track->setBeats(mixxx::BeatsPointer(pBeats)); } break; case rekordbox_anlz_t::SECTION_TAGS_CUES: { diff --git a/src/preferences/beatdetectionsettings.h b/src/preferences/beatdetectionsettings.h index ea78c08238..1731f2158a 100644 --- a/src/preferences/beatdetectionsettings.h +++ b/src/preferences/beatdetectionsettings.h @@ -17,6 +17,7 @@ #define BPM_FIXED_TEMPO_ASSUMPTION "BeatDetectionFixedTempoAssumption" #define BPM_FIXED_TEMPO_OFFSET_CORRECTION "FixedTempoOffsetCorrection" #define BPM_REANALYZE_WHEN_SETTINGS_CHANGE "ReanalyzeWhenSettingsChange" +#define BPM_REANALYZE_IMPORTED "ReanalyzeImported" #define BPM_FAST_ANALYSIS_ENABLED "FastAnalysisEnabled" #define BPM_RANGE_START "BPMRangeStart" @@ -42,6 +43,8 @@ class BeatDetectionSettings { DEFINE_PREFERENCE_HELPERS(ReanalyzeWhenSettingsChange, bool, BPM_CONFIG_KEY, BPM_REANALYZE_WHEN_SETTINGS_CHANGE, false); + DEFINE_PREFERENCE_HELPERS(ReanalyzeImported, bool, BPM_CONFIG_KEY, BPM_REANALYZE_WHEN_SETTINGS_CHANGE, false); + DEFINE_PREFERENCE_HELPERS(FastAnalysis, bool, BPM_CONFIG_KEY, BPM_FAST_ANALYSIS_ENABLED, false); diff --git a/src/preferences/dialog/dlgprefbeats.cpp b/src/preferences/dialog/dlgprefbeats.cpp index 9e16fdc54b..7bd813047f 100644 --- a/src/preferences/dialog/dlgprefbeats.cpp +++ b/src/preferences/dialog/dlgprefbeats.cpp @@ -4,7 +4,7 @@ #include "control/controlobject.h" #include "defs_urls.h" -DlgPrefBeats::DlgPrefBeats(QWidget *parent, UserSettingsPointer pConfig) +DlgPrefBeats::DlgPrefBeats(QWidget* parent, UserSettingsPointer pConfig) : DlgPreferencePage(parent), m_bpmSettings(pConfig), m_minBpm(m_bpmSettings.getBpmRangeStartDefault()), @@ -13,7 +13,8 @@ DlgPrefBeats::DlgPrefBeats(QWidget *parent, UserSettingsPointer pConfig) m_bfixedtempoEnabled(m_bpmSettings.getFixedTempoAssumptionDefault()), m_boffsetEnabled(m_bpmSettings.getFixedTempoOffsetCorrectionDefault()), m_FastAnalysisEnabled(m_bpmSettings.getFastAnalysisDefault()), - m_bReanalyze(m_bpmSettings.getReanalyzeWhenSettingsChangeDefault()) { + m_bReanalyze(m_bpmSettings.getReanalyzeWhenSettingsChangeDefault()), + m_bReanalyzeImported(m_bpmSettings.getReanalyzeImportedDefault()) { setupUi(this); m_availablePlugins = AnalyzerBeats::availablePlugins(); @@ -43,6 +44,10 @@ DlgPrefBeats::DlgPrefBeats(QWidget *parent, UserSettingsPointer pConfig) connect(bReanalyse,SIGNAL(stateChanged(int)), this, SLOT(slotReanalyzeChanged(int))); + connect(bReanalyzeImported, + &QCheckBox::stateChanged, + this, + &DlgPrefBeats::slotReanalyzeImportedChanged); } DlgPrefBeats::~DlgPrefBeats() { @@ -125,6 +130,7 @@ void DlgPrefBeats::slotUpdate() { txtMaxBpm->setEnabled(m_banalyzerEnabled && m_bfixedtempoEnabled); txtMinBpm->setEnabled(m_banalyzerEnabled && m_bfixedtempoEnabled); bReanalyse->setEnabled(m_banalyzerEnabled); + bReanalyzeImported->setEnabled(m_bReanalyzeImported); if (!m_banalyzerEnabled) { return; @@ -165,6 +171,11 @@ void DlgPrefBeats::slotReanalyzeChanged(int value) { slotUpdate(); } +void DlgPrefBeats::slotReanalyzeImportedChanged(int value) { + m_bReanalyzeImported = static_cast(value); + slotUpdate(); +} + void DlgPrefBeats::fastAnalysisEnabled(int i) { m_FastAnalysisEnabled = static_cast(i); slotUpdate(); @@ -176,6 +187,7 @@ void DlgPrefBeats::slotApply() { m_bpmSettings.setFixedTempoAssumption(m_bfixedtempoEnabled); m_bpmSettings.setFixedTempoOffsetCorrection(m_boffsetEnabled); m_bpmSettings.setReanalyzeWhenSettingsChange(m_bReanalyze); + m_bpmSettings.setReanalyzeImported(m_bReanalyzeImported); m_bpmSettings.setFastAnalysis(m_FastAnalysisEnabled); m_bpmSettings.setBpmRangeStart(m_minBpm); m_bpmSettings.setBpmRangeEnd(m_maxBpm); diff --git a/src/preferences/dialog/dlgprefbeats.h b/src/preferences/dialog/dlgprefbeats.h index 2e09913297..97bce34366 100644 --- a/src/preferences/dialog/dlgprefbeats.h +++ b/src/preferences/dialog/dlgprefbeats.h @@ -38,6 +38,7 @@ class DlgPrefBeats : public DlgPreferencePage, public Ui::DlgBeatsDlg { void minBpmRangeChanged(int value); void maxBpmRangeChanged(int value); void slotReanalyzeChanged(int value); + void slotReanalyzeImportedChanged(int value); private: void loadSettings(); @@ -52,6 +53,7 @@ class DlgPrefBeats : public DlgPreferencePage, public Ui::DlgBeatsDlg { bool m_boffsetEnabled; bool m_FastAnalysisEnabled; bool m_bReanalyze; + bool m_bReanalyzeImported; }; #endif // DLGPREFBEATS_H diff --git a/src/preferences/dialog/dlgprefbeatsdlg.ui b/src/preferences/dialog/dlgprefbeatsdlg.ui index 3bbdde2910..b25f597215 100644 --- a/src/preferences/dialog/dlgprefbeatsdlg.ui +++ b/src/preferences/dialog/dlgprefbeatsdlg.ui @@ -6,7 +6,7 @@ 0 0 - 537 + 564 400 @@ -149,6 +149,13 @@ by analyzing the beats to discard outliers. + + + + Re-analyze beatgrids imported from other DJ software + + + -- cgit v1.2.3 From dfcced5fc15c064c122f9ea1a856b028643d7aeb Mon Sep 17 00:00:00 2001 From: Uwe Klotz Date: Fri, 18 Sep 2020 10:31:00 +0200 Subject: Reduce dependencies in test classes --- src/test/controllerengine_test.cpp | 18 ++++++++++++++++-- src/test/learningutilstest.cpp | 3 ++- src/test/librarytest.h | 6 +++--- src/test/mixxxtest.cpp | 10 ++++++++++ src/test/mixxxtest.h | 24 ++---------------------- 5 files changed, 33 insertions(+), 28 deletions(-) diff --git a/src/test/controllerengine_test.cpp b/src/test/controllerengine_test.cpp index 642b4b9896..2fd534dd78 100644 --- a/src/test/controllerengine_test.cpp +++ b/src/test/controllerengine_test.cpp @@ -1,19 +1,33 @@ +#include "controllers/controllerengine.h" + +#include +#include #include #include +#include #include "control/controlobject.h" #include "control/controlpotmeter.h" #include "controllers/controllerdebug.h" -#include "controllers/controllerengine.h" #include "controllers/softtakeover.h" #include "preferences/usersettings.h" #include "test/mixxxtest.h" #include "util/color/colorpalette.h" -#include "util/memory.h" #include "util/time.h" +typedef std::unique_ptr ScopedTemporaryFile; + class ControllerEngineTest : public MixxxTest { protected: + static ScopedTemporaryFile makeTemporaryFile(const QString& contents) { + QByteArray contentsBa = contents.toLocal8Bit(); + ScopedTemporaryFile pFile = std::make_unique(); + pFile->open(); + pFile->write(contentsBa); + pFile->close(); + return pFile; + } + void SetUp() override { mixxx::Time::setTestMode(true); mixxx::Time::setTestElapsedTime(mixxx::Duration::fromMillis(10)); diff --git a/src/test/learningutilstest.cpp b/src/test/learningutilstest.cpp index c6e2057503..8741085c38 100644 --- a/src/test/learningutilstest.cpp +++ b/src/test/learningutilstest.cpp @@ -1,7 +1,8 @@ #include -#include "test/mixxxtest.h" +#include "control/controlobject.h" #include "controllers/learningutils.h" +#include "test/mixxxtest.h" #include "util/memory.h" std::ostream& operator<<(std::ostream& stream, const MidiInputMapping& mapping) { diff --git a/src/test/librarytest.h b/src/test/librarytest.h index c7e99c645c..d114320c1a 100644 --- a/src/test/librarytest.h +++ b/src/test/librarytest.h @@ -2,13 +2,13 @@ #include -#include "test/mixxxtest.h" - +#include "control/controlobject.h" #include "database/mixxxdb.h" #include "library/trackcollection.h" #include "library/trackcollectionmanager.h" -#include "util/db/dbconnectionpooler.h" +#include "test/mixxxtest.h" #include "util/db/dbconnectionpooled.h" +#include "util/db/dbconnectionpooler.h" class LibraryTest : public MixxxTest { protected: diff --git a/src/test/mixxxtest.cpp b/src/test/mixxxtest.cpp index 07dbf28da6..5a2f80ea73 100644 --- a/src/test/mixxxtest.cpp +++ b/src/test/mixxxtest.cpp @@ -1,5 +1,8 @@ #include "test/mixxxtest.h" +#include + +#include "control/control.h" #include "library/coverartutils.h" #include "sources/soundsourceproxy.h" #include "util/cmdlineargs.h" @@ -65,3 +68,10 @@ MixxxTest::~MixxxTest() { pControl->deleteCreatorCO(); } } + +void MixxxTest::saveAndReloadConfig() { + m_pConfig->save(); + m_pConfig = UserSettingsPointer( + new UserSettings(getTestDataDir().filePath("test.cfg"))); + ControlDoublePrivate::setUserConfig(m_pConfig); +} diff --git a/src/test/mixxxtest.h b/src/test/mixxxtest.h index 92aa601218..2b753f58e1 100644 --- a/src/test/mixxxtest.h +++ b/src/test/mixxxtest.h @@ -4,21 +4,15 @@ #include #include -#include -#include #include +#include #include "mixxxapplication.h" - #include "preferences/usersettings.h" -#include "control/controlobject.h" -#include "control/controlproxy.h" #define EXPECT_QSTRING_EQ(expected, test) EXPECT_STREQ(qPrintable(expected), qPrintable(test)) #define ASSERT_QSTRING_EQ(expected, test) ASSERT_STREQ(qPrintable(expected), qPrintable(test)) -typedef QScopedPointer ScopedTemporaryFile; - class MixxxTest : public testing::Test { public: MixxxTest(); @@ -45,21 +39,7 @@ class MixxxTest : public testing::Test { } // Simulate restarting Mixxx by saving and reloading the UserSettings. - void saveAndReloadConfig() { - m_pConfig->save(); - m_pConfig = UserSettingsPointer( - new UserSettings(getTestDataDir().filePath("test.cfg"))); - ControlDoublePrivate::setUserConfig(m_pConfig); - } - - QTemporaryFile* makeTemporaryFile(const QString& contents) const { - QByteArray contentsBa = contents.toLocal8Bit(); - QTemporaryFile* file = new QTemporaryFile(); - file->open(); - file->write(contentsBa); - file->close(); - return file; - } + void saveAndReloadConfig(); QDir getTestDataDir() const { return m_testDataDir.path(); -- cgit v1.2.3 From 578a76834668e8e339f9b487f466a3d2c6c27f3b Mon Sep 17 00:00:00 2001 From: Uwe Klotz Date: Fri, 18 Sep 2020 10:33:29 +0200 Subject: Fix openEmptyFile test for SoundSourceProxy --- src/test/mixxxtest.cpp | 69 ++++++++++++++++++++++++++++++++++++++++++++ src/test/mixxxtest.h | 36 ++++++++++++++++++++--- src/test/soundproxy_test.cpp | 22 +++++++------- src/test/taglibtest.cpp | 63 +++++++--------------------------------- 4 files changed, 122 insertions(+), 68 deletions(-) diff --git a/src/test/mixxxtest.cpp b/src/test/mixxxtest.cpp index 5a2f80ea73..1f96477bb7 100644 --- a/src/test/mixxxtest.cpp +++ b/src/test/mixxxtest.cpp @@ -75,3 +75,72 @@ void MixxxTest::saveAndReloadConfig() { new UserSettings(getTestDataDir().filePath("test.cfg"))); ControlDoublePrivate::setUserConfig(m_pConfig); } + +namespace test { + +FileRemover::~FileRemover() { + VERIFY_OR_DEBUG_ASSERT( + m_fileName.isEmpty() || + QFile::remove(m_fileName) || + !QFile::exists(m_fileName)) { + // unexpected + } +} + +QString generateTemporaryFileName(const QString& fileNameTemplate) { + auto tmpFile = QTemporaryFile(fileNameTemplate); + // The file must be opened to create it and to obtain + // its file name! + tmpFile.open(); + const auto tmpFileName = tmpFile.fileName(); + DEBUG_ASSERT(!tmpFileName.isEmpty()); + // The empty temporary file will be removed upon returning + // from this function + return tmpFileName; +} + +QString createEmptyTemporaryFile(const QString& fileNameTemplate) { + const auto fileName = generateTemporaryFileName(fileNameTemplate); + FileRemover fileRemover(fileName); + + QFile emptyFile(fileName); + VERIFY_OR_DEBUG_ASSERT(emptyFile.open(QIODevice::WriteOnly)) { + return QString(); + } + VERIFY_OR_DEBUG_ASSERT(emptyFile.exists()) { + return QString(); + } + emptyFile.close(); + VERIFY_OR_DEBUG_ASSERT(emptyFile.size() == 0) { + return QString(); + } + + fileRemover.keepFile(); + return fileName; +} + +bool copyFile(const QString& srcFileName, const QString& dstFileName) { + auto srcFile = QFile(srcFileName); + DEBUG_ASSERT(srcFile.exists()); + VERIFY_OR_DEBUG_ASSERT(srcFile.copy(dstFileName)) { + qWarning() + << srcFile.errorString() + << "- Failed to copy file" + << srcFile.fileName() + << "->" + << dstFileName; + return false; + } + auto dstFileRemover = FileRemover(dstFileName); + auto dstFile = QFile(dstFileName); + VERIFY_OR_DEBUG_ASSERT(dstFile.exists()) { + return false; + } + VERIFY_OR_DEBUG_ASSERT(srcFile.size() == dstFile.size()) { + return false; + } + dstFileRemover.keepFile(); + return true; +} + +} // namespace test diff --git a/src/test/mixxxtest.h b/src/test/mixxxtest.h index 2b753f58e1..e743f2f0cc 100644 --- a/src/test/mixxxtest.h +++ b/src/test/mixxxtest.h @@ -1,5 +1,4 @@ -#ifndef MIXXXTEST_H -#define MIXXXTEST_H +#pragma once #include @@ -23,7 +22,7 @@ class MixxxTest : public testing::Test { // and destroying the QApplication multiple times in the same process. // http://stackoverflow.com/questions/14243858/qapplication-segfaults-in-googletest class ApplicationScope { - public: + public: ApplicationScope(int& argc, char** argv); ~ApplicationScope(); }; @@ -54,4 +53,33 @@ class MixxxTest : public testing::Test { UserSettingsPointer m_pConfig; }; -#endif /* MIXXXTEST_H */ +namespace test { + +/// Returns the full, non-empty file path on success. +/// +/// For the format of fileNameTemplate refer to QTemporaryFile. +QString generateTemporaryFileName(const QString& fileNameTemplate); + +/// Returns the full, non-empty file path on success. +/// +/// For the format of fileNameTemplate refer to QTemporaryFile. +QString createEmptyTemporaryFile(const QString& fileNameTemplate); + +bool copyFile(const QString& srcFileName, const QString& dstFileName); + +class FileRemover final { + public: + explicit FileRemover(const QString& fileName) + : m_fileName(fileName) { + } + ~FileRemover(); + + void keepFile() { + m_fileName = QString(); + } + + private: + QString m_fileName; +}; + +} // namespace test diff --git a/src/test/soundproxy_test.cpp b/src/test/soundproxy_test.cpp index 32e3825e25..5cbe5ffa34 100644 --- a/src/test/soundproxy_test.cpp +++ b/src/test/soundproxy_test.cpp @@ -1,10 +1,9 @@ #include #include -#include "test/mixxxtest.h" - -#include "sources/soundsourceproxy.h" #include "sources/audiosourcestereoproxy.h" +#include "sources/soundsourceproxy.h" +#include "test/mixxxtest.h" #include "track/trackmetadata.h" #include "util/samplebuffer.h" @@ -35,7 +34,7 @@ const CSAMPLE kMaxDecodingError = 0.01f; } // anonymous namespace -class SoundSourceProxyTest: public MixxxTest { +class SoundSourceProxyTest : public MixxxTest { protected: static QStringList getFileNameSuffixes() { QStringList availableFileNameSuffixes; @@ -178,14 +177,13 @@ TEST_F(SoundSourceProxyTest, open) { TEST_F(SoundSourceProxyTest, openEmptyFile) { for (const auto& fileNameSuffix: getFileNameSuffixes()) { - QTemporaryFile tempFile("emptyXXXXXX" + fileNameSuffix); - qDebug() << "Created testing to open empty file:" - << tempFile.fileName(); - tempFile.open(); - tempFile.close(); - - ASSERT_TRUE(SoundSourceProxy::isFileNameSupported(tempFile.fileName())); - auto pTrack = Track::newTemporary(tempFile.fileName()); + const auto tmpFileName = + test::createEmptyTemporaryFile("emptyXXXXXX" + fileNameSuffix); + const test::FileRemover tmpFileRemover(tmpFileName); + + ASSERT_TRUE(!tmpFileName.isEmpty()); + ASSERT_TRUE(SoundSourceProxy::isFileNameSupported(tmpFileName)); + auto pTrack = Track::newTemporary(tmpFileName); SoundSourceProxy proxy(pTrack); auto pAudioSource = proxy.openAudioSource(); diff --git a/src/test/taglibtest.cpp b/src/test/taglibtest.cpp index ba3464cc4b..d6066d8dac 100644 --- a/src/test/taglibtest.cpp +++ b/src/test/taglibtest.cpp @@ -1,68 +1,27 @@ -#include - #include -#include -#include #include #include "sources/metadatasourcetaglib.h" +#include "test/mixxxtest.h" namespace { -const QDir kTestDir(QDir::current().absoluteFilePath("src/test/id3-test-data")); +const QDir kTestDir = QDir::current().absoluteFilePath("src/test/id3-test-data"); -class TagLibTest : public testing::Test { - protected: - static QString generateTemporaryFileName(const QString& fileNameTemplate) { - QTemporaryFile tmpFile(fileNameTemplate); - // The file must be opened to create it and to obtain - // its file name! - tmpFile.open(); - const QString tmpFileName = tmpFile.fileName(); - DEBUG_ASSERT(!tmpFileName.isEmpty()); - return tmpFileName; - } - - static bool copyFile(const QString& srcFileName, const QString& dstFileName) { - QFile srcFile(srcFileName); - DEBUG_ASSERT(srcFile.exists()); - if (!srcFile.copy(dstFileName)) { - qWarning() - << srcFile.errorString() - << "- Failed to copy file" - << srcFileName - << "->" - << dstFileName; - return false; - } - QFile dstFile(dstFileName); - DEBUG_ASSERT(dstFile.exists()); - DEBUG_ASSERT(srcFile.size() == dstFile.size()); - return true; - } -}; +} // anonymous namespace -class FileRemover final { -public: - explicit FileRemover(const QString& fileName) - : m_fileName(fileName) { - } - ~FileRemover() { - QFile::remove(m_fileName); - } -private: - QString m_fileName; +class TagLibTest : public testing::Test { }; TEST_F(TagLibTest, WriteID3v2Tag) { // Generate a file name for the temporary file - const QString tmpFileName = generateTemporaryFileName("no_id3v1_mp3"); + const QString tmpFileName = test::generateTemporaryFileName("no_id3v1_mp3"); // Create the temporary file by copying an existing file - copyFile(kTestDir.absoluteFilePath("empty.mp3"), tmpFileName); + test::copyFile(kTestDir.absoluteFilePath("empty.mp3"), tmpFileName); // Ensure that the temporary file is removed after the test - FileRemover tmpFileRemover(tmpFileName); + test::FileRemover tmpFileRemover(tmpFileName); // Verify that the file has no tags { @@ -80,7 +39,8 @@ TEST_F(TagLibTest, WriteID3v2Tag) { trackMetadata.refTrackInfo().setTitle("title"); const auto exported = mixxx::MetadataSourceTagLib( - tmpFileName, mixxx::taglib::FileType::MP3).exportTrackMetadata(trackMetadata); + tmpFileName, mixxx::taglib::FileType::MP3) + .exportTrackMetadata(trackMetadata); ASSERT_EQ(mixxx::MetadataSource::ExportResult::Succeeded, exported.first); ASSERT_FALSE(exported.second.isNull()); @@ -99,7 +59,8 @@ TEST_F(TagLibTest, WriteID3v2Tag) { trackMetadata.refTrackInfo().setTitle("title2"); const auto exported2 = mixxx::MetadataSourceTagLib( - tmpFileName, mixxx::taglib::FileType::MP3).exportTrackMetadata(trackMetadata); + tmpFileName, mixxx::taglib::FileType::MP3) + .exportTrackMetadata(trackMetadata); ASSERT_EQ(mixxx::MetadataSource::ExportResult::Succeeded, exported.first); ASSERT_FALSE(exported.second.isNull()); @@ -112,5 +73,3 @@ TEST_F(TagLibTest, WriteID3v2Tag) { EXPECT_FALSE(mixxx::taglib::hasAPETag(mpegFile)); } } - -} // anonymous namespace -- cgit v1.2.3 From b9027a127cf84a60e5664db2b2bd3a52e7557bb3 Mon Sep 17 00:00:00 2001 From: Uwe Klotz Date: Sat, 19 Sep 2020 12:39:51 +0200 Subject: Use QTemporaryFile for creating empty files in tests --- src/test/mixxxtest.cpp | 19 +++++++++++-------- src/test/soundproxy_test.cpp | 1 + 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/test/mixxxtest.cpp b/src/test/mixxxtest.cpp index 1f96477bb7..4b350d33ba 100644 --- a/src/test/mixxxtest.cpp +++ b/src/test/mixxxtest.cpp @@ -91,7 +91,9 @@ QString generateTemporaryFileName(const QString& fileNameTemplate) { auto tmpFile = QTemporaryFile(fileNameTemplate); // The file must be opened to create it and to obtain // its file name! - tmpFile.open(); + VERIFY_OR_DEBUG_ASSERT(tmpFile.open()) { + return QString(); + } const auto tmpFileName = tmpFile.fileName(); DEBUG_ASSERT(!tmpFileName.isEmpty()); // The empty temporary file will be removed upon returning @@ -100,22 +102,23 @@ QString generateTemporaryFileName(const QString& fileNameTemplate) { } QString createEmptyTemporaryFile(const QString& fileNameTemplate) { - const auto fileName = generateTemporaryFileName(fileNameTemplate); - FileRemover fileRemover(fileName); - - QFile emptyFile(fileName); - VERIFY_OR_DEBUG_ASSERT(emptyFile.open(QIODevice::WriteOnly)) { + auto emptyFile = QTemporaryFile(fileNameTemplate); + VERIFY_OR_DEBUG_ASSERT(emptyFile.open()) { return QString(); } + + // Retrieving the file's name after opening it is required to actually + // create a named file on Linux. + const auto fileName = emptyFile.fileName(); + DEBUG_ASSERT(!fileName.isEmpty()); VERIFY_OR_DEBUG_ASSERT(emptyFile.exists()) { return QString(); } - emptyFile.close(); VERIFY_OR_DEBUG_ASSERT(emptyFile.size() == 0) { return QString(); } - fileRemover.keepFile(); + emptyFile.setAutoRemove(false); return fileName; } diff --git a/src/test/soundproxy_test.cpp b/src/test/soundproxy_test.cpp index 5cbe5ffa34..20849036b6 100644 --- a/src/test/soundproxy_test.cpp +++ b/src/test/soundproxy_test.cpp @@ -181,6 +181,7 @@ TEST_F(SoundSourceProxyTest, openEmptyFile) { test::createEmptyTemporaryFile("emptyXXXXXX" + fileNameSuffix); const test::FileRemover tmpFileRemover(tmpFileName); + ASSERT_TRUE(QFile::exists(tmpFileName)); ASSERT_TRUE(!tmpFileName.isEmpty()); ASSERT_TRUE(SoundSourceProxy::isFileNameSupported(tmpFileName)); auto pTrack = Track::newTemporary(tmpFileName); -- cgit v1.2.3 From b282c055b93494cbc63a29027ba961a7b1a6ae2a Mon Sep 17 00:00:00 2001 From: Uwe Klotz Date: Sat, 19 Sep 2020 12:41:44 +0200 Subject: Rename test utility namespace: test -> mixxxtest --- src/test/mixxxtest.cpp | 4 ++-- src/test/mixxxtest.h | 4 ++-- src/test/soundproxy_test.cpp | 4 ++-- src/test/taglibtest.cpp | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/test/mixxxtest.cpp b/src/test/mixxxtest.cpp index 4b350d33ba..b881b8dccb 100644 --- a/src/test/mixxxtest.cpp +++ b/src/test/mixxxtest.cpp @@ -76,7 +76,7 @@ void MixxxTest::saveAndReloadConfig() { ControlDoublePrivate::setUserConfig(m_pConfig); } -namespace test { +namespace mixxxtest { FileRemover::~FileRemover() { VERIFY_OR_DEBUG_ASSERT( @@ -146,4 +146,4 @@ bool copyFile(const QString& srcFileName, const QString& dstFileName) { return true; } -} // namespace test +} // namespace mixxxtest diff --git a/src/test/mixxxtest.h b/src/test/mixxxtest.h index e743f2f0cc..92c1df7e95 100644 --- a/src/test/mixxxtest.h +++ b/src/test/mixxxtest.h @@ -53,7 +53,7 @@ class MixxxTest : public testing::Test { UserSettingsPointer m_pConfig; }; -namespace test { +namespace mixxxtest { /// Returns the full, non-empty file path on success. /// @@ -82,4 +82,4 @@ class FileRemover final { QString m_fileName; }; -} // namespace test +} // namespace mixxxtest diff --git a/src/test/soundproxy_test.cpp b/src/test/soundproxy_test.cpp index 20849036b6..e6eb9b79e2 100644 --- a/src/test/soundproxy_test.cpp +++ b/src/test/soundproxy_test.cpp @@ -178,8 +178,8 @@ TEST_F(SoundSourceProxyTest, open) { TEST_F(SoundSourceProxyTest, openEmptyFile) { for (const auto& fileNameSuffix: getFileNameSuffixes()) { const auto tmpFileName = - test::createEmptyTemporaryFile("emptyXXXXXX" + fileNameSuffix); - const test::FileRemover tmpFileRemover(tmpFileName); + mixxxtest::createEmptyTemporaryFile("emptyXXXXXX" + fileNameSuffix); + const mixxxtest::FileRemover tmpFileRemover(tmpFileName); ASSERT_TRUE(QFile::exists(tmpFileName)); ASSERT_TRUE(!tmpFileName.isEmpty()); diff --git a/src/test/taglibtest.cpp b/src/test/taglibtest.cpp index d6066d8dac..8a980aaa2d 100644 --- a/src/test/taglibtest.cpp +++ b/src/test/taglibtest.cpp @@ -15,13 +15,13 @@ class TagLibTest : public testing::Test { TEST_F(TagLibTest, WriteID3v2Tag) { // Generate a file name for the temporary file - const QString tmpFileName = test::generateTemporaryFileName("no_id3v1_mp3"); + const QString tmpFileName = mixxxtest::generateTemporaryFileName("no_id3v1_mp3"); // Create the temporary file by copying an existing file - test::copyFile(kTestDir.absoluteFilePath("empty.mp3"), tmpFileName); + mixxxtest::copyFile(kTestDir.absoluteFilePath("empty.mp3"), tmpFileName); // Ensure that the temporary file is removed after the test - test::FileRemover tmpFileRemover(tmpFileName); + mixxxtest::FileRemover tmpFileRemover(tmpFileName); // Verify that the file has no tags { -- cgit v1.2.3 From 7c04f29fa2cc85340b060a04a47996c5b8fd4763 Mon Sep 17 00:00:00 2001 From: Jan Holthuis Date: Sat, 26 Sep 2020 02:44:08 +0200 Subject: library/dao/trackdao: Fix undeclared pTrack variable This causes a build error and was probably introduced by d2f3d77fae2074dc6e8d3baed4bda42bfe49a418. --- src/library/dao/trackdao.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/library/dao/trackdao.cpp b/src/library/dao/trackdao.cpp index 4af5ebe93e..12d9cca401 100644 --- a/src/library/dao/trackdao.cpp +++ b/src/library/dao/trackdao.cpp @@ -1238,7 +1238,7 @@ TrackPointer TrackDAO::getTrackFromDB(TrackId trackId) const { const QString trackLocation(queryRecord.value(0).toString()); GlobalTrackCacheResolver cacheResolver(QFileInfo(trackLocation), trackId); - pTrack = cacheResolver.getTrack(); + TrackPointer pTrack = cacheResolver.getTrack(); if (cacheResolver.getLookupResult() == GlobalTrackCacheLookupResult::Hit) { // Due to race conditions the track might have been reloaded // from the database in the meantime. In this case we abort -- cgit v1.2.3 From c763ea7d43218eadee74602ef9434d67c2b32f2b Mon Sep 17 00:00:00 2001 From: Uwe Klotz Date: Sun, 27 Sep 2020 09:11:35 +0200 Subject: BaseSqlTableModel: Delete redundant override --- src/library/basesqltablemodel.cpp | 11 ----------- src/library/basesqltablemodel.h | 4 ---- src/library/basetracktablemodel.cpp | 5 ++--- 3 files changed, 2 insertions(+), 18 deletions(-) diff --git a/src/library/basesqltablemodel.cpp b/src/library/basesqltablemodel.cpp index 72209d5a83..116dfbaf31 100644 --- a/src/library/basesqltablemodel.cpp +++ b/src/library/basesqltablemodel.cpp @@ -617,17 +617,6 @@ QVariant BaseSqlTableModel::rawValue( return m_trackSource->data(trackId, trackSourceColumn); } -QVariant BaseSqlTableModel::roleValue( - const QModelIndex& index, - QVariant&& rawValue, - int role) const { - if (role == Qt::DisplayRole && - index.column() == fieldIndex(ColumnCache::COLUMN_PLAYLISTTRACKSTABLE_DATETIMEADDED)) { - return mixxx::localDateTimeFromUtc(mixxx::convertVariantToDateTime(rawValue)); - } - return BaseTrackTableModel::roleValue(index, std::move(rawValue), role); -} - bool BaseSqlTableModel::setTrackValueForColumn( const TrackPointer& pTrack, int column, diff --git a/src/library/basesqltablemodel.h b/src/library/basesqltablemodel.h index 9dcfb26f90..3a5e3df2b6 100644 --- a/src/library/basesqltablemodel.h +++ b/src/library/basesqltablemodel.h @@ -75,10 +75,6 @@ class BaseSqlTableModel : public BaseTrackTableModel { /////////////////////////////////////////////////////////////////////////// QVariant rawValue( const QModelIndex& index) const override; - QVariant roleValue( - const QModelIndex& index, - QVariant&& rawValue, - int role) const override; bool setTrackValueForColumn( const TrackPointer& pTrack, diff --git a/src/library/basetracktablemodel.cpp b/src/library/basetracktablemodel.cpp index 6d958f1f68..e7790b2434 100644 --- a/src/library/basetracktablemodel.cpp +++ b/src/library/basetracktablemodel.cpp @@ -500,9 +500,8 @@ QVariant BaseTrackTableModel::roleValue( return QVariant(); } return QString("(%1)").arg(rawValue.toInt()); - } else if (column == fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_DATETIMEADDED)) { - return mixxx::localDateTimeFromUtc(mixxx::convertVariantToDateTime(rawValue)); - } else if (column == fieldIndex(ColumnCache::COLUMN_PLAYLISTTRACKSTABLE_DATETIMEADDED)) { + } else if (column == fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_DATETIMEADDED) || + column == fieldIndex(ColumnCache::COLUMN_PLAYLISTTRACKSTABLE_DATETIMEADDED)) { return mixxx::localDateTimeFromUtc(mixxx::convertVariantToDateTime(rawValue)); } else if (column == fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_BPM)) { bool ok; -- cgit v1.2.3 From 119f3f2f0acd006e7aac800de6ea55ef71d6f3a2 Mon Sep 17 00:00:00 2001 From: Uwe Klotz Date: Sun, 27 Sep 2020 22:24:21 +0200 Subject: Externalize forward declarations for Track object ...to reduce compile time dependencies --- src/library/externaltrackcollection.h | 4 ++-- src/mixxx.h | 2 +- src/sources/audiosourcetrackproxy.h | 2 +- src/sources/soundsourceproxy.h | 5 +++-- src/test/beatgridtest.cpp | 2 ++ src/test/beatmaptest.cpp | 4 +++- src/test/globaltrackcache_test.cpp | 7 +++---- src/test/soundproxy_test.cpp | 2 +- src/track/beatfactory.h | 2 +- src/track/beatgrid.cpp | 4 +++- src/track/beatgrid.h | 4 ++-- src/track/beatmap.cpp | 8 +++++--- src/track/beatmap.h | 4 ++-- src/track/cue.h | 2 +- src/track/globaltrackcache.cpp | 1 + src/track/globaltrackcache.h | 4 ++-- src/track/keyfactory.h | 6 +++--- src/track/track.h | 17 +---------------- src/track/track_decl.h | 21 +++++++++++++++++++++ src/track/trackiterator.h | 3 ++- src/util/dnd.h | 3 ++- src/util/itemiterator.h | 1 + src/waveform/renderers/glvsynctestrenderer.cpp | 3 ++- src/waveform/renderers/glwaveformrendererrgb.cpp | 7 ++++--- .../renderers/glwaveformrenderersimplesignal.cpp | 1 + src/waveform/renderers/qtvsynctestrenderer.cpp | 5 +++-- src/waveform/renderers/waveformwidgetrenderer.cpp | 1 + src/waveform/renderers/waveformwidgetrenderer.h | 3 +-- src/widget/wtrackmenu.h | 2 ++ 29 files changed, 77 insertions(+), 53 deletions(-) create mode 100644 src/track/track_decl.h diff --git a/src/library/externaltrackcollection.h b/src/library/externaltrackcollection.h index 92b24ae6b0..64aaa794b4 100644 --- a/src/library/externaltrackcollection.h +++ b/src/library/externaltrackcollection.h @@ -4,12 +4,12 @@ #include #include -#include "preferences/usersettings.h" #include "library/relocatedtrack.h" +#include "preferences/usersettings.h" +#include "track/track_decl.h" class Library; class LibraryFeature; -class Track; // This interface and base class enable to synchronize external // track collections with Mixxx. It provides methods that will diff --git a/src/mixxx.h b/src/mixxx.h index 7fb3c2a683..dea2bc6bfa 100644 --- a/src/mixxx.h +++ b/src/mixxx.h @@ -9,7 +9,7 @@ #include "preferences/constants.h" #include "preferences/usersettings.h" #include "soundio/sounddeviceerror.h" -#include "track/track.h" +#include "track/track_decl.h" #include "util/cmdlineargs.h" #include "util/db/dbconnectionpool.h" #include "util/parented_ptr.h" diff --git a/src/sources/audiosourcetrackproxy.h b/src/sources/audiosourcetrackproxy.h index 766cdcf9f1..dca3f58b49 100644 --- a/src/sources/audiosourcetrackproxy.h +++ b/src/sources/audiosourcetrackproxy.h @@ -1,7 +1,7 @@ #pragma once #include "sources/audiosourceproxy.h" -#include "track/track.h" +#include "track/track_decl.h" namespace mixxx { diff --git a/src/sources/soundsourceproxy.h b/src/sources/soundsourceproxy.h index 43d2dc5b97..10f14d53a9 100644 --- a/src/sources/soundsourceproxy.h +++ b/src/sources/soundsourceproxy.h @@ -1,8 +1,9 @@ #pragma once -#include "track/track.h" - #include "sources/soundsourceproviderregistry.h" +#include "track/track_decl.h" +#include "track/trackfile.h" +#include "util/sandbox.h" // Creates sound sources for tracks. Only intended to be used // in a narrow scope and not shareable between multiple threads! diff --git a/src/test/beatgridtest.cpp b/src/test/beatgridtest.cpp index d8c1f88c48..780aeb11b9 100644 --- a/src/test/beatgridtest.cpp +++ b/src/test/beatgridtest.cpp @@ -1,7 +1,9 @@ #include + #include #include "track/beatgrid.h" +#include "track/track.h" #include "util/memory.h" using namespace mixxx; diff --git a/src/test/beatmaptest.cpp b/src/test/beatmaptest.cpp index 4692fc191d..5cbafa71d3 100644 --- a/src/test/beatmaptest.cpp +++ b/src/test/beatmaptest.cpp @@ -1,8 +1,10 @@ #include +#include + #include #include "track/beatmap.h" -#include "util/memory.h" +#include "track/track.h" using namespace mixxx; diff --git a/src/test/globaltrackcache_test.cpp b/src/test/globaltrackcache_test.cpp index fb7e7ceec0..7e98b4bae9 100644 --- a/src/test/globaltrackcache_test.cpp +++ b/src/test/globaltrackcache_test.cpp @@ -1,12 +1,11 @@ +#include "track/globaltrackcache.h" + #include #include - #include #include "test/mixxxtest.h" - -#include "track/globaltrackcache.h" - +#include "track/track.h" namespace { diff --git a/src/test/soundproxy_test.cpp b/src/test/soundproxy_test.cpp index e6eb9b79e2..9511d28f8d 100644 --- a/src/test/soundproxy_test.cpp +++ b/src/test/soundproxy_test.cpp @@ -4,7 +4,7 @@ #include "sources/audiosourcestereoproxy.h" #include "sources/soundsourceproxy.h" #include "test/mixxxtest.h" -#include "track/trackmetadata.h" +#include "track/track.h" #include "util/samplebuffer.h" namespace { diff --git a/src/track/beatfactory.h b/src/track/beatfactory.h index cb25021f19..20ac6fe71e 100644 --- a/src/track/beatfactory.h +++ b/src/track/beatfactory.h @@ -4,7 +4,7 @@ #include #include "track/beats.h" -#include "track/track.h" +#include "track/track_decl.h" class BeatFactory { public: diff --git a/src/track/beatgrid.cpp b/src/track/beatgrid.cpp index 815314f736..230cd3ce86 100644 --- a/src/track/beatgrid.cpp +++ b/src/track/beatgrid.cpp @@ -1,7 +1,9 @@ +#include "track/beatgrid.h" + #include #include -#include "track/beatgrid.h" +#include "track/track.h" #include "util/math.h" static const int kFrameSize = 2; diff --git a/src/track/beatgrid.h b/src/track/beatgrid.h index f1f09faf28..f379decc49 100644 --- a/src/track/beatgrid.h +++ b/src/track/beatgrid.h @@ -3,9 +3,9 @@ #include -#include "track/track.h" -#include "track/beats.h" #include "proto/beats.pb.h" +#include "track/beats.h" +#include "track/track_decl.h" #define BEAT_GRID_1_VERSION "BeatGrid-1.0" #define BEAT_GRID_2_VERSION "BeatGrid-2.0" diff --git a/src/track/beatmap.cpp b/src/track/beatmap.cpp index 661f79e9f9..89437441ad 100644 --- a/src/track/beatmap.cpp +++ b/src/track/beatmap.cpp @@ -5,13 +5,15 @@ * Author: vittorio */ -#include +#include "track/beatmap.h" + +#include #include #include -#include +#include -#include "track/beatmap.h" #include "track/beatutils.h" +#include "track/track.h" #include "util/math.h" using mixxx::track::io::Beat; diff --git a/src/track/beatmap.h b/src/track/beatmap.h index 5d1ce7df57..7f85b449bb 100644 --- a/src/track/beatmap.h +++ b/src/track/beatmap.h @@ -10,9 +10,9 @@ #include -#include "track/track.h" -#include "track/beats.h" #include "proto/beats.pb.h" +#include "track/beats.h" +#include "track/track_decl.h" #define BEAT_MAP_VERSION "BeatMap-1.0" diff --git a/src/track/cue.h b/src/track/cue.h index d7c6d36f9a..d4a8fbb497 100644 --- a/src/track/cue.h +++ b/src/track/cue.h @@ -6,13 +6,13 @@ #include "audio/types.h" #include "track/cueinfo.h" +#include "track/track_decl.h" #include "track/trackid.h" #include "util/color/rgbcolor.h" #include "util/memory.h" class CuePosition; class CueDAO; -class Track; class Cue : public QObject { Q_OBJECT diff --git a/src/track/globaltrackcache.cpp b/src/track/globaltrackcache.cpp index e2da4c0456..58637ffbcd 100644 --- a/src/track/globaltrackcache.cpp +++ b/src/track/globaltrackcache.cpp @@ -2,6 +2,7 @@ #include +#include "track/track.h" #include "util/assert.h" #include "util/logger.h" #include "util/thread_affinity.h" diff --git a/src/track/globaltrackcache.h b/src/track/globaltrackcache.h index 6266a230ee..d66c7f3a54 100644 --- a/src/track/globaltrackcache.h +++ b/src/track/globaltrackcache.h @@ -4,9 +4,9 @@ #include #include -#include "track/track.h" +#include "track/track_decl.h" #include "track/trackref.h" - +#include "util/sandbox.h" // forward declaration(s) class GlobalTrackCache; diff --git a/src/track/keyfactory.h b/src/track/keyfactory.h index fbd64bee66..36811dc593 100644 --- a/src/track/keyfactory.h +++ b/src/track/keyfactory.h @@ -2,12 +2,12 @@ #define KEYFACTORY_H #include -#include #include +#include -#include "track/keys.h" #include "proto/keys.pb.h" -#include "track/track.h" +#include "track/keys.h" +#include "track/track_decl.h" class KeyFactory { public: diff --git a/src/track/track.h b/src/track/track.h index 2a3af32469..6cf9905d34 100644 --- a/src/track/track.h +++ b/src/track/track.h @@ -10,27 +10,12 @@ #include "track/beats.h" #include "track/cue.h" #include "track/cueinfoimporter.h" +#include "track/track_decl.h" #include "track/trackfile.h" #include "track/trackrecord.h" -#include "util/memory.h" #include "util/sandbox.h" #include "waveform/waveform.h" -// forward declaration(s) -class Track; - -typedef std::shared_ptr TrackPointer; -typedef std::weak_ptr TrackWeakPointer; -typedef QList TrackPointerList; - -Q_DECLARE_METATYPE(TrackPointer); - -enum class ExportTrackMetadataResult { - Succeeded, - Failed, - Skipped, -}; - class Track : public QObject { Q_OBJECT diff --git a/src/track/track_decl.h b/src/track/track_decl.h new file mode 100644 index 0000000000..12a03187cc --- /dev/null +++ b/src/track/track_decl.h @@ -0,0 +1,21 @@ +#pragma once + +/// Forward declarations for Track objects and their pointers + +#include +#include +#include + +class Track; + +typedef std::shared_ptr TrackPointer; +typedef std::weak_ptr TrackWeakPointer; +typedef QList TrackPointerList; + +enum class ExportTrackMetadataResult { + Succeeded, + Failed, + Skipped, +}; + +Q_DECLARE_METATYPE(TrackPointer); diff --git a/src/track/trackiterator.h b/src/track/trackiterator.h index f95c5e6efd..9d6bc6fec1 100644 --- a/src/track/trackiterator.h +++ b/src/track/trackiterator.h @@ -5,7 +5,8 @@ #include -#include "track/track.h" +#include "track/track_decl.h" +#include "track/trackid.h" #include "util/itemiterator.h" namespace mixxx { diff --git a/src/util/dnd.h b/src/util/dnd.h index b437ab3652..77d2b5a077 100644 --- a/src/util/dnd.h +++ b/src/util/dnd.h @@ -8,7 +8,8 @@ #include #include "preferences/usersettings.h" -#include "track/track.h" +#include "track/track_decl.h" +#include "track/trackfile.h" #include "widget/trackdroptarget.h" class DragAndDropHelper final { diff --git a/src/util/itemiterator.h b/src/util/itemiterator.h index 5fa0825b63..c43b675d75 100644 --- a/src/util/itemiterator.h +++ b/src/util/itemiterator.h @@ -7,6 +7,7 @@ #include #include "util/assert.h" +#include "util/optional.h" namespace mixxx { diff --git a/src/waveform/renderers/glvsynctestrenderer.cpp b/src/waveform/renderers/glvsynctestrenderer.cpp index d1f06be01b..dc5e42e966 100644 --- a/src/waveform/renderers/glvsynctestrenderer.cpp +++ b/src/waveform/renderers/glvsynctestrenderer.cpp @@ -1,10 +1,11 @@ #include "waveform/renderers/glvsynctestrenderer.h" #if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) +#include "track/track.h" +#include "util/performancetimer.h" #include "waveform/renderers/waveformwidgetrenderer.h" #include "waveform/waveform.h" #include "waveform/waveformwidgetfactory.h" -#include "util/performancetimer.h" GLVSyncTestRenderer::GLVSyncTestRenderer( WaveformWidgetRenderer* waveformWidgetRenderer) diff --git a/src/waveform/renderers/glwaveformrendererrgb.cpp b/src/waveform/renderers/glwaveformrendererrgb.cpp index 7620dae200..52a206eb4c 100644 --- a/src/waveform/renderers/glwaveformrendererrgb.cpp +++ b/src/waveform/renderers/glwaveformrendererrgb.cpp @@ -1,12 +1,13 @@ #include "waveform/renderers/glwaveformrendererrgb.h" #if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) -#include "waveformwidgetrenderer.h" +#include "track/track.h" +#include "util/math.h" #include "waveform/waveform.h" #include "waveform/waveformwidgetfactory.h" -#include "widget/wwidget.h" +#include "waveformwidgetrenderer.h" #include "widget/wskincolor.h" -#include "util/math.h" +#include "widget/wwidget.h" GLWaveformRendererRGB::GLWaveformRendererRGB( WaveformWidgetRenderer* waveformWidgetRenderer) diff --git a/src/waveform/renderers/glwaveformrenderersimplesignal.cpp b/src/waveform/renderers/glwaveformrenderersimplesignal.cpp index 3a161f74f9..370b35c5b9 100644 --- a/src/waveform/renderers/glwaveformrenderersimplesignal.cpp +++ b/src/waveform/renderers/glwaveformrenderersimplesignal.cpp @@ -1,6 +1,7 @@ #include "waveform/renderers/glwaveformrenderersimplesignal.h" #if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) +#include "track/track.h" #include "util/math.h" #include "waveform/waveform.h" #include "waveform/waveformwidgetfactory.h" diff --git a/src/waveform/renderers/qtvsynctestrenderer.cpp b/src/waveform/renderers/qtvsynctestrenderer.cpp index 8357703613..340a3f63b5 100644 --- a/src/waveform/renderers/qtvsynctestrenderer.cpp +++ b/src/waveform/renderers/qtvsynctestrenderer.cpp @@ -1,10 +1,11 @@ #include "waveform/renderers/qtvsynctestrenderer.h" +#include "track/track.h" +#include "util/painterscope.h" +#include "util/performancetimer.h" #include "waveform/renderers/waveformwidgetrenderer.h" #include "waveform/waveform.h" #include "waveform/waveformwidgetfactory.h" -#include "util/painterscope.h" -#include "util/performancetimer.h" QtVSyncTestRenderer::QtVSyncTestRenderer( WaveformWidgetRenderer* waveformWidgetRenderer) diff --git a/src/waveform/renderers/waveformwidgetrenderer.cpp b/src/waveform/renderers/waveformwidgetrenderer.cpp index 6483c23914..323c962a84 100644 --- a/src/waveform/renderers/waveformwidgetrenderer.cpp +++ b/src/waveform/renderers/waveformwidgetrenderer.cpp @@ -5,6 +5,7 @@ #include "control/controlobject.h" #include "control/controlproxy.h" +#include "track/track.h" #include "util/math.h" #include "util/performancetimer.h" #include "waveform/visualplayposition.h" diff --git a/src/waveform/renderers/waveformwidgetrenderer.h b/src/waveform/renderers/waveformwidgetrenderer.h index 6be11dca9d..0f28a12fe6 100644 --- a/src/waveform/renderers/waveformwidgetrenderer.h +++ b/src/waveform/renderers/waveformwidgetrenderer.h @@ -6,7 +6,7 @@ #include #include -#include "track/track.h" +#include "track/track_decl.h" #include "util/class.h" #include "util/performancetimer.h" #include "waveform/renderers/waveformmark.h" @@ -15,7 +15,6 @@ //#define WAVEFORMWIDGETRENDERER_DEBUG -class Track; class ControlProxy; class VisualPlayPosition; class VSyncThread; diff --git a/src/widget/wtrackmenu.h b/src/widget/wtrackmenu.h index a822804516..cd898fa5c1 100644 --- a/src/widget/wtrackmenu.h +++ b/src/widget/wtrackmenu.h @@ -5,10 +5,12 @@ #include #include +#include "library/coverart.h" #include "library/dao/playlistdao.h" #include "library/trackprocessing.h" #include "preferences/usersettings.h" #include "track/trackref.h" +#include "util/color/rgbcolor.h" class ControlProxy; class DlgTagFetcher; -- cgit v1.2.3 From 5e80ba827f3350f45a818940604bab0eeb9c4aae Mon Sep 17 00:00:00 2001 From: Edward Millen Date: Mon, 28 Sep 2020 16:41:18 +0100 Subject: Fix hotcue preview playback behaviour --- src/engine/controls/cuecontrol.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/controls/cuecontrol.cpp b/src/engine/controls/cuecontrol.cpp index b885589059..e647e773b1 100644 --- a/src/engine/controls/cuecontrol.cpp +++ b/src/engine/controls/cuecontrol.cpp @@ -823,7 +823,6 @@ void CueControl::hotcueActivatePreview(HotcueControl* pControl, double v) { m_iCurrentlyPreviewingHotcues++; double position = pCue->getPosition(); m_bypassCueSetByPlay = true; - m_pPlay->set(1.0); pControl->setPreviewing(true); pControl->setPreviewingPosition(position); @@ -831,6 +830,7 @@ void CueControl::hotcueActivatePreview(HotcueControl* pControl, double v) { lock.unlock(); seekAbs(position); + m_pPlay->set(1.0); } } else if (m_iCurrentlyPreviewingHotcues) { // This is a activate release and we are previewing at least one -- cgit v1.2.3 From a9d770bd2c214be727eee466e4f7e7c3c8311e94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= Date: Mon, 28 Sep 2020 16:57:20 +0200 Subject: replace #include "track/track.h" by "track_decl.h" in all header files --- src/analyzer/analyzer.h | 2 +- src/analyzer/analyzerkey.cpp | 1 + src/analyzer/analyzerkey.h | 2 +- src/analyzer/analyzersilence.cpp | 1 + src/analyzer/analyzerthread.cpp | 7 ++----- src/analyzer/analyzerthread.h | 6 +++--- src/dialog/dlgreplacecuecolor.cpp | 1 + src/encoder/encoderffmpegcore.h | 7 +++---- src/encoder/encodersndfileflac.h | 1 - src/encoder/encodervorbis.h | 6 ++++-- src/encoder/encoderwave.h | 4 ++-- src/engine/cachingreader/cachingreader.h | 2 +- src/engine/cachingreader/cachingreaderworker.cpp | 1 + src/engine/cachingreader/cachingreaderworker.h | 7 +++---- src/engine/controls/bpmcontrol.cpp | 1 + src/engine/controls/bpmcontrol.h | 3 ++- src/engine/controls/clockcontrol.cpp | 5 +++-- src/engine/controls/clockcontrol.h | 5 ++--- src/engine/controls/cuecontrol.cpp | 1 + src/engine/controls/cuecontrol.h | 3 ++- src/engine/controls/enginecontrol.h | 3 ++- src/engine/controls/keycontrol.cpp | 1 + src/engine/controls/keycontrol.h | 1 + src/engine/controls/loopingcontrol.cpp | 2 -- src/engine/controls/loopingcontrol.h | 2 +- src/engine/controls/quantizecontrol.cpp | 6 ++++-- src/engine/controls/quantizecontrol.h | 5 ++--- src/engine/controls/vinylcontrolcontrol.cpp | 4 ++-- src/engine/controls/vinylcontrolcontrol.h | 6 +++--- src/engine/enginebuffer.h | 11 ++++++----- src/engine/sidechain/enginerecord.cpp | 4 ++-- src/engine/sidechain/enginerecord.h | 6 +++--- src/engine/sidechain/shoutconnection.h | 11 ++++++----- src/engine/sync/synccontrol.cpp | 1 + src/library/autodj/autodjprocessor.h | 6 +++--- src/library/autodj/dlgautodj.h | 12 ++++++------ src/library/basecoverartdelegate.cpp | 4 ++-- src/library/basecoverartdelegate.h | 3 ++- src/library/baseplaylistfeature.h | 2 +- src/library/basetrackcache.cpp | 9 +++++---- src/library/basetrackcache.h | 8 ++++---- src/library/basetracktablemodel.h | 1 + src/library/browse/browsetablemodel.cpp | 1 + src/library/browse/browsethread.cpp | 7 +++---- src/library/coverart.cpp | 1 + src/library/coverartcache.h | 2 +- src/library/coverartutils.cpp | 1 + src/library/coverartutils.h | 8 ++++---- src/library/crate/cratefeature.h | 15 ++++++--------- src/library/dao/autodjcratesdao.cpp | 1 + src/library/dao/autodjcratesdao.h | 5 +++-- src/library/dao/cuedao.cpp | 1 - src/library/dao/cuedao.h | 3 ++- src/library/dlgcoverartfullsize.h | 8 ++++---- src/library/dlgtagfetcher.cpp | 1 + src/library/dlgtagfetcher.h | 2 +- src/library/dlgtrackinfo.cpp | 2 +- src/library/dlgtrackinfo.h | 5 ++++- src/library/export/trackexportdlg.h | 9 ++++----- src/library/export/trackexportwizard.h | 6 +++--- src/library/export/trackexportworker.cpp | 4 +++- src/library/export/trackexportworker.h | 4 +++- src/library/externaltrackcollection.h | 2 +- src/library/library.h | 7 ++++--- src/library/libraryfeature.h | 14 +++++++------- src/library/previewbuttondelegate.h | 4 ++-- src/library/recording/dlgrecording.h | 2 +- src/library/scanner/libraryscanner.h | 19 ++++++++++--------- src/library/scanner/scannerglobal.h | 10 ++++++---- src/library/scanner/scannertask.h | 1 - src/library/searchquery.cpp | 12 ++++++------ src/library/searchquery.h | 11 +++++------ src/library/searchqueryparser.h | 1 - src/library/trackcollectionmanager.cpp | 4 ++-- src/library/trackloader.h | 2 +- src/library/trackmodel.h | 2 +- src/mixer/basetrackplayer.h | 4 +++- src/mixer/playerinfo.cpp | 1 + src/mixer/playerinfo.h | 6 +++--- src/mixer/playermanager.h | 5 +++-- src/musicbrainz/chromaprinter.cpp | 7 ++++--- src/musicbrainz/chromaprinter.h | 2 +- src/musicbrainz/tagfetcher.cpp | 1 + src/musicbrainz/tagfetcher.h | 2 +- src/preferences/broadcastsettings.h | 1 - src/preferences/replaygainsettings.cpp | 2 ++ src/preferences/replaygainsettings.h | 2 +- src/test/analyzersilence_test.cpp | 7 ++++--- src/test/bpmcontrol_test.cpp | 1 - src/test/directorydaotest.cpp | 14 +++++++------- src/test/searchqueryparsertest.cpp | 7 ++++--- src/test/signalpathtest.h | 1 + src/test/soundproxy_test.cpp | 1 + src/test/trackdao_test.cpp | 3 ++- src/test/trackexport_test.cpp | 2 ++ src/test/trackexport_test.h | 3 --- src/track/beatfactory.h | 3 ++- src/track/beatgrid.h | 3 ++- src/track/beatmap.h | 3 ++- src/track/cue.h | 2 +- src/track/keyfactory.h | 1 - src/util/dnd.cpp | 1 + src/waveform/renderers/glslwaveformrenderersignal.cpp | 1 + src/waveform/renderers/glslwaveformrenderersignal.h | 2 +- src/waveform/renderers/waveformrenderbeat.cpp | 1 - src/waveform/renderers/waveformrendererhsv.cpp | 1 - src/waveform/renderers/waveformrendererrgb.cpp | 1 - src/waveform/widgets/waveformwidgetabstract.h | 1 - src/widget/wcoverart.h | 1 - src/widget/wcoverartlabel.cpp | 1 + src/widget/wcoverartlabel.h | 4 +++- src/widget/wcoverartmenu.h | 1 - src/widget/wcuemenupopup.cpp | 1 + src/widget/wcuemenupopup.h | 2 +- src/widget/whotcuebutton.cpp | 1 + src/widget/wlibrarytableview.h | 6 +++--- src/widget/woverview.h | 3 ++- src/widget/wspinny.h | 6 +++--- src/widget/wstarrating.cpp | 10 ++++++---- src/widget/wstarrating.h | 9 ++++----- src/widget/wtrackproperty.cpp | 6 ++++-- src/widget/wtrackproperty.h | 3 ++- src/widget/wtracktableview.h | 1 - src/widget/wtracktext.cpp | 6 ++++-- src/widget/wtracktext.h | 3 ++- src/widget/wtrackwidgetgroup.cpp | 1 + src/widget/wtrackwidgetgroup.h | 3 ++- src/widget/wwaveformviewer.h | 2 +- 128 files changed, 278 insertions(+), 235 deletions(-) diff --git a/src/analyzer/analyzer.h b/src/analyzer/analyzer.h index 85d460b8a5..2704717aa5 100644 --- a/src/analyzer/analyzer.h +++ b/src/analyzer/analyzer.h @@ -11,7 +11,7 @@ * -- Adam */ -#include "track/track.h" +#include "track/track_decl.h" class Analyzer { public: diff --git a/src/analyzer/analyzerkey.cpp b/src/analyzer/analyzerkey.cpp index acd446acde..38e3bc2c89 100644 --- a/src/analyzer/analyzerkey.cpp +++ b/src/analyzer/analyzerkey.cpp @@ -10,6 +10,7 @@ #include "analyzer/plugins/analyzerqueenmarykey.h" #include "proto/keys.pb.h" #include "track/keyfactory.h" +#include "track/track.h" // static QList AnalyzerKey::availablePlugins() { diff --git a/src/analyzer/analyzerkey.h b/src/analyzer/analyzerkey.h index bf2391969c..52ba45b88b 100644 --- a/src/analyzer/analyzerkey.h +++ b/src/analyzer/analyzerkey.h @@ -9,7 +9,7 @@ #include "analyzer/plugins/analyzerplugin.h" #include "preferences/keydetectionsettings.h" #include "preferences/usersettings.h" -#include "track/track.h" +#include "track/track_decl.h" #include "util/memory.h" class AnalyzerKey : public Analyzer { diff --git a/src/analyzer/analyzersilence.cpp b/src/analyzer/analyzersilence.cpp index f529b4322a..c07cde2e53 100644 --- a/src/analyzer/analyzersilence.cpp +++ b/src/analyzer/analyzersilence.cpp @@ -2,6 +2,7 @@ #include "anal