Added support for release type in metadata parser
This commit is contained in:
@@ -225,6 +225,13 @@ getRelease(const TagMap& tags)
|
||||
}
|
||||
}
|
||||
|
||||
release->primaryType = getPropertyValueFirstMatchAs<MetaData::Release::PrimaryType>(tags, {"MUSICBRAINZ_ALBUMTYPE", "RELEASETYPE", "MUSICBRAINZ ALBUM TYPE", "MUSICBRAINZ/ALBUM TYPE"});
|
||||
if (release->primaryType)
|
||||
{
|
||||
const auto secondaryTypes {getPropertyValuesFirstMatchAs<MetaData::Release::SecondaryType>(tags, {"MUSICBRAINZ_ALBUMTYPE", "RELEASETYPE", "MUSICBRAINZ ALBUM TYPE", "MUSICBRAINZ/ALBUM TYPE"})};
|
||||
release->secondaryTypes.assign(std::cbegin(secondaryTypes), std::cend(secondaryTypes));
|
||||
}
|
||||
|
||||
return release;
|
||||
}
|
||||
|
||||
@@ -445,7 +452,7 @@ TagLibParser::parse(const std::filesystem::path& p, bool debug)
|
||||
|
||||
for (const auto& [name, attributeList] : tag->attributeListMap())
|
||||
{
|
||||
std::string strName {name.to8Bit(true)};
|
||||
std::string strName {StringUtils::stringToUpper(name.to8Bit(true))};
|
||||
if (strName.find("WM/") == 0 || tags.find(strName) != std::cend(tags))
|
||||
continue;
|
||||
|
||||
@@ -461,7 +468,7 @@ TagLibParser::parse(const std::filesystem::path& p, bool debug)
|
||||
if (debug)
|
||||
std::cout << "ASF property: '" << name << "'" << std::endl;
|
||||
|
||||
tags[strName] = std::move(attributes);
|
||||
tags.emplace(strName, std::move(attributes));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,3 +119,48 @@ namespace MetaData::Utils
|
||||
}
|
||||
}
|
||||
|
||||
namespace StringUtils
|
||||
{
|
||||
static bool iequals(std::string_view a, std::string_view b)
|
||||
{
|
||||
return std::equal(std::cbegin(a), std::cend(a),
|
||||
std::cbegin(b), std::cend(b),
|
||||
[](char a, char b) { return tolower(a) == tolower(b);}
|
||||
);
|
||||
}
|
||||
|
||||
template<>
|
||||
std::optional<MetaData::Release::PrimaryType> readAs(std::string_view str)
|
||||
{
|
||||
str = stringTrim(str);
|
||||
|
||||
if (iequals(str, "album"))
|
||||
return MetaData::Release::PrimaryType::Album;
|
||||
else if (iequals(str, "single"))
|
||||
return MetaData::Release::PrimaryType::Single;
|
||||
else if (iequals(str, "EP"))
|
||||
return MetaData::Release::PrimaryType::EP;
|
||||
else if (iequals(str, "broadcast"))
|
||||
return MetaData::Release::PrimaryType::Broadcast;
|
||||
else if (iequals(str, "other"))
|
||||
return MetaData::Release::PrimaryType::Other;
|
||||
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
template<>
|
||||
std::optional<MetaData::Release::SecondaryType> readAs(std::string_view str)
|
||||
{
|
||||
str = stringTrim(str);
|
||||
|
||||
if (iequals(str, "compilation"))
|
||||
return MetaData::Release::SecondaryType::Compilation;
|
||||
else if (iequals(str, "soundtrack"))
|
||||
return MetaData::Release::SecondaryType::Soundtrack;
|
||||
else if (iequals(str, "live"))
|
||||
return MetaData::Release::SecondaryType::Live;
|
||||
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,14 @@ namespace MetaData::Utils
|
||||
|
||||
// format is "artist name (role)"
|
||||
PerformerArtist extractPerformerAndRole(std::string_view entry);
|
||||
|
||||
}
|
||||
|
||||
namespace StringUtils
|
||||
{
|
||||
template<>
|
||||
std::optional<MetaData::Release::PrimaryType> readAs(std::string_view str);
|
||||
|
||||
template<>
|
||||
std::optional<MetaData::Release::SecondaryType> readAs(std::string_view str);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user