Added embedded image support in the db generator

This commit is contained in:
emeric
2025-07-06 23:38:05 +02:00
parent 4fcdf2003c
commit 385625b6f7
+24 -1
View File
@@ -40,6 +40,8 @@
#include "database/Session.hpp" #include "database/Session.hpp"
#include "database/Track.hpp" #include "database/Track.hpp"
#include "database/TrackArtistLink.hpp" #include "database/TrackArtistLink.hpp"
#include "database/TrackEmbeddedImage.hpp"
#include "database/TrackEmbeddedImageLink.hpp"
namespace lms namespace lms
{ {
@@ -52,6 +54,7 @@ namespace lms
float compilationRatio{ 0.1 }; float compilationRatio{ 0.1 };
std::size_t genreCountPerTrack{ 3 }; std::size_t genreCountPerTrack{ 3 };
std::size_t moodCountPerTrack{ 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 genreCount{ 50 };
std::size_t moodCount{ 25 }; std::size_t moodCount{ 25 };
std::filesystem::path trackPath; std::filesystem::path trackPath;
@@ -94,6 +97,10 @@ namespace lms
if (!context.mediaLibraries.empty()) if (!context.mediaLibraries.empty())
mediaLibrary = *core::random::pickRandom(context.mediaLibraries); mediaLibrary = *core::random::pickRandom(context.mediaLibraries);
std::vector<TrackEmbeddedImage::pointer> trackEmbeddedImages;
for (std::size_t i{}; i < params.trackEmbeddedImagePerRelease; ++i)
trackEmbeddedImages.push_back(context.session.create<TrackEmbeddedImage>());
for (std::size_t i{}; i < params.trackCountPerRelease; ++i) for (std::size_t i{}; i < params.trackCountPerRelease; ++i)
{ {
Track::pointer track{ context.session.create<Track>() }; Track::pointer track{ context.session.create<Track>() };
@@ -112,6 +119,9 @@ namespace lms
TrackArtistLink::create(context.session, track, artist, TrackArtistLinkType::Artist); TrackArtistLink::create(context.session, track, artist, TrackArtistLinkType::Artist);
TrackArtistLink::create(context.session, track, artist, TrackArtistLinkType::ReleaseArtist); TrackArtistLink::create(context.session, track, artist, TrackArtistLinkType::ReleaseArtist);
if (!trackEmbeddedImages.empty())
context.session.create<TrackEmbeddedImageLink>(track, *core::random::pickRandom(trackEmbeddedImages));
std::vector<ObjectPtr<Cluster>> clusters; std::vector<ObjectPtr<Cluster>> clusters;
if (!context.genres.empty()) if (!context.genres.empty())
clusters.push_back(*core::random::pickRandom(context.genres)); clusters.push_back(*core::random::pickRandom(context.genres));
@@ -177,7 +187,19 @@ int main(int argc, char* argv[])
const GeneratorParameters defaultParams; const GeneratorParameters defaultParams;
program_options::options_description options{ "Options" }; program_options::options_description options{ "Options" };
options.add_options()("conf,c", program_options::value<std::string>()->default_value(core::sysconfDirectory / "lms.conf"), "lms config file")("media-library-count", program_options::value<unsigned>()->default_value(defaultParams.mediaLibraryCount), "Number of media libraries to use")("release-count-per-batch", program_options::value<unsigned>()->default_value(defaultParams.releaseCountPerBatch), "Number of releases to generate before committing transaction")("release-count", program_options::value<unsigned>()->default_value(defaultParams.releaseCount), "Number of releases to generate")("track-count-per-release", program_options::value<unsigned>()->default_value(defaultParams.trackCountPerRelease), "Number of tracks per release")("compilation-ratio", program_options::value<float>()->default_value(defaultParams.compilationRatio), "Compilation ratio (compilation means all tracks have a different artist)")("track-path", program_options::value<std::string>()->required(), "Path of a valid track file, that will be used for all generated tracks")("genre-count", program_options::value<unsigned>()->default_value(defaultParams.genreCount), "Number of genres to generate")("genre-count-per-track", program_options::value<unsigned>()->default_value(defaultParams.genreCountPerTrack), "Number of genres to assign to each track")("mood-count", program_options::value<unsigned>()->default_value(defaultParams.moodCount), "Number of moods to generate")("mood-count-per-track", program_options::value<unsigned>()->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<std::string>()->default_value(core::sysconfDirectory / "lms.conf"), "lms config file")
("media-library-count", program_options::value<unsigned>()->default_value(defaultParams.mediaLibraryCount), "Number of media libraries to use")
("release-count-per-batch",program_options::value<unsigned>()->default_value(defaultParams.releaseCountPerBatch), "Number of releases to generate before committing transaction")
("release-count",program_options::value<unsigned>()->default_value(defaultParams.releaseCount), "Number of releases to generate")
("track-count-per-release", program_options::value<unsigned>()->default_value(defaultParams.trackCountPerRelease), "Number of tracks per release")
("track-embedded-image-count",program_options::value<unsigned>()->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<float>()->default_value(defaultParams.compilationRatio), "Compilation ratio (compilation means all tracks have a different artist)")
("track-path",program_options::value<std::string>()->required(), "Path of a valid track file, that will be used for all generated tracks")("genre-count", program_options::value<unsigned>()->default_value(defaultParams.genreCount), "Number of genres to generate")("genre-count-per-track", program_options::value<unsigned>()->default_value(defaultParams.genreCountPerTrack), "Number of genres to assign to each track")("mood-count", program_options::value<unsigned>()->default_value(defaultParams.moodCount), "Number of moods to generate")
("mood-count-per-track", program_options::value<unsigned>()->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::variables_map vm;
program_options::store(program_options::parse_command_line(argc, argv, options), 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<unsigned>(); genParams.releaseCount = vm["release-count"].as<unsigned>();
genParams.trackCountPerRelease = vm["track-count-per-release"].as<unsigned>(); genParams.trackCountPerRelease = vm["track-count-per-release"].as<unsigned>();
genParams.compilationRatio = vm["compilation-ratio"].as<float>(); genParams.compilationRatio = vm["compilation-ratio"].as<float>();
genParams.trackEmbeddedImagePerRelease = vm["track-embedded-image-count"].as<unsigned>();
genParams.trackPath = std::filesystem::path{ vm["track-path"].as<std::string>() }; genParams.trackPath = std::filesystem::path{ vm["track-path"].as<std::string>() };
if (!std::filesystem::exists(genParams.trackPath)) if (!std::filesystem::exists(genParams.trackPath))