Better scan of total tracks/discks

This commit is contained in:
emeric
2018-05-14 12:55:34 +02:00
parent 868eca62c8
commit dedb90c6a5
2 changed files with 29 additions and 17 deletions
+28 -16
View File
@@ -91,10 +91,11 @@ TagLibParser::parse(const boost::filesystem::path& p, bool debug)
if (debug) if (debug)
{ {
std::cout << "TAG = '" << tag << "', VALUES = "; std::vector<std::string> strs;
for (auto value : values) for (auto value : values)
std::cout << "'" << value.to8Bit(true) << "',"; strs.push_back(values.front().to8Bit(true));
std::cout << std::endl;
std::cout << "[" << tag << "] = " << joinStrings(strs, ",") << std::endl;
} }
if (tag == "ARTIST") if (tag == "ARTIST")
@@ -116,6 +117,12 @@ TagLibParser::parse(const boost::filesystem::path& p, bool debug)
items.insert( std::make_pair(MetaData::Type::MusicBrainzRecordingID, stringTrim( values.front().to8Bit(true)))); items.insert( std::make_pair(MetaData::Type::MusicBrainzRecordingID, stringTrim( values.front().to8Bit(true))));
else if (tag == "ACOUSTID_ID") else if (tag == "ACOUSTID_ID")
items.insert( std::make_pair(MetaData::Type::AcoustID, stringTrim( values.front().to8Bit(true)))); items.insert( std::make_pair(MetaData::Type::AcoustID, stringTrim( values.front().to8Bit(true))));
else if (tag == "TRACKTOTAL")
{
auto totalTrack = readAs<std::size_t>(values.front().to8Bit(true));
if (totalTrack)
items[MetaData::Type::TotalTrack] = *totalTrack;
}
else if (tag == "TRACKNUMBER") else if (tag == "TRACKNUMBER")
{ {
// Expecting 'Number/Total' // Expecting 'Number/Total'
@@ -127,14 +134,21 @@ TagLibParser::parse(const boost::filesystem::path& p, bool debug)
if (number) if (number)
items.insert( std::make_pair(MetaData::Type::TrackNumber, *number )); items.insert( std::make_pair(MetaData::Type::TrackNumber, *number ));
if (strings.size() > 1) // Lower priority than TRACKTOTAL
if (strings.size() > 1 && items.find(MetaData::Type::TotalTrack) == items.end())
{ {
auto totalNumber = readAs<std::size_t>(strings[1]); auto totalTrack = readAs<std::size_t>(strings[1]);
if (totalNumber) if (totalTrack)
items.insert( std::make_pair(MetaData::Type::TotalTrack, *totalNumber )); items[MetaData::Type::TotalTrack] = *totalTrack;
} }
} }
} }
else if (tag == "DISCTOTAL")
{
auto totalDisc = readAs<std::size_t>(values.front().to8Bit(true));
if (totalDisc)
items[MetaData::Type::TotalDisc] = *totalDisc;
}
else if (tag == "DISCNUMBER") else if (tag == "DISCNUMBER")
{ {
// Expecting 'Number/Total' // Expecting 'Number/Total'
@@ -146,11 +160,12 @@ TagLibParser::parse(const boost::filesystem::path& p, bool debug)
if (number) if (number)
items.insert( std::make_pair(MetaData::Type::DiscNumber, *number)); items.insert( std::make_pair(MetaData::Type::DiscNumber, *number));
if (strings.size() > 1) // Lower priority than DISCTOTAL
if (strings.size() > 1 && items.find(MetaData::Type::TotalDisc) == items.end())
{ {
auto totalNumber = readAs<std::size_t>(strings[1]); auto totalDisc = readAs<std::size_t>(strings[1]);
if (totalNumber) if (totalDisc)
items.insert( std::make_pair(MetaData::Type::TotalDisc, *totalNumber )); items[MetaData::Type::TotalDisc] = *totalDisc;
} }
} }
} }
@@ -162,12 +177,12 @@ TagLibParser::parse(const boost::filesystem::path& p, bool debug)
} }
else if (tag == "ORIGINALDATE") else if (tag == "ORIGINALDATE")
{ {
// lower priority than original year // Lower priority than original year
if (items.find(MetaData::Type::OriginalYear) == items.end()) if (items.find(MetaData::Type::OriginalYear) == items.end())
{ {
auto timePoint = readAs<int>(values.front().to8Bit()); auto timePoint = readAs<int>(values.front().to8Bit());
if (timePoint) if (timePoint)
items.insert( std::make_pair(MetaData::Type::OriginalYear, *timePoint)); items[MetaData::Type::OriginalYear] = *timePoint;
} }
} }
else if (tag == "ORIGINALYEAR") else if (tag == "ORIGINALYEAR")
@@ -177,8 +192,6 @@ TagLibParser::parse(const boost::filesystem::path& p, bool debug)
{ {
// Take priority on original year // Take priority on original year
items[MetaData::Type::OriginalYear] = *timePoint; items[MetaData::Type::OriginalYear] = *timePoint;
// items.erase( MetaData::Type::OriginalYear );
// items.insert( std::make_pair(MetaData::Type::OriginalYear, *timePoint));
} }
} }
else if (tag == "METADATA_BLOCK_PICTURE") else if (tag == "METADATA_BLOCK_PICTURE")
@@ -187,7 +200,6 @@ TagLibParser::parse(const boost::filesystem::path& p, bool debug)
if (items.find(MetaData::Type::HasCover) == items.end()) if (items.find(MetaData::Type::HasCover) == items.end())
items.insert( std::make_pair(MetaData::Type::HasCover, true)); items.insert( std::make_pair(MetaData::Type::HasCover, true));
} }
// Check if a hit a cluster tag
else if (_clusterTypes.find(tag) != _clusterTypes.end()) else if (_clusterTypes.find(tag) != _clusterTypes.end())
{ {
std::set<std::string> clusterNames; std::set<std::string> clusterNames;
+1 -1
View File
@@ -121,7 +121,7 @@ int main(int argc, char *argv[])
} }
catch (std::exception& e) catch (std::exception& e)
{ {
std::cerr << "Caught exception: " << e.what(); std::cerr << "Caught exception: " << e.what() << std::endl;
return EXIT_FAILURE; return EXIT_FAILURE;
} }