Added compilation tag support, fixes #520

This commit is contained in:
emeric
2024-09-04 20:07:37 +02:00
parent d101cc9780
commit 39ca55e8fa
9 changed files with 47 additions and 15 deletions
+10 -1
View File
@@ -35,7 +35,7 @@ namespace lms::db
{
namespace
{
static constexpr Version LMS_DATABASE_VERSION{ 65 };
static constexpr Version LMS_DATABASE_VERSION{ 66 };
}
VersionInfo::VersionInfo()
@@ -736,6 +736,14 @@ SELECT
session.getDboSession()->execute("UPDATE scan_settings SET scan_version = scan_version + 1");
}
void migrateFromV65(Session& session)
{
session.getDboSession()->execute("ALTER TABLE release ADD is_compilation BOOLEAN NOT NULL DEFAULT(false)");
// Just increment the scan version of the settings to make the next scheduled scan rescan everything
session.getDboSession()->execute("UPDATE scan_settings SET scan_version = scan_version + 1");
}
bool doDbMigration(Session& session)
{
static const std::string outdatedMsg{ "Outdated database, please rebuild it (delete the .db file and restart)" };
@@ -777,6 +785,7 @@ SELECT
{ 62, migrateFromV62 },
{ 63, migrateFromV63 },
{ 64, migrateFromV64 },
{ 65, migrateFromV65 },
};
bool migrationPerformed{};
@@ -228,6 +228,7 @@ namespace lms::db
std::chrono::milliseconds getDuration() const;
Wt::WDateTime getLastWritten() const;
std::string_view getArtistDisplayName() const { return _artistDisplayName; }
bool isCompilation() const { return _isCompilation; }
std::size_t getTrackCount() const;
std::vector<ObjectPtr<ReleaseType>> getReleaseTypes() const;
std::vector<std::string> getLabelNames() const;
@@ -241,6 +242,7 @@ namespace lms::db
void setGroupMBID(const std::optional<core::UUID>& mbid) { _groupMBID = mbid ? mbid->getAsString() : ""; }
void setTotalDisc(std::optional<int> totalDisc) { _totalDisc = totalDisc; }
void setArtistDisplayName(std::string_view name) { _artistDisplayName = name; }
void setCompilation(bool value) { _isCompilation = value; }
void clearLabels();
void clearReleaseTypes();
void addLabel(ObjectPtr<Label> releaseType);
@@ -262,6 +264,7 @@ namespace lms::db
Wt::Dbo::field(a, _groupMBID, "group_mbid");
Wt::Dbo::field(a, _totalDisc, "total_disc");
Wt::Dbo::field(a, _artistDisplayName, "artist_display_name");
Wt::Dbo::field(a, _isCompilation, "is_compilation");
Wt::Dbo::hasMany(a, _tracks, Wt::Dbo::ManyToOne, "release");
Wt::Dbo::hasMany(a, _labels, Wt::Dbo::ManyToMany, "release_label", "", Wt::Dbo::OnDeleteCascade);
@@ -284,6 +287,7 @@ namespace lms::db
std::string _groupMBID;
std::optional<int> _totalDisc{};
std::string _artistDisplayName;
bool _isCompilation{}; // See https://picard-docs.musicbrainz.org/en/appendices/tag_mapping.html#compilation-itunes-5
Wt::Dbo::collection<Wt::Dbo::ptr<Track>> _tracks;
Wt::Dbo::collection<Wt::Dbo::ptr<Label>> _labels;
+20
View File
@@ -745,6 +745,26 @@ namespace lms::db::tests
}
}
TEST_F(DatabaseFixture, Release_isCompilation)
{
ScopedRelease release{ session, "MyRelease" };
{
auto transaction{ session.createReadTransaction() };
EXPECT_FALSE(release.get()->isCompilation());
}
{
auto transaction{ session.createWriteTransaction() };
release.get().modify()->setCompilation(true);
}
{
auto transaction{ session.createReadTransaction() };
EXPECT_TRUE(release.get()->isCompilation());
}
}
TEST_F(DatabaseFixture, Label)
{
{