Simplified logger configuration, it no longer depends on Wt
This commit is contained in:
@@ -30,7 +30,7 @@
|
||||
#include "services/database/Track.hpp"
|
||||
#include "services/cover/ICoverService.hpp"
|
||||
#include "utils/IConfig.hpp"
|
||||
#include "utils/Logger.hpp"
|
||||
#include "utils/ILogger.hpp"
|
||||
#include "utils/Service.hpp"
|
||||
#include "utils/StreamLogger.hpp"
|
||||
|
||||
@@ -38,68 +38,66 @@ static
|
||||
void
|
||||
dumpTrackCovers(Database::Session& session, Image::ImageSize width)
|
||||
{
|
||||
using namespace Database;
|
||||
using namespace Database;
|
||||
|
||||
RangeResults<Database::TrackId> trackIds;
|
||||
{
|
||||
auto transaction {session.createReadTransaction()};
|
||||
trackIds = Database::Track::findIds(session, Database::Track::FindParameters {});
|
||||
}
|
||||
RangeResults<Database::TrackId> trackIds;
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
trackIds = Database::Track::findIds(session, Database::Track::FindParameters{});
|
||||
}
|
||||
|
||||
for (const Database::TrackId trackId : trackIds.results)
|
||||
{
|
||||
std::cout << "Getting cover for track id " << trackId.toString() << std::endl;
|
||||
Service<Cover::ICoverService>::get()->getFromTrack(trackId, width);
|
||||
}
|
||||
for (const Database::TrackId trackId : trackIds.results)
|
||||
{
|
||||
std::cout << "Getting cover for track id " << trackId.toString() << std::endl;
|
||||
Service<Cover::ICoverService>::get()->getFromTrack(trackId, width);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
try
|
||||
{
|
||||
namespace po = boost::program_options;
|
||||
try
|
||||
{
|
||||
namespace po = boost::program_options;
|
||||
|
||||
// log to stdout
|
||||
Service<Logger> logger {std::make_unique<StreamLogger>(std::cout)};
|
||||
// log to stdout
|
||||
Service<ILogger> logger{ std::make_unique<StreamLogger>(std::cout) };
|
||||
|
||||
|
||||
po::options_description desc{"Allowed options"};
|
||||
po::options_description desc{ "Allowed options" };
|
||||
desc.add_options()
|
||||
("help,h", "print usage message")
|
||||
("conf,c", po::value<std::string>()->default_value("/etc/lms.conf"), "LMS config file")
|
||||
("default-cover,d", po::value<std::string>(), "Default cover path")
|
||||
("tracks,t", "dump covers for tracks")
|
||||
("size,s", po::value<unsigned>()->default_value(512), "Requested cover size")
|
||||
("quality,q", po::value<unsigned>()->default_value(75), "JPEG quality (1-100)")
|
||||
;
|
||||
("help,h", "print usage message")
|
||||
("conf,c", po::value<std::string>()->default_value("/etc/lms.conf"), "LMS config file")
|
||||
("default-cover,d", po::value<std::string>(), "Default cover path")
|
||||
("tracks,t", "dump covers for tracks")
|
||||
("size,s", po::value<unsigned>()->default_value(512), "Requested cover size")
|
||||
("quality,q", po::value<unsigned>()->default_value(75), "JPEG quality (1-100)")
|
||||
;
|
||||
|
||||
po::variables_map vm;
|
||||
po::store(po::parse_command_line(argc, argv, desc), vm);
|
||||
|
||||
if (vm.count("help"))
|
||||
{
|
||||
std::cout << desc << std::endl;
|
||||
{
|
||||
std::cout << desc << std::endl;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
Service<IConfig> config {createConfig(vm["conf"].as<std::string>())};
|
||||
Database::Db db {config->getPath("working-dir") / "lms.db"};
|
||||
Service<Cover::ICoverService> coverArtService {Cover::createCoverService(db, argv[0], vm["default-cover"].as<std::string>())};
|
||||
Service<IConfig> config{ createConfig(vm["conf"].as<std::string>()) };
|
||||
Database::Db db{ config->getPath("working-dir") / "lms.db" };
|
||||
Service<Cover::ICoverService> coverArtService{ Cover::createCoverService(db, argv[0], vm["default-cover"].as<std::string>()) };
|
||||
|
||||
coverArtService->setJpegQuality(config->getULong("cover-jpeg-quality", vm["quality"].as<unsigned>()));
|
||||
coverArtService->setJpegQuality(config->getULong("cover-jpeg-quality", vm["quality"].as<unsigned>()));
|
||||
|
||||
Database::Session session {db};
|
||||
Database::Session session{ db };
|
||||
|
||||
if (vm.count("tracks"))
|
||||
dumpTrackCovers(session, vm["size"].as<unsigned>());
|
||||
}
|
||||
catch( std::exception& e)
|
||||
{
|
||||
std::cerr << "Caught exception: " << e.what() << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if (vm.count("tracks"))
|
||||
dumpTrackCovers(session, vm["size"].as<unsigned>());
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
std::cerr << "Caught exception: " << e.what() << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ namespace
|
||||
|
||||
Database::Cluster::pointer generateCluster(Database::Session& session, Database::ClusterType::pointer clusterType)
|
||||
{
|
||||
const std::string clusterName{ clusterType->getName() + "-" + std::string{ UUID::generate().getAsString() } };
|
||||
const std::string clusterName{ std::string{ clusterType->getName() } + "-" + std::string{ UUID::generate().getAsString() } };
|
||||
return session.create<Database::Cluster>(clusterType, clusterName);
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ namespace
|
||||
{
|
||||
std::size_t remainingCount{ params.releaseCount };
|
||||
|
||||
while(remainingCount > 0)
|
||||
while (remainingCount > 0)
|
||||
{
|
||||
auto transaction{ context.session.createWriteTransaction() };
|
||||
std::cout << "Generating album #" << params.releaseCount - remainingCount << " / " << params.releaseCount << std::endl;
|
||||
@@ -154,7 +154,7 @@ int main(int argc, char* argv[])
|
||||
try
|
||||
{
|
||||
// log to stdout
|
||||
Service<Logger> logger{ std::make_unique<StreamLogger>(std::cout) };
|
||||
Service<ILogger> logger{ std::make_unique<StreamLogger>(std::cout) };
|
||||
|
||||
namespace po = boost::program_options;
|
||||
|
||||
|
||||
+166
-166
@@ -33,250 +33,250 @@ static
|
||||
std::ostream&
|
||||
operator<<(std::ostream& os, const MetaData::Artist& artist)
|
||||
{
|
||||
os << artist.name;
|
||||
os << artist.name;
|
||||
|
||||
if (artist.mbid)
|
||||
os << " (" << artist.mbid->getAsString() << ")";
|
||||
if (artist.mbid)
|
||||
os << " (" << artist.mbid->getAsString() << ")";
|
||||
|
||||
if (artist.sortName)
|
||||
os << " '" << *artist.sortName << "'";
|
||||
if (artist.sortName)
|
||||
os << " '" << *artist.sortName << "'";
|
||||
|
||||
return os;
|
||||
return os;
|
||||
}
|
||||
|
||||
static
|
||||
std::ostream&
|
||||
operator<<(std::ostream& os, MetaData::Release::PrimaryType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case MetaData::Release::PrimaryType::Album: os << "Album"; break;
|
||||
case MetaData::Release::PrimaryType::Single: os << "Single"; break;
|
||||
case MetaData::Release::PrimaryType::EP: os << "EP"; break;
|
||||
case MetaData::Release::PrimaryType::Broadcast: os << "Broadcast"; break;
|
||||
case MetaData::Release::PrimaryType::Other: os << "Other"; break;
|
||||
default:
|
||||
os << "??";
|
||||
}
|
||||
return os;
|
||||
switch (type)
|
||||
{
|
||||
case MetaData::Release::PrimaryType::Album: os << "Album"; break;
|
||||
case MetaData::Release::PrimaryType::Single: os << "Single"; break;
|
||||
case MetaData::Release::PrimaryType::EP: os << "EP"; break;
|
||||
case MetaData::Release::PrimaryType::Broadcast: os << "Broadcast"; break;
|
||||
case MetaData::Release::PrimaryType::Other: os << "Other"; break;
|
||||
default:
|
||||
os << "??";
|
||||
}
|
||||
return os;
|
||||
}
|
||||
|
||||
static
|
||||
std::ostream&
|
||||
operator<<(std::ostream& os, MetaData::Release::SecondaryType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case MetaData::Release::SecondaryType::Compilation: os << "Compilation"; break;
|
||||
case MetaData::Release::SecondaryType::Soundtrack: os << "Soundtrack"; break;
|
||||
case MetaData::Release::SecondaryType::Spokenword: os << "Spokenword"; break;
|
||||
case MetaData::Release::SecondaryType::Interview: os << "Interview"; break;
|
||||
case MetaData::Release::SecondaryType::Audiobook: os << "Audiobook"; break;
|
||||
case MetaData::Release::SecondaryType::AudioDrama: os << "Audio drama"; break;
|
||||
case MetaData::Release::SecondaryType::Live: os << "Live"; break;
|
||||
case MetaData::Release::SecondaryType::Remix: os << "Remix"; break;
|
||||
case MetaData::Release::SecondaryType::DJMix: os << "DJ-mix"; break;
|
||||
case MetaData::Release::SecondaryType::Mixtape_Street: os << "Mixtape/Street"; break;
|
||||
case MetaData::Release::SecondaryType::Demo: os << "Mixtape/Demo"; break;
|
||||
default:
|
||||
os << "??";
|
||||
}
|
||||
return os;
|
||||
switch (type)
|
||||
{
|
||||
case MetaData::Release::SecondaryType::Compilation: os << "Compilation"; break;
|
||||
case MetaData::Release::SecondaryType::Soundtrack: os << "Soundtrack"; break;
|
||||
case MetaData::Release::SecondaryType::Spokenword: os << "Spokenword"; break;
|
||||
case MetaData::Release::SecondaryType::Interview: os << "Interview"; break;
|
||||
case MetaData::Release::SecondaryType::Audiobook: os << "Audiobook"; break;
|
||||
case MetaData::Release::SecondaryType::AudioDrama: os << "Audio drama"; break;
|
||||
case MetaData::Release::SecondaryType::Live: os << "Live"; break;
|
||||
case MetaData::Release::SecondaryType::Remix: os << "Remix"; break;
|
||||
case MetaData::Release::SecondaryType::DJMix: os << "DJ-mix"; break;
|
||||
case MetaData::Release::SecondaryType::Mixtape_Street: os << "Mixtape/Street"; break;
|
||||
case MetaData::Release::SecondaryType::Demo: os << "Mixtape/Demo"; break;
|
||||
default:
|
||||
os << "??";
|
||||
}
|
||||
return os;
|
||||
}
|
||||
|
||||
static
|
||||
std::ostream&
|
||||
operator<<(std::ostream& os, const MetaData::Release& release)
|
||||
{
|
||||
os << release.name;
|
||||
os << release.name;
|
||||
|
||||
if (release.mbid)
|
||||
os << " (" << release.mbid->getAsString() << ")" << std::endl;
|
||||
if (release.mbid)
|
||||
os << " (" << release.mbid->getAsString() << ")" << std::endl;
|
||||
|
||||
if (release.mediumCount)
|
||||
std::cout << "\tMediumCount: " << *release.mediumCount << std::endl;
|
||||
if (release.mediumCount)
|
||||
std::cout << "\tMediumCount: " << *release.mediumCount << std::endl;
|
||||
|
||||
if (!release.artistDisplayName.empty())
|
||||
std::cout << "\tDisplay artist: " << release.artistDisplayName << std::endl;
|
||||
if (!release.artistDisplayName.empty())
|
||||
std::cout << "\tDisplay artist: " << release.artistDisplayName << std::endl;
|
||||
|
||||
for (const MetaData::Artist& artist : release.artists)
|
||||
std::cout << "\tRelease artist: " << artist << std::endl;
|
||||
for (const MetaData::Artist& artist : release.artists)
|
||||
std::cout << "\tRelease artist: " << artist << std::endl;
|
||||
|
||||
if (release.primaryType)
|
||||
{
|
||||
std::cout << "\tPrimary type: " << *release.primaryType << std::endl;
|
||||
for (MetaData::Release::SecondaryType type : release.secondaryTypes)
|
||||
std::cout << "\tSecondary type:" << type << std::endl;
|
||||
}
|
||||
if (release.primaryType)
|
||||
{
|
||||
std::cout << "\tPrimary type: " << *release.primaryType << std::endl;
|
||||
for (MetaData::Release::SecondaryType type : release.secondaryTypes)
|
||||
std::cout << "\tSecondary type:" << type << std::endl;
|
||||
}
|
||||
|
||||
return os;
|
||||
return os;
|
||||
}
|
||||
|
||||
static
|
||||
std::ostream&
|
||||
operator<<(std::ostream& os, const MetaData::Medium& medium)
|
||||
{
|
||||
if (!medium.name.empty())
|
||||
os << medium.name;
|
||||
os << std::endl;
|
||||
if (!medium.name.empty())
|
||||
os << medium.name;
|
||||
os << std::endl;
|
||||
|
||||
if (medium.position)
|
||||
os << "\tPosition: " << *medium.position << std::endl;
|
||||
if (medium.position)
|
||||
os << "\tPosition: " << *medium.position << std::endl;
|
||||
|
||||
if (!medium.type.empty())
|
||||
os << "\tType: " << medium.type << std::endl;
|
||||
if (!medium.type.empty())
|
||||
os << "\tType: " << medium.type << std::endl;
|
||||
|
||||
if (medium.trackCount)
|
||||
std::cout << "\tTrackCount: " << *medium.trackCount << std::endl;
|
||||
if (medium.trackCount)
|
||||
std::cout << "\tTrackCount: " << *medium.trackCount << std::endl;
|
||||
|
||||
if (medium.replayGain)
|
||||
std::cout << "\tReplay gain: " << *medium.replayGain << std::endl;
|
||||
if (medium.replayGain)
|
||||
std::cout << "\tReplay gain: " << *medium.replayGain << std::endl;
|
||||
|
||||
if (medium.release)
|
||||
std::cout << "Release: " << *medium.release << std::endl;
|
||||
if (medium.release)
|
||||
std::cout << "Release: " << *medium.release << std::endl;
|
||||
|
||||
return os;
|
||||
return os;
|
||||
}
|
||||
|
||||
void parse(MetaData::IParser& parser, const std::filesystem::path& file)
|
||||
{
|
||||
using namespace MetaData;
|
||||
using namespace MetaData;
|
||||
|
||||
parser.setClusterTypeNames( {"ALBUMMOOD", "MOOD", "ALBUMGROUPING", "ALBUMGENRE", "GENRE"} );
|
||||
parser.setClusterTypeNames({ "ALBUMMOOD", "MOOD", "ALBUMGROUPING", "ALBUMGENRE", "GENRE" });
|
||||
|
||||
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;
|
||||
}
|
||||
const auto end {std::chrono::steady_clock::now()};
|
||||
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;
|
||||
}
|
||||
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;
|
||||
std::cout << "Parsing time: " << std::fixed << std::setprecision(2) << std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() / 1000. << "ms" << std::endl;
|
||||
|
||||
std::cout << "Parsed metadata:" << std::endl;
|
||||
std::cout << "Parsed metadata:" << std::endl;
|
||||
|
||||
if (!track->artistDisplayName.empty())
|
||||
std::cout << "Display artist: " << track->artistDisplayName << std::endl;
|
||||
if (!track->artistDisplayName.empty())
|
||||
std::cout << "Display artist: " << track->artistDisplayName << std::endl;
|
||||
|
||||
for (const Artist& artist : track->artists)
|
||||
std::cout << "Artist: " << artist << std::endl;
|
||||
for (const Artist& artist : track->artists)
|
||||
std::cout << "Artist: " << artist << std::endl;
|
||||
|
||||
for (const Artist& artist : track->conductorArtists)
|
||||
std::cout << "Conductor: " << artist << std::endl;
|
||||
for (const Artist& artist : track->conductorArtists)
|
||||
std::cout << "Conductor: " << artist << std::endl;
|
||||
|
||||
for (const Artist& artist : track->composerArtists)
|
||||
std::cout << "Composer: " << artist << std::endl;
|
||||
for (const Artist& artist : track->composerArtists)
|
||||
std::cout << "Composer: " << artist << std::endl;
|
||||
|
||||
for (const Artist& artist : track->lyricistArtists)
|
||||
std::cout << "Lyricist: " << artist << std::endl;
|
||||
for (const Artist& artist : track->lyricistArtists)
|
||||
std::cout << "Lyricist: " << artist << std::endl;
|
||||
|
||||
for (const Artist& artist : track->mixerArtists)
|
||||
std::cout << "Mixer: " << artist << std::endl;
|
||||
for (const Artist& artist : track->mixerArtists)
|
||||
std::cout << "Mixer: " << artist << std::endl;
|
||||
|
||||
for (const auto& [role, artists] : track->performerArtists)
|
||||
{
|
||||
std::cout << "Performer";
|
||||
if (!role.empty())
|
||||
std::cout << " (" << role << ")";
|
||||
std::cout << ":" << std::endl;
|
||||
for (const Artist& artist : artists)
|
||||
std::cout << "\t" << artist << std::endl;
|
||||
}
|
||||
for (const auto& [role, artists] : track->performerArtists)
|
||||
{
|
||||
std::cout << "Performer";
|
||||
if (!role.empty())
|
||||
std::cout << " (" << role << ")";
|
||||
std::cout << ":" << std::endl;
|
||||
for (const Artist& artist : artists)
|
||||
std::cout << "\t" << artist << std::endl;
|
||||
}
|
||||
|
||||
for (const Artist& artist : track->producerArtists)
|
||||
std::cout << "Producer: " << artist << std::endl;
|
||||
for (const Artist& artist : track->producerArtists)
|
||||
std::cout << "Producer: " << artist << std::endl;
|
||||
|
||||
for (const Artist& artist : track->remixerArtists)
|
||||
std::cout << "Remixer: " << artist << std::endl;
|
||||
for (const Artist& artist : track->remixerArtists)
|
||||
std::cout << "Remixer: " << artist << std::endl;
|
||||
|
||||
if (track->medium)
|
||||
std::cout << "Medium: " << *track->medium;
|
||||
if (track->medium)
|
||||
std::cout << "Medium: " << *track->medium;
|
||||
|
||||
std::cout << "Title: " << track->title << std::endl;
|
||||
std::cout << "Title: " << track->title << std::endl;
|
||||
|
||||
if (track->mbid)
|
||||
std::cout << "Track MBID = " << track->mbid->getAsString() << std::endl;
|
||||
if (track->mbid)
|
||||
std::cout << "Track MBID = " << track->mbid->getAsString() << std::endl;
|
||||
|
||||
if (track->recordingMBID)
|
||||
std::cout << "Recording MBID = " << track->recordingMBID->getAsString() << std::endl;
|
||||
if (track->recordingMBID)
|
||||
std::cout << "Recording MBID = " << track->recordingMBID->getAsString() << std::endl;
|
||||
|
||||
for (const auto& [tag, values] : track->tags)
|
||||
{
|
||||
std::cout << "Tag: " << tag << std::endl;
|
||||
for (const auto& value : values)
|
||||
{
|
||||
std::cout << "\t" << value << std::endl;
|
||||
}
|
||||
}
|
||||
for (const auto& [tag, values] : track->tags)
|
||||
{
|
||||
std::cout << "Tag: " << tag << std::endl;
|
||||
for (const auto& value : values)
|
||||
{
|
||||
std::cout << "\t" << value << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << "Duration: " << std::fixed << std::setprecision(2) << track->duration.count() / 1000. << "s" << std::endl;
|
||||
std::cout << "Bitrate: " << track->bitrate << " bps" << std::endl;
|
||||
std::cout << "Duration: " << std::fixed << std::setprecision(2) << track->duration.count() / 1000. << "s" << std::endl;
|
||||
std::cout << "Bitrate: " << track->bitrate << " bps" << std::endl;
|
||||
|
||||
if (track->position)
|
||||
std::cout << "Position: " << *track->position << std::endl;
|
||||
if (track->position)
|
||||
std::cout << "Position: " << *track->position << std::endl;
|
||||
|
||||
if (track->date.isValid())
|
||||
std::cout << "Date: " << track->date.toString("yyyy-MM-dd") << std::endl;
|
||||
if (track->date.isValid())
|
||||
std::cout << "Date: " << track->date.toString("yyyy-MM-dd") << std::endl;
|
||||
|
||||
if (track->originalDate.isValid())
|
||||
std::cout << "Original date: " << track->originalDate.toString("yyyy-MM-dd") << std::endl;
|
||||
if (track->originalDate.isValid())
|
||||
std::cout << "Original date: " << track->originalDate.toString("yyyy-MM-dd") << std::endl;
|
||||
|
||||
std::cout << "HasCover = " << std::boolalpha << track->hasCover << std::endl;
|
||||
std::cout << "HasCover = " << std::boolalpha << track->hasCover << std::endl;
|
||||
|
||||
if (track->replayGain)
|
||||
std::cout << "Track replay gain: " << *track->replayGain << std::endl;
|
||||
if (track->replayGain)
|
||||
std::cout << "Track replay gain: " << *track->replayGain << std::endl;
|
||||
|
||||
if (track->acoustID)
|
||||
std::cout << "AcoustID: " << track->acoustID->getAsString() << std::endl;
|
||||
if (track->acoustID)
|
||||
std::cout << "AcoustID: " << track->acoustID->getAsString() << std::endl;
|
||||
|
||||
if (!track->copyright.empty())
|
||||
std::cout << "Copyright: " << track->copyright << std::endl;
|
||||
if (!track->copyright.empty())
|
||||
std::cout << "Copyright: " << track->copyright << std::endl;
|
||||
|
||||
if (!track->copyrightURL.empty())
|
||||
std::cout << "CopyrightURL: " << track->copyrightURL << std::endl;
|
||||
if (!track->copyrightURL.empty())
|
||||
std::cout << "CopyrightURL: " << track->copyrightURL << std::endl;
|
||||
|
||||
std::cout << std::endl;
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
if (argc == 1)
|
||||
{
|
||||
std::cerr << "Usage: <file> [<file> ...]" << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if (argc == 1)
|
||||
{
|
||||
std::cerr << "Usage: <file> [<file> ...]" << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// log to stdout
|
||||
Service<Logger> logger {std::make_unique<StreamLogger>(std::cout)};
|
||||
try
|
||||
{
|
||||
// log to stdout
|
||||
Service<ILogger> logger{ std::make_unique<StreamLogger>(std::cout) };
|
||||
|
||||
for (std::size_t i {}; i < static_cast<std::size_t>(argc - 1); ++i)
|
||||
{
|
||||
std::filesystem::path file {argv[i + 1]};
|
||||
for (std::size_t i{}; i < static_cast<std::size_t>(argc - 1); ++i)
|
||||
{
|
||||
std::filesystem::path file{ argv[i + 1] };
|
||||
|
||||
std::cout << "Parsing file '" << file << "'" << std::endl;
|
||||
std::cout << "Parsing file '" << file << "'" << std::endl;
|
||||
|
||||
{
|
||||
std::cout << "Using av:" << std::endl;
|
||||
auto parser {MetaData::createParser(MetaData::ParserType::AvFormat, MetaData::ParserReadStyle::Accurate)};
|
||||
parse(*parser, file);
|
||||
}
|
||||
{
|
||||
std::cout << "Using av:" << std::endl;
|
||||
auto parser{ MetaData::createParser(MetaData::ParserType::AvFormat, MetaData::ParserReadStyle::Accurate) };
|
||||
parse(*parser, file);
|
||||
}
|
||||
|
||||
{
|
||||
std::cout << "Using TagLib:" << std::endl;
|
||||
auto parser {MetaData::createParser(MetaData::ParserType::TagLib, MetaData::ParserReadStyle::Accurate)};
|
||||
parse(*parser, file);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
std::cerr << "Caught exception: " << e.what() << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
{
|
||||
std::cout << "Using TagLib:" << std::endl;
|
||||
auto parser{ MetaData::createParser(MetaData::ParserType::TagLib, MetaData::ParserReadStyle::Accurate) };
|
||||
parse(*parser, file);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
std::cerr << "Caught exception: " << e.what() << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ static void dumpTracksRecommendation(Session session, Recommendation::IRecommend
|
||||
for (auto artist : track->getArtists({ TrackArtistLinkType::Artist }))
|
||||
res += " - " + artist->getName();
|
||||
for (auto cluster : track->getClusters())
|
||||
res += " {" + cluster->getType()->getName() + "-" + std::string{ cluster->getName() } + "}";
|
||||
res += " {" + std::string{ cluster->getType()->getName() } + "-" + std::string{ cluster->getName() } + "}";
|
||||
|
||||
return res;
|
||||
};
|
||||
@@ -131,7 +131,7 @@ int main(int argc, char* argv[])
|
||||
namespace po = boost::program_options;
|
||||
|
||||
// log to stdout
|
||||
Service<Logger> logger{ std::make_unique<StreamLogger>(std::cout) };
|
||||
Service<ILogger> logger{ std::make_unique<StreamLogger>(std::cout) };
|
||||
|
||||
po::options_description desc{ "Allowed options" };
|
||||
desc.add_options()
|
||||
|
||||
Reference in New Issue
Block a user