Centralized default path for config file, fixes #525

This commit is contained in:
emeric
2024-10-04 10:07:59 +02:00
parent 55c7dea8d8
commit 0f626f7716
5 changed files with 193 additions and 147 deletions
@@ -0,0 +1,27 @@
/*
* Copyright (C) 2024 Emeric Poupon
*
* This file is part of LMS.
*
* LMS is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* LMS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with LMS. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <filesystem>
namespace lms::core
{
static inline const std::filesystem::path sysconfDirectory{ "/etc" };
}
+22 -6
View File
@@ -30,6 +30,7 @@
#include "core/ITraceLogger.hpp" #include "core/ITraceLogger.hpp"
#include "core/Service.hpp" #include "core/Service.hpp"
#include "core/String.hpp" #include "core/String.hpp"
#include "core/SystemPaths.hpp"
#include "core/WtLogger.hpp" #include "core/WtLogger.hpp"
#include "database/Db.hpp" #include "database/Db.hpp"
#include "database/Session.hpp" #include "database/Session.hpp"
@@ -50,6 +51,8 @@
namespace lms namespace lms
{ {
namespace
{
std::size_t getThreadCount() std::size_t getThreadCount()
{ {
const unsigned long configHttpServerThreadCount{ core::Service<core::IConfig>::get()->getULong("http-server-thread-count", 0) }; const unsigned long configHttpServerThreadCount{ core::Service<core::IConfig>::get()->getULong("http-server-thread-count", 0) };
@@ -208,22 +211,35 @@ namespace lms
}); });
}); });
} }
} // namespace
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
std::filesystem::path configFilePath{ "/etc/lms.conf" }; std::filesystem::path configFilePath{ core::sysconfDirectory / "lms.conf" };
int res{ EXIT_FAILURE }; int res{ EXIT_FAILURE };
assert(argc > 0); assert(argc > 0);
assert(argv[0] != NULL); assert(argv[0] != NULL);
if (argc == 2) auto displayUsage{ [&](std::ostream& os) {
configFilePath = std::string(argv[1], 0, 256); os << "Usage:\t" << argv[0] << "\t[conf_file]\n\n"
else if (argc > 2)
{
std::cerr << "Usage:\t" << argv[0] << "\t[conf_file]\n\n"
<< "Options:\n" << "Options:\n"
<< "\tconf_file:\t path to the LMS configuration file (defaults to " << configFilePath << ")\n\n"; << "\tconf_file:\t path to the LMS configuration file (defaults to " << configFilePath << ")\n\n";
} };
if (argc == 2)
{
const std::string_view arg{ argv[1] };
if (arg == "-h" || arg == "--help")
{
displayUsage(std::cout);
return EXIT_SUCCESS;
}
configFilePath = std::string(arg, 0, 256);
}
else if (argc > 2)
{
displayUsage(std::cerr);
return EXIT_FAILURE; return EXIT_FAILURE;
} }
+2 -1
View File
@@ -28,6 +28,7 @@
#include "core/ILogger.hpp" #include "core/ILogger.hpp"
#include "core/Service.hpp" #include "core/Service.hpp"
#include "core/StreamLogger.hpp" #include "core/StreamLogger.hpp"
#include "core/SystemPaths.hpp"
#include "database/Db.hpp" #include "database/Db.hpp"
#include "database/Release.hpp" #include "database/Release.hpp"
#include "database/Session.hpp" #include "database/Session.hpp"
@@ -66,7 +67,7 @@ int main(int argc, char* argv[])
core::Service<core::logging::ILogger> logger{ std::make_unique<core::logging::StreamLogger>(std::cout) }; core::Service<core::logging::ILogger> logger{ std::make_unique<core::logging::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)"); desc.add_options()("help,h", "print usage message")("conf,c", po::value<std::string>()->default_value(core::sysconfDirectory / "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::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm); po::store(po::parse_command_line(argc, argv, desc), vm);
+2 -1
View File
@@ -32,6 +32,7 @@
#include "core/Random.hpp" #include "core/Random.hpp"
#include "core/Service.hpp" #include "core/Service.hpp"
#include "core/StreamLogger.hpp" #include "core/StreamLogger.hpp"
#include "core/SystemPaths.hpp"
#include "database/Artist.hpp" #include "database/Artist.hpp"
#include "database/Cluster.hpp" #include "database/Cluster.hpp"
#include "database/Db.hpp" #include "database/Db.hpp"
@@ -177,7 +178,7 @@ 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("/etc/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"); 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");
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);
@@ -27,6 +27,7 @@
#include "core/IConfig.hpp" #include "core/IConfig.hpp"
#include "core/Service.hpp" #include "core/Service.hpp"
#include "core/StreamLogger.hpp" #include "core/StreamLogger.hpp"
#include "core/SystemPaths.hpp"
#include "database/Artist.hpp" #include "database/Artist.hpp"
#include "database/Cluster.hpp" #include "database/Cluster.hpp"
#include "database/Db.hpp" #include "database/Db.hpp"
@@ -132,7 +133,7 @@ int main(int argc, char* argv[])
core::Service<core::logging::ILogger> logger{ std::make_unique<core::logging::StreamLogger>(std::cout) }; core::Service<core::logging::ILogger> logger{ std::make_unique<core::logging::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")("artists,a", "Display recommendation for artists")("releases,r", "Display recommendation for releases")("tracks,t", "Display recommendation for tracks")("max,m", po::value<unsigned>()->default_value(3), "Max similarity result count"); desc.add_options()("help,h", "print usage message")("conf,c", po::value<std::string>()->default_value(core::sysconfDirectory / "lms.conf"), "LMS config file")("artists,a", "Display recommendation for artists")("releases,r", "Display recommendation for releases")("tracks,t", "Display recommendation for tracks")("max,m", po::value<unsigned>()->default_value(3), "Max similarity result count");
po::variables_map vm; po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm); po::store(po::parse_command_line(argc, argv, desc), vm);