From 123c142a4e3e7c88928e492206ad2dcc87af71e4 Mon Sep 17 00:00:00 2001 From: emeric Date: Sat, 15 Jun 2024 13:03:42 +0200 Subject: [PATCH] Reconstruct the artist display name if a custom artist delimiter in found in the artist tag --- src/libs/metadata/impl/AvFormatTagReader.cpp | 9 --------- src/libs/metadata/impl/AvFormatTagReader.hpp | 1 - src/libs/metadata/impl/ITagReader.hpp | 1 - src/libs/metadata/impl/Parser.cpp | 6 ++++-- src/libs/metadata/impl/TagLibTagReader.cpp | 9 --------- src/libs/metadata/impl/TagLibTagReader.hpp | 1 - src/libs/metadata/test/TestTagReader.hpp | 9 --------- 7 files changed, 4 insertions(+), 32 deletions(-) diff --git a/src/libs/metadata/impl/AvFormatTagReader.cpp b/src/libs/metadata/impl/AvFormatTagReader.cpp index f0f5ca3d..f9ba4655 100644 --- a/src/libs/metadata/impl/AvFormatTagReader.cpp +++ b/src/libs/metadata/impl/AvFormatTagReader.cpp @@ -172,15 +172,6 @@ namespace lms::metadata } } - size_t AvFormatTagReader::countTagValues(TagType tag) const - { - size_t count{}; - visitTagValues(tag, [&](std::string_view) { - count++; - }); - return count; - } - void AvFormatTagReader::visitTagValues(TagType tag, TagValueVisitor visitor) const { auto itTagNames{ tagMapping.find(tag) }; diff --git a/src/libs/metadata/impl/AvFormatTagReader.hpp b/src/libs/metadata/impl/AvFormatTagReader.hpp index 3645fc33..15b806b0 100644 --- a/src/libs/metadata/impl/AvFormatTagReader.hpp +++ b/src/libs/metadata/impl/AvFormatTagReader.hpp @@ -37,7 +37,6 @@ namespace lms::metadata AvFormatTagReader(const AvFormatTagReader&) = delete; AvFormatTagReader& operator=(const AvFormatTagReader&) = delete; - size_t countTagValues(TagType tag) const override; void visitTagValues(TagType tag, TagValueVisitor visitor) const override; void visitTagValues(std::string_view tag, TagValueVisitor visitor) const override; void visitPerformerTags(PerformerVisitor visitor) const override; diff --git a/src/libs/metadata/impl/ITagReader.hpp b/src/libs/metadata/impl/ITagReader.hpp index 44d016da..da1a0d8b 100644 --- a/src/libs/metadata/impl/ITagReader.hpp +++ b/src/libs/metadata/impl/ITagReader.hpp @@ -148,7 +148,6 @@ namespace lms::metadata virtual ~ITagReader() = default; using TagValueVisitor = std::function; - virtual size_t countTagValues(TagType tag) const = 0; virtual void visitTagValues(TagType tag, TagValueVisitor visitor) const = 0; virtual void visitTagValues(std::string_view tag, TagValueVisitor visitor) const = 0; diff --git a/src/libs/metadata/impl/Parser.cpp b/src/libs/metadata/impl/Parser.cpp index b1a66c39..ffff85c8 100644 --- a/src/libs/metadata/impl/Parser.cpp +++ b/src/libs/metadata/impl/Parser.cpp @@ -296,10 +296,12 @@ namespace lms::metadata track.medium = getMedium(tagReader); track.artists = getArtists(tagReader, { TagType::Artists, TagType::Artist }, { TagType::ArtistSortOrder }, { TagType::MusicBrainzArtistID }, _artistTagDelimiters); + + // We consider the artist display name is put in the Artist tag (picard case) + // But to please most users, if we find a custom delimiter in the Artist tag, we construct the artist diplay string with a "nicer" join if (!_artistTagDelimiters.empty() && track.artists.size() > 1 - && tagReader.countTagValues(TagType::Artist) <= 1 - && tagReader.countTagValues(TagType::Artists) <= 1) + && getTagValuesAs(tagReader, { TagType::Artist }, _artistTagDelimiters).size() > 1) { std::vector artistNames; std::transform(std::cbegin(track.artists), std::cend(track.artists), std::back_inserter(artistNames), [](const Artist& artist) -> std::string_view { return artist.name; }); diff --git a/src/libs/metadata/impl/TagLibTagReader.cpp b/src/libs/metadata/impl/TagLibTagReader.cpp index 822b3cc0..cdf176fc 100644 --- a/src/libs/metadata/impl/TagLibTagReader.cpp +++ b/src/libs/metadata/impl/TagLibTagReader.cpp @@ -340,15 +340,6 @@ namespace lms::metadata #endif } - size_t TagLibTagReader::countTagValues(TagType tag) const - { - size_t count{}; - visitTagValues(tag, [&](std::string_view) { - count++; - }); - return count; - } - void TagLibTagReader::visitTagValues(TagType tag, TagValueVisitor visitor) const { auto itTagNames{ tagMapping.find(tag) }; diff --git a/src/libs/metadata/impl/TagLibTagReader.hpp b/src/libs/metadata/impl/TagLibTagReader.hpp index 90fe57ef..0b13853d 100644 --- a/src/libs/metadata/impl/TagLibTagReader.hpp +++ b/src/libs/metadata/impl/TagLibTagReader.hpp @@ -40,7 +40,6 @@ namespace lms::metadata TagLibTagReader& operator=(const TagLibTagReader&) = delete; void computeAudioProperties(); - size_t countTagValues(TagType tag) const override; void visitTagValues(TagType tag, TagValueVisitor visitor) const override; void visitTagValues(std::string_view tag, TagValueVisitor visitor) const override; void visitPerformerTags(PerformerVisitor visitor) const override; diff --git a/src/libs/metadata/test/TestTagReader.hpp b/src/libs/metadata/test/TestTagReader.hpp index 647a6c13..d27acfaf 100644 --- a/src/libs/metadata/test/TestTagReader.hpp +++ b/src/libs/metadata/test/TestTagReader.hpp @@ -47,15 +47,6 @@ namespace lms::metadata { } - size_t countTagValues(TagType tag) const - { - auto itValues{ _tags.find(tag) }; - if (itValues != std::cend(_tags)) - return itValues->second.size(); - - return 0; - } - void visitTagValues(TagType tag, TagValueVisitor visitor) const override { auto itValues{ _tags.find(tag) };