diff --git a/approot/releases.xml b/approot/releases.xml
index 2bcc0871..c66f3577 100644
--- a/approot/releases.xml
+++ b/approot/releases.xml
@@ -40,12 +40,11 @@
-
+
${cover class="shadow-sm"}
${release-name class="d-block text-truncate text-nowrap text-decoration-none link-success"}
- ${
}${artist-name class="d-block text-truncate text-nowrap text-decoration-none link-secondary"}${}
- ${
}${tr:Lms.Explore.various-artists}
${}
+ ${
}${artist-name class="d-block text-truncate text-nowrap"}${}
${
}${year}
${}
diff --git a/src/libs/metadata/impl/TagLibParser.cpp b/src/libs/metadata/impl/TagLibParser.cpp
index d5fb733b..cfcaaeb7 100644
--- a/src/libs/metadata/impl/TagLibParser.cpp
+++ b/src/libs/metadata/impl/TagLibParser.cpp
@@ -210,6 +210,7 @@ getRelease(const TagMap& tags)
release.emplace();
release->name = std::move(*releaseName);
+ release->artistDisplayName = getPropertyValueAs
(tags, "ALBUMARTIST").value_or("");
release->mbid = getPropertyValueFirstMatchAs(tags, {"MUSICBRAINZ_ALBUMID", "MUSICBRAINZ ALBUM ID", "MUSICBRAINZ/ALBUM ID"});
release->artists = getArtists(tags, {"ALBUMARTISTS", "ALBUMARTIST"}, {"ALBUMARTISTSSORT", "ALBUMARTISTSORT"}, {"MUSICBRAINZ_ALBUMARTISTID", "MUSICBRAINZ ALBUM ARTIST ID", "MUSICBRAINZ/ALBUM ARTIST ID"});
release->mediumCount = getPropertyValueAs(tags, "DISCTOTAL");
@@ -353,6 +354,8 @@ TagLibParser::processTag(Track& track, const std::string& tag, const std::vector
track.copyrightURL = value;
else if (tag == "REPLAYGAIN_TRACK_GAIN")
track.replayGain = StringUtils::readAs(value);
+ else if (tag == "ARTIST")
+ track.artistDisplayName = value;
else if (_clusterTypeNames.find(tag) != _clusterTypeNames.end())
{
std::set clusterNames;
diff --git a/src/libs/metadata/include/metadata/IParser.hpp b/src/libs/metadata/include/metadata/IParser.hpp
index 15b72282..bb2b0274 100644
--- a/src/libs/metadata/include/metadata/IParser.hpp
+++ b/src/libs/metadata/include/metadata/IParser.hpp
@@ -79,6 +79,7 @@ namespace MetaData
std::optional mbid;
std::string name;
+ std::string artistDisplayName;
std::vector artists;
std::optional mediumCount;
std::optional primaryType;
@@ -117,6 +118,7 @@ namespace MetaData
std::string copyright;
std::string copyrightURL;
std::optional replayGain;
+ std::string artistDisplayName;
std::vector artists;
std::vector conductorArtists;
std::vector composerArtists;
diff --git a/src/libs/services/database/impl/Migration.cpp b/src/libs/services/database/impl/Migration.cpp
index 28b22dd8..52bc4fb4 100644
--- a/src/libs/services/database/impl/Migration.cpp
+++ b/src/libs/services/database/impl/Migration.cpp
@@ -665,6 +665,18 @@ CREATE TABLE IF NOT EXISTS "track_backup" (
ScanSettings::get(session).modify()->incScanVersion();
}
+ static
+ void
+ migrateFromV40(Session& session)
+ {
+ // add artist_display_name in Release and Track
+ session.getDboSession().execute("ALTER TABLE release ADD artist_display_name TEXT");
+ session.getDboSession().execute("ALTER TABLE track ADD artist_display_name TEXT");
+
+ // Just increment the scan version of the settings to make the next scheduled scan rescan everything
+ ScanSettings::get(session).modify()->incScanVersion();
+ }
+
void
doDbMigration(Session& session)
{
@@ -711,6 +723,7 @@ CREATE TABLE IF NOT EXISTS "track_backup" (
{37, migrateFromV37},
{38, migrateFromV38},
{39, migrateFromV39},
+ {40, migrateFromV40},
};
while (1)
diff --git a/src/libs/services/database/impl/Migration.hpp b/src/libs/services/database/impl/Migration.hpp
index 2c4f1896..b20c7680 100644
--- a/src/libs/services/database/impl/Migration.hpp
+++ b/src/libs/services/database/impl/Migration.hpp
@@ -26,7 +26,7 @@ namespace Database
class Session;
using Version = std::size_t;
- static constexpr Version LMS_DATABASE_VERSION {40};
+ static constexpr Version LMS_DATABASE_VERSION {41};
class VersionInfo
{
public:
diff --git a/src/libs/services/database/include/services/database/Release.hpp b/src/libs/services/database/include/services/database/Release.hpp
index 810a4067..a9c39b07 100644
--- a/src/libs/services/database/include/services/database/Release.hpp
+++ b/src/libs/services/database/include/services/database/Release.hpp
@@ -113,6 +113,7 @@ namespace Database
Wt::WDateTime getLastWritten() const;
std::optional getPrimaryType() const { return _primaryType; }
EnumSet getSecondaryTypes() const { return _secondaryTypes; }
+ std::string_view getArtistDisplayName() const { return _artistDisplayName; }
std::size_t getTracksCount() const;
// Setters
@@ -121,6 +122,7 @@ namespace Database
void setTotalDisc(std::optional totalDisc) { _totalDisc = totalDisc; }
void setPrimaryType(std::optional type) { _primaryType = type; }
void setSecondaryTypes(EnumSet types) { _secondaryTypes = types; }
+ void setArtistDisplayName(std::string_view name) { _artistDisplayName = name; }
// Get the artists of this release
std::vector> getArtists(TrackArtistLinkType type = TrackArtistLinkType::Artist) const;
@@ -137,7 +139,7 @@ namespace Database
Wt::Dbo::field(a, _totalDisc, "total_disc");
Wt::Dbo::field(a, _primaryType, "primary_type");
Wt::Dbo::field(a, _secondaryTypes, "secondary_types");
-
+ Wt::Dbo::field(a, _artistDisplayName, "artist_display_name");
Wt::Dbo::hasMany(a, _tracks, Wt::Dbo::ManyToOne, "release");
}
@@ -155,6 +157,7 @@ namespace Database
std::optional _totalDisc{};
std::optional _primaryType;
EnumSet _secondaryTypes;
+ std::string _artistDisplayName;
Wt::Dbo::collection> _tracks; // Tracks in the release
};
diff --git a/src/libs/services/database/include/services/database/Track.hpp b/src/libs/services/database/include/services/database/Track.hpp
index 1f944f75..94401a61 100644
--- a/src/libs/services/database/include/services/database/Track.hpp
+++ b/src/libs/services/database/include/services/database/Track.hpp
@@ -138,6 +138,7 @@ class Track final : public Object