No need to full rescan when changing some settings

This commit is contained in:
emeric
2025-04-07 22:48:10 +02:00
parent 15c5f0b89b
commit 75cbbde598
41 changed files with 331 additions and 163 deletions
+8 -1
View File
@@ -35,7 +35,7 @@ namespace lms::db
{
namespace
{
static constexpr Version LMS_DATABASE_VERSION{ 86 };
static constexpr Version LMS_DATABASE_VERSION{ 87 };
}
VersionInfo::VersionInfo()
@@ -1178,6 +1178,12 @@ FROM tracklist)");
utils::executeCommand(*session.getDboSession(), "UPDATE scan_settings SET scan_version = scan_version + 1");
}
void migrateFromV86(Session& session)
{
utils::executeCommand(*session.getDboSession(), "ALTER TABLE scan_settings ADD COLUMN name TEXT NON NULL DEFAULT('')");
utils::executeCommand(*session.getDboSession(), "ALTER TABLE scan_settings RENAME COLUMN scan_version TO audio_scan_version");
}
bool doDbMigration(Session& session)
{
constexpr std::string_view outdatedMsg{ "Outdated database, please rebuild it (delete the .db file and restart)" };
@@ -1240,6 +1246,7 @@ FROM tracklist)");
{ 83, migrateFromV83 },
{ 84, migrateFromV84 },
{ 85, migrateFromV85 },
{ 86, migrateFromV86 },
};
bool migrationPerformed{};
+15 -20
View File
@@ -26,24 +26,25 @@
#include "database/Session.hpp"
#include "Utils.hpp"
#include "traits/StringViewTraits.hpp"
namespace lms::db
{
void ScanSettings::init(Session& session)
ScanSettings::ScanSettings(std::string_view name)
: _name{ name }
{
session.checkWriteTransaction();
if (pointer settings{ get(session) })
return;
session.getDboSession()->add(std::make_unique<ScanSettings>());
}
ScanSettings::pointer ScanSettings::get(Session& session)
ScanSettings::pointer ScanSettings::create(Session& session, std::string_view name)
{
return session.getDboSession()->add(std::unique_ptr<ScanSettings>(new ScanSettings{ name }));
}
ScanSettings::pointer ScanSettings::get(Session& session, std::string_view name)
{
session.checkReadTransaction();
return utils::fetchQuerySingleResult(session.getDboSession()->find<ScanSettings>());
return utils::fetchQuerySingleResult(session.getDboSession()->find<ScanSettings>().where("name = ?").bind(name));
}
std::vector<std::string_view> ScanSettings::getExtraTagsToScan() const
@@ -69,7 +70,7 @@ namespace lms::db
{
std::string newTagsToScan{ core::stringUtils::joinStrings(extraTags, ";") };
if (newTagsToScan != _extraTagsToScan)
incScanVersion();
incAudioScanVersion();
_extraTagsToScan = std::move(newTagsToScan);
}
@@ -80,7 +81,7 @@ namespace lms::db
if (tagDelimiters != _artistTagDelimiters)
{
_artistTagDelimiters.swap(tagDelimiters);
incScanVersion();
incAudioScanVersion();
}
}
@@ -90,30 +91,24 @@ namespace lms::db
if (tagDelimiters != _defaultTagDelimiters)
{
_defaultTagDelimiters.swap(tagDelimiters);
incScanVersion();
incAudioScanVersion();
}
}
void ScanSettings::setSkipSingleReleasePlayLists(bool value)
{
if (_skipSingleReleasePlayLists != value)
{
_skipSingleReleasePlayLists = value;
incScanVersion();
}
}
void ScanSettings::setAllowMBIDArtistMerge(bool value)
{
if (_allowMBIDArtistMerge != value)
{
_allowMBIDArtistMerge = value;
incScanVersion();
}
}
void ScanSettings::incScanVersion()
void ScanSettings::incAudioScanVersion()
{
_scanVersion += 1;
_audioScanVersion += 1;
}
} // namespace lms::db
+3 -1
View File
@@ -180,7 +180,9 @@ namespace lms::db
// TODO: move this elsewhere
{
auto uniqueTransaction{ createWriteTransaction() };
ScanSettings::init(*this);
if (!ScanSettings::get(*this))
create<ScanSettings>();
}
return migrationPerformed;