Added custom ARTISTSSORT tag support, ref #734
This commit is contained in:
@@ -453,7 +453,7 @@ namespace lms::metadata
|
|||||||
std::vector<std::string_view> artistDelimiters{};
|
std::vector<std::string_view> artistDelimiters{};
|
||||||
|
|
||||||
track.medium = getMedium(tagReader);
|
track.medium = getMedium(tagReader);
|
||||||
track.artists = getArtists(tagReader, { TagType::Artists, TagType::Artist }, { TagType::ArtistSortOrder }, { TagType::MusicBrainzArtistID }, _params);
|
track.artists = getArtists(tagReader, { TagType::Artists, TagType::Artist }, { TagType::ArtistsSortOrder, TagType::ArtistSortOrder }, { TagType::MusicBrainzArtistID }, _params);
|
||||||
track.artistDisplayName = computeArtistDisplayName(track.artists, getTagValueAs<std::string>(tagReader, TagType::Artist), _params.artistTagDelimiters);
|
track.artistDisplayName = computeArtistDisplayName(track.artists, getTagValueAs<std::string>(tagReader, TagType::Artist), _params.artistTagDelimiters);
|
||||||
|
|
||||||
track.conductorArtists = getArtists(tagReader, { TagType::Conductors, TagType::Conductor }, { TagType::ConductorsSortOrder, TagType::ConductorSortOrder }, { TagType::MusicBrainzConductorID }, _params);
|
track.conductorArtists = getArtists(tagReader, { TagType::Conductors, TagType::Conductor }, { TagType::ConductorsSortOrder, TagType::ConductorSortOrder }, { TagType::MusicBrainzConductorID }, _params);
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ namespace lms::metadata
|
|||||||
Artist,
|
Artist,
|
||||||
ArtistSortOrder,
|
ArtistSortOrder,
|
||||||
Artists,
|
Artists,
|
||||||
|
ArtistsSortOrder, // non standard
|
||||||
ASIN,
|
ASIN,
|
||||||
Barcode,
|
Barcode,
|
||||||
BPM,
|
BPM,
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ namespace lms::metadata::avformat
|
|||||||
{ TagType::Artist, { "ARTIST" } },
|
{ TagType::Artist, { "ARTIST" } },
|
||||||
{ TagType::ArtistSortOrder, { "ARTISTSORT", "ARTIST-SORT", "WM/ARTISTSORTORDER" } },
|
{ TagType::ArtistSortOrder, { "ARTISTSORT", "ARTIST-SORT", "WM/ARTISTSORTORDER" } },
|
||||||
{ TagType::Artists, { "ARTISTS", "WM/ARTISTS" } },
|
{ TagType::Artists, { "ARTISTS", "WM/ARTISTS" } },
|
||||||
|
{ TagType::ArtistsSortOrder, { "ARTISTSSORT", "ARTISTS-SORT", "WM/ARTISTSSORTORDER" } },
|
||||||
{ TagType::ASIN, { "ASIN" } },
|
{ TagType::ASIN, { "ASIN" } },
|
||||||
{ TagType::Barcode, { "BARCODE", "WM/BARCODE" } },
|
{ TagType::Barcode, { "BARCODE", "WM/BARCODE" } },
|
||||||
{ TagType::BPM, { "BPM" } },
|
{ TagType::BPM, { "BPM" } },
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ namespace lms::metadata::taglib
|
|||||||
{ TagType::Artist, { "ARTIST" } },
|
{ TagType::Artist, { "ARTIST" } },
|
||||||
{ TagType::ArtistSortOrder, { "ARTISTSORT" } },
|
{ TagType::ArtistSortOrder, { "ARTISTSORT" } },
|
||||||
{ TagType::Artists, { "ARTISTS" } },
|
{ TagType::Artists, { "ARTISTS" } },
|
||||||
|
{ TagType::ArtistsSortOrder, { "ARTISTSSORT" } },
|
||||||
{ TagType::ASIN, { "ASIN" } },
|
{ TagType::ASIN, { "ASIN" } },
|
||||||
{ TagType::Barcode, { "BARCODE" } },
|
{ TagType::Barcode, { "BARCODE" } },
|
||||||
{ TagType::BPM, { "BPM" } },
|
{ TagType::BPM, { "BPM" } },
|
||||||
|
|||||||
@@ -61,10 +61,10 @@ namespace lms::metadata::tests
|
|||||||
EXPECT_EQ(track->artistDisplayName, "MyArtist1 & MyArtist2");
|
EXPECT_EQ(track->artistDisplayName, "MyArtist1 & MyArtist2");
|
||||||
ASSERT_EQ(track->artists.size(), 2);
|
ASSERT_EQ(track->artists.size(), 2);
|
||||||
EXPECT_EQ(track->artists[0].name, "MyArtist1");
|
EXPECT_EQ(track->artists[0].name, "MyArtist1");
|
||||||
EXPECT_EQ(track->artists[0].sortName, "MyArtist1SortName");
|
EXPECT_EQ(track->artists[0].sortName, "MyArtists1SortName");
|
||||||
EXPECT_EQ(track->artists[0].mbid, core::UUID::fromString("9d2e0c8c-8c5e-4372-a061-590955eaeaae"));
|
EXPECT_EQ(track->artists[0].mbid, core::UUID::fromString("9d2e0c8c-8c5e-4372-a061-590955eaeaae"));
|
||||||
EXPECT_EQ(track->artists[1].name, "MyArtist2");
|
EXPECT_EQ(track->artists[1].name, "MyArtist2");
|
||||||
EXPECT_EQ(track->artists[1].sortName, "MyArtist2SortName");
|
EXPECT_EQ(track->artists[1].sortName, "MyArtists2SortName");
|
||||||
EXPECT_EQ(track->artists[1].mbid, core::UUID::fromString("5e2cf87f-c8d7-4504-8a86-954dc0840229"));
|
EXPECT_EQ(track->artists[1].mbid, core::UUID::fromString("5e2cf87f-c8d7-4504-8a86-954dc0840229"));
|
||||||
ASSERT_EQ(track->comments.size(), 2);
|
ASSERT_EQ(track->comments.size(), 2);
|
||||||
EXPECT_EQ(track->comments[0], "Comment1");
|
EXPECT_EQ(track->comments[0], "Comment1");
|
||||||
@@ -751,6 +751,52 @@ namespace lms::metadata::tests
|
|||||||
EXPECT_EQ(track->medium->release->sortName, "MyAlbum");
|
EXPECT_EQ(track->medium->release->sortName, "MyAlbum");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(AudioFileParser, artist_sortNameFallback)
|
||||||
|
{
|
||||||
|
{
|
||||||
|
const TestTagReader testTags{
|
||||||
|
{
|
||||||
|
{ TagType::Artist, { "MyArtist" } },
|
||||||
|
{ TagType::ArtistSortOrder, { "MyArtistSortName" } },
|
||||||
|
// No ArtistSortOrder
|
||||||
|
}
|
||||||
|
};
|
||||||
|
std::unique_ptr<Track> track{ TestAudioFileParser{}.parseMetaData(testTags) };
|
||||||
|
|
||||||
|
ASSERT_EQ(track->artists.size(), 1);
|
||||||
|
EXPECT_EQ(track->artists[0].sortName, "MyArtistSortName");
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const TestTagReader testTags{
|
||||||
|
{
|
||||||
|
{ TagType::Artist, { "MyArtist" } },
|
||||||
|
{ TagType::ArtistsSortOrder, { "MyArtistSortName" } },
|
||||||
|
// No ArtistSortOrder
|
||||||
|
}
|
||||||
|
};
|
||||||
|
std::unique_ptr<Track> track{ TestAudioFileParser{}.parseMetaData(testTags) };
|
||||||
|
|
||||||
|
ASSERT_EQ(track->artists.size(), 1);
|
||||||
|
EXPECT_EQ(track->artists[0].sortName, "MyArtistSortName");
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const TestTagReader testTags{
|
||||||
|
{
|
||||||
|
{ TagType::Artist, { "MyArtist" } },
|
||||||
|
{ TagType::ArtistSortOrder, { "MyArtistSortNameNotUsed" } },
|
||||||
|
{ TagType::ArtistsSortOrder, { "MyArtistSortName" } },
|
||||||
|
// No ArtistSortOrder
|
||||||
|
}
|
||||||
|
};
|
||||||
|
std::unique_ptr<Track> track{ TestAudioFileParser{}.parseMetaData(testTags) };
|
||||||
|
|
||||||
|
ASSERT_EQ(track->artists.size(), 1);
|
||||||
|
EXPECT_EQ(track->artists[0].sortName, "MyArtistSortName");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TEST(AudioFileParser, advisory)
|
TEST(AudioFileParser, advisory)
|
||||||
{
|
{
|
||||||
auto doTest = [](std::string_view value, std::optional<Track::Advisory> expectedValue) {
|
auto doTest = [](std::string_view value, std::optional<Track::Advisory> expectedValue) {
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ namespace lms::metadata::tests
|
|||||||
{ TagType::Artist, { "MyArtist1 & MyArtist2" } },
|
{ TagType::Artist, { "MyArtist1 & MyArtist2" } },
|
||||||
{ TagType::Artists, { "MyArtist1", "MyArtist2" } },
|
{ TagType::Artists, { "MyArtist1", "MyArtist2" } },
|
||||||
{ TagType::ArtistSortOrder, { "MyArtist1SortName", "MyArtist2SortName" } },
|
{ TagType::ArtistSortOrder, { "MyArtist1SortName", "MyArtist2SortName" } },
|
||||||
|
{ TagType::ArtistsSortOrder, { "MyArtists1SortName", "MyArtists2SortName" } },
|
||||||
{ TagType::AlbumArtist, { "MyAlbumArtist1 & MyAlbumArtist2" } },
|
{ TagType::AlbumArtist, { "MyAlbumArtist1 & MyAlbumArtist2" } },
|
||||||
{ TagType::AlbumArtists, { "MyAlbumArtist1", "MyAlbumArtist2" } },
|
{ TagType::AlbumArtists, { "MyAlbumArtist1", "MyAlbumArtist2" } },
|
||||||
{ TagType::AlbumArtistsSortOrder, { "MyAlbumArtist1SortName", "MyAlbumArtist2SortName" } },
|
{ TagType::AlbumArtistsSortOrder, { "MyAlbumArtist1SortName", "MyAlbumArtist2SortName" } },
|
||||||
|
|||||||
Reference in New Issue
Block a user