Added a way to set custom tag delimiters for artists and for other fields, fixes #417

This commit is contained in:
emeric
2024-03-01 23:58:49 +01:00
parent 194b9981c1
commit a6d11f4b4b
45 changed files with 2261 additions and 1121 deletions
+33 -13
View File
@@ -26,6 +26,7 @@
#include <Wt/WDate.h>
#include "metadata/Exception.hpp"
#include "metadata/IParser.hpp"
#include "utils/StreamLogger.hpp"
@@ -76,8 +77,8 @@ namespace
if (medium.position)
os << "\tPosition: " << *medium.position << std::endl;
if (!medium.type.empty())
os << "\tType: " << medium.type << std::endl;
if (!medium.media.empty())
os << "\tMedia: " << medium.media << std::endl;
if (medium.trackCount)
std::cout << "\tTrackCount: " << *medium.trackCount << std::endl;
@@ -95,15 +96,8 @@ namespace
{
using namespace MetaData;
parser.setUserExtraTags({ "MOOD", "ALBUMGROUPING", "GENRE", "LANGUAGE" });
const auto start{ std::chrono::steady_clock::now() };
std::optional<Track> track{ parser.parse(file, true) };
if (!track)
{
std::cerr << "Parsing failed" << std::endl;
return;
}
std::unique_ptr<Track> track{ parser.parse(file, true) };
const auto end{ std::chrono::steady_clock::now() };
std::cout << "Parsing time: " << std::fixed << std::setprecision(2) << std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() / 1000. << "ms" << std::endl;
@@ -155,6 +149,21 @@ namespace
if (track->recordingMBID)
std::cout << "Recording MBID = " << track->recordingMBID->getAsString() << std::endl;
for (std::string_view genre : track->genres)
std::cout << "Genre: " << genre << std::endl;
for (std::string_view genre : track->moods)
std::cout << "Mood: " << genre << std::endl;
for (std::string_view grouping : track->groupings)
std::cout << "Grouping: " << grouping << std::endl;
for (std::string_view language : track->languages)
std::cout << "Language: " << language << std::endl;
for (std::string_view label : track->labels)
std::cout << "Label: " << label << std::endl;
for (const auto& [tag, values] : track->userExtraTags)
{
std::cout << "Tag: " << tag << std::endl;
@@ -209,7 +218,7 @@ int main(int argc, char* argv[])
try
{
// log to stdout
Service<ILogger> logger{ std::make_unique<StreamLogger>(std::cout) };
Service<ILogger> logger{ std::make_unique<StreamLogger>(std::cout, StreamLogger::allSeverities) };
for (std::size_t i{}; i < static_cast<std::size_t>(argc - 1); ++i)
{
@@ -217,17 +226,28 @@ int main(int argc, char* argv[])
std::cout << "Parsing file '" << file << "'" << std::endl;
try
{
std::cout << "Using av:" << std::endl;
auto parser{ MetaData::createParser(MetaData::ParserType::AvFormat, MetaData::ParserReadStyle::Accurate) };
auto parser{ MetaData::createParser(MetaData::ParserBackend::AvFormat, MetaData::ParserReadStyle::Accurate) };
parse(*parser, file);
}
catch (MetaData::Exception& e)
{
std::cerr << "Parsing failed: " << e.what() << std::endl;
}
try
{
std::cout << "Using TagLib:" << std::endl;
auto parser{ MetaData::createParser(MetaData::ParserType::TagLib, MetaData::ParserReadStyle::Accurate) };
auto parser{ MetaData::createParser(MetaData::ParserBackend::TagLib, MetaData::ParserReadStyle::Accurate) };
parse(*parser, file);
}
catch (MetaData::Exception& e)
{
std::cerr << "Parsing failed: " << e.what() << std::endl;
}
}
}
catch (std::exception& e)