diff --git a/approot/messages.xml b/approot/messages.xml
index d774dec0..77d99d7f 100644
--- a/approot/messages.xml
+++ b/approot/messages.xml
@@ -64,9 +64,9 @@
Root directory
-Delimiter to be used for splitting artist tags (only if the file does not contain any multi-valued tag)
+Delimiter to be used for splitting artist tags
Daily
-Delimiter to be used for splitting other tags (only if the file does not contain any multi-valued tag)
+Delimiter to be used for splitting other tags
Hourly
Scan now!
diff --git a/approot/messages_fr.xml b/approot/messages_fr.xml
index c4af2527..3629fc1a 100644
--- a/approot/messages_fr.xml
+++ b/approot/messages_fr.xml
@@ -64,9 +64,9 @@
Répertoire racine
-Délimiteur à utiliser pour séparer les tags d'artistes (uniquement si le fichier ne contient pas de tag à valeurs multiples)
+Délimiteur à utiliser pour séparer les tags d'artistes
Tous les jours
-Délimiteur à utiliser pour séparer les autres tags (uniquement si le fichier ne contient pas de tag à valeurs multiples)
+Délimiteur à utiliser pour séparer les autres tags
Toutes les heures
Scanner maintenant !
diff --git a/approot/messages_it.xml b/approot/messages_it.xml
index f7136b27..b16fba7e 100644
--- a/approot/messages_it.xml
+++ b/approot/messages_it.xml
@@ -64,9 +64,9 @@
Cartella principale
-Delimitatore da utilizzare per separare i tag degli artisti (solo se il file non contiene alcun tag con valori multipli)
+Delimitatore da utilizzare per separare i tag degli artisti
Giornaliera
-Delimitatore da utilizzare per separare gli altri tag (solo se il file non contiene alcun tag con valori multipli)
+Delimitatore da utilizzare per separare gli altri tag
Ogni ora
Scansiona ora!
diff --git a/src/libs/metadata/impl/AvFormatTagReader.hpp b/src/libs/metadata/impl/AvFormatTagReader.hpp
index d2039eb4..7172a5a6 100644
--- a/src/libs/metadata/impl/AvFormatTagReader.hpp
+++ b/src/libs/metadata/impl/AvFormatTagReader.hpp
@@ -36,7 +36,6 @@ namespace MetaData
AvFormatTagReader(const AvFormatTagReader&) = delete;
AvFormatTagReader& operator=(const AvFormatTagReader&) = delete;
- bool hasMultiValuedTags() const override { return false; /* not supported */}
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 ef0dbf14..91b8e7b6 100644
--- a/src/libs/metadata/impl/ITagReader.hpp
+++ b/src/libs/metadata/impl/ITagReader.hpp
@@ -145,8 +145,6 @@ namespace MetaData
public:
virtual ~ITagReader() = default;
- virtual bool hasMultiValuedTags() const = 0;
-
using TagValueVisitor = std::function;
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 80a10e66..f9744434 100644
--- a/src/libs/metadata/impl/Parser.cpp
+++ b/src/libs/metadata/impl/Parser.cpp
@@ -44,19 +44,18 @@ namespace MetaData
visitor(tag);
} };
- if (!tagReader.hasMultiValuedTags())
+ for (std::string_view tagDelimiter : tagDelimiters)
{
- for (std::string_view tagDelimiter : tagDelimiters)
+ if (value.find(tagDelimiter) != std::string_view::npos)
{
- if (value.find(tagDelimiter) != std::string_view::npos)
- {
- for (std::string_view splitTag : StringUtils::splitString(value, tagDelimiter))
- visitTagIfNonEmpty(splitTag);
- return;
- }
+ for (std::string_view splitTag : StringUtils::splitString(value, tagDelimiter))
+ visitTagIfNonEmpty(splitTag);
+
+ return;
}
}
+ // no delimiter found, or no delimiter to be used
visitTagIfNonEmpty(value);
});
}
@@ -81,17 +80,14 @@ namespace MetaData
tagReader.visitTagValues(tagType, [&](std::string_view value)
{
- if (!tagReader.hasMultiValuedTags())
+ for (std::string_view tagDelimiter : tagDelimiters)
{
- for (std::string_view tagDelimiter : tagDelimiters)
+ if (value.find(tagDelimiter) != std::string_view::npos)
{
- if (value.find(tagDelimiter) != std::string_view::npos)
- {
- for (std::string_view splitTag : StringUtils::splitString(value, tagDelimiter))
- addTagIfNonEmpty(splitTag);
+ for (std::string_view splitTag : StringUtils::splitString(value, tagDelimiter))
+ addTagIfNonEmpty(splitTag);
- return;
- }
+ return;
}
}
diff --git a/src/libs/metadata/impl/TagLibTagReader.cpp b/src/libs/metadata/impl/TagLibTagReader.cpp
index a44743a4..97ebb9d2 100644
--- a/src/libs/metadata/impl/TagLibTagReader.cpp
+++ b/src/libs/metadata/impl/TagLibTagReader.cpp
@@ -293,8 +293,6 @@ namespace MetaData
for (const auto& value : _propertyMap.unsupportedData())
LMS_LOG(METADATA, DEBUG, "Unknown value: '" << value.to8Bit(true) << "'");
}
-
- _hasMultiValuedTags = std::any_of(std::cbegin(_propertyMap), std::cend(_propertyMap), [](const auto& entry) { return entry.second.size() > 1; });
}
void TagLibTagReader::visitTagValues(TagType tag, TagValueVisitor visitor) const
diff --git a/src/libs/metadata/impl/TagLibTagReader.hpp b/src/libs/metadata/impl/TagLibTagReader.hpp
index faf535a3..cc3dd304 100644
--- a/src/libs/metadata/impl/TagLibTagReader.hpp
+++ b/src/libs/metadata/impl/TagLibTagReader.hpp
@@ -38,7 +38,6 @@ namespace MetaData
TagLibTagReader(const TagLibTagReader&) = delete;
TagLibTagReader& operator=(const TagLibTagReader&) = delete;
- bool hasMultiValuedTags() const override { return _hasMultiValuedTags; }
void visitTagValues(TagType tag, TagValueVisitor visitor) const override;
void visitTagValues(std::string_view tag, TagValueVisitor visitor) const override;
void visitPerformerTags(PerformerVisitor visitor) const override;
@@ -52,6 +51,5 @@ namespace MetaData
TagLib::FileRef _file;
TagLib::PropertyMap _propertyMap; // case-insensitive keys
bool _hasEmbeddedCover{};
- bool _hasMultiValuedTags{};
};
} // namespace MetaData
diff --git a/src/libs/metadata/test/Parser.cpp b/src/libs/metadata/test/Parser.cpp
index e1e67ff3..919d9d59 100644
--- a/src/libs/metadata/test/Parser.cpp
+++ b/src/libs/metadata/test/Parser.cpp
@@ -246,24 +246,4 @@ namespace MetaData
EXPECT_EQ(track->artists[1].name, "Other Artist");
EXPECT_EQ(track->artistDisplayName, "This / is ; One Artist \\ Other Artist");
}
-
- TEST(Parser, customDelimiters_notWithMultiValuedTags)
- {
- const TestTagReader testTags{
- {
- { TagType::Genre, { "Genre1 ; Genre2" } },
- { TagType::Language, { "Lang1", "Lang2" } },
- }
- };
-
- Parser parser;
- static_cast(parser).setDefaultTagDelimiters(std::vector{ " ; " });
- std::unique_ptr