diff --git a/src/tools/db-generator/LmsDbGenerator.cpp b/src/tools/db-generator/LmsDbGenerator.cpp index f251facb..29d56103 100644 --- a/src/tools/db-generator/LmsDbGenerator.cpp +++ b/src/tools/db-generator/LmsDbGenerator.cpp @@ -40,6 +40,8 @@ #include "database/Session.hpp" #include "database/Track.hpp" #include "database/TrackArtistLink.hpp" +#include "database/TrackEmbeddedImage.hpp" +#include "database/TrackEmbeddedImageLink.hpp" namespace lms { @@ -52,6 +54,7 @@ namespace lms float compilationRatio{ 0.1 }; std::size_t genreCountPerTrack{ 3 }; std::size_t moodCountPerTrack{ 3 }; + std::size_t trackEmbeddedImagePerRelease{ 1 }; // usual case: one same image saved on each track std::size_t genreCount{ 50 }; std::size_t moodCount{ 25 }; std::filesystem::path trackPath; @@ -94,6 +97,10 @@ namespace lms if (!context.mediaLibraries.empty()) mediaLibrary = *core::random::pickRandom(context.mediaLibraries); + std::vector trackEmbeddedImages; + for (std::size_t i{}; i < params.trackEmbeddedImagePerRelease; ++i) + trackEmbeddedImages.push_back(context.session.create()); + for (std::size_t i{}; i < params.trackCountPerRelease; ++i) { Track::pointer track{ context.session.create() }; @@ -112,6 +119,9 @@ namespace lms TrackArtistLink::create(context.session, track, artist, TrackArtistLinkType::Artist); TrackArtistLink::create(context.session, track, artist, TrackArtistLinkType::ReleaseArtist); + if (!trackEmbeddedImages.empty()) + context.session.create(track, *core::random::pickRandom(trackEmbeddedImages)); + std::vector> clusters; if (!context.genres.empty()) clusters.push_back(*core::random::pickRandom(context.genres)); @@ -177,7 +187,19 @@ int main(int argc, char* argv[]) const GeneratorParameters defaultParams; program_options::options_description options{ "Options" }; - options.add_options()("conf,c", program_options::value()->default_value(core::sysconfDirectory / "lms.conf"), "lms config file")("media-library-count", program_options::value()->default_value(defaultParams.mediaLibraryCount), "Number of media libraries to use")("release-count-per-batch", program_options::value()->default_value(defaultParams.releaseCountPerBatch), "Number of releases to generate before committing transaction")("release-count", program_options::value()->default_value(defaultParams.releaseCount), "Number of releases to generate")("track-count-per-release", program_options::value()->default_value(defaultParams.trackCountPerRelease), "Number of tracks per release")("compilation-ratio", program_options::value()->default_value(defaultParams.compilationRatio), "Compilation ratio (compilation means all tracks have a different artist)")("track-path", program_options::value()->required(), "Path of a valid track file, that will be used for all generated tracks")("genre-count", program_options::value()->default_value(defaultParams.genreCount), "Number of genres to generate")("genre-count-per-track", program_options::value()->default_value(defaultParams.genreCountPerTrack), "Number of genres to assign to each track")("mood-count", program_options::value()->default_value(defaultParams.moodCount), "Number of moods to generate")("mood-count-per-track", program_options::value()->default_value(defaultParams.moodCountPerTrack), "Number of moods to assign to each track")("help,h", "produce help message"); + + // clang-format off + options.add_options() + ("conf,c", program_options::value()->default_value(core::sysconfDirectory / "lms.conf"), "lms config file") + ("media-library-count", program_options::value()->default_value(defaultParams.mediaLibraryCount), "Number of media libraries to use") + ("release-count-per-batch",program_options::value()->default_value(defaultParams.releaseCountPerBatch), "Number of releases to generate before committing transaction") + ("release-count",program_options::value()->default_value(defaultParams.releaseCount), "Number of releases to generate") + ("track-count-per-release", program_options::value()->default_value(defaultParams.trackCountPerRelease), "Number of tracks per release") + ("track-embedded-image-count",program_options::value()->default_value(defaultParams.trackEmbeddedImagePerRelease), "Number of different embedded track images for the whole release (each track has one different embedded image)") + ("compilation-ratio",program_options::value()->default_value(defaultParams.compilationRatio), "Compilation ratio (compilation means all tracks have a different artist)") + ("track-path",program_options::value()->required(), "Path of a valid track file, that will be used for all generated tracks")("genre-count", program_options::value()->default_value(defaultParams.genreCount), "Number of genres to generate")("genre-count-per-track", program_options::value()->default_value(defaultParams.genreCountPerTrack), "Number of genres to assign to each track")("mood-count", program_options::value()->default_value(defaultParams.moodCount), "Number of moods to generate") + ("mood-count-per-track", program_options::value()->default_value(defaultParams.moodCountPerTrack), "Number of moods to assign to each track")("help,h", "produce help message"); + // clang-format on program_options::variables_map vm; program_options::store(program_options::parse_command_line(argc, argv, options), vm); @@ -197,6 +219,7 @@ int main(int argc, char* argv[]) genParams.releaseCount = vm["release-count"].as(); genParams.trackCountPerRelease = vm["track-count-per-release"].as(); genParams.compilationRatio = vm["compilation-ratio"].as(); + genParams.trackEmbeddedImagePerRelease = vm["track-embedded-image-count"].as(); genParams.trackPath = std::filesystem::path{ vm["track-path"].as() }; if (!std::filesystem::exists(genParams.trackPath))