diff --git a/src/libs/metadata/test/Parser.cpp b/src/libs/metadata/test/Parser.cpp index fd8ff770..f683c80f 100644 --- a/src/libs/metadata/test/Parser.cpp +++ b/src/libs/metadata/test/Parser.cpp @@ -337,6 +337,23 @@ namespace lms::metadata EXPECT_EQ(track->artistDisplayName, "Artist1, Artist2"); // reconstruct artist display name since multiple entries are found and nothing is set in artist } + TEST(Parser, multipleArtistsInArtistsWithEndDelimiter) + { + const TestTagReader testTags{ + { + { TagType::Artist, { "Artist1 & (CV. Artist2)" } }, + { TagType::Artists, { "Artist1", "Artist2" } }, + } + }; + + std::unique_ptr track{ Parser{}.parse(testTags) }; + + ASSERT_EQ(track->artists.size(), 2); + EXPECT_EQ(track->artists[0].name, "Artist1"); + EXPECT_EQ(track->artists[1].name, "Artist2"); + EXPECT_EQ(track->artistDisplayName, "Artist1 & (CV. Artist2)"); + } + TEST(Parser, singleArtistInAlbumArtists) { const TestTagReader testTags{ diff --git a/src/lms/ui/Utils.cpp b/src/lms/ui/Utils.cpp index 1fef4158..216dc518 100644 --- a/src/lms/ui/Utils.cpp +++ b/src/lms/ui/Utils.cpp @@ -212,8 +212,14 @@ namespace lms::ui::utils matchCount += 1; } - if (matchCount != artistIds.size()) - return createArtistAnchorList(artistIds, cssAnchorClass); + if (matchCount == artistIds.size()) + { + const std::string_view remainingStr{ displayName.substr(currentOffset) }; + if (!remainingStr.empty()) + result->addNew(std::string{ remainingStr }, Wt::TextFormat::Plain); + } + else + result = createArtistAnchorList(artistIds, cssAnchorClass); return result; }