Always use the provided custom delimiters to split tags

This commit is contained in:
emeric
2024-03-06 18:50:25 +01:00
parent 8c3dfd7a2f
commit 2e4947dd42
10 changed files with 18 additions and 70 deletions
@@ -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;
-2
View File
@@ -145,8 +145,6 @@ namespace MetaData
public:
virtual ~ITagReader() = default;
virtual bool hasMultiValuedTags() const = 0;
using TagValueVisitor = std::function<void(std::string_view value)>;
virtual void visitTagValues(TagType tag, TagValueVisitor visitor) const = 0;
virtual void visitTagValues(std::string_view tag, TagValueVisitor visitor) const = 0;
+12 -16
View File
@@ -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;
}
}
@@ -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
@@ -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