From fcd1e2ff8a1535f69f6d3f9e365c6a952e7d1206 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 15 Dec 2025 13:44:38 -0600 Subject: [PATCH] refactor: simplify `tr_sessionLoadSettings()` args (#7935) * refactor: remove unused appname arg from tr_sessionLoadSettings() * refactor: swap order of arguments to tr_sessionLoadSettings() so way the optional arg can go at the end --- cli/cli.cc | 2 +- daemon/daemon.cc | 2 +- gtk/Prefs.cc | 2 +- libtransmission/session.cc | 16 +++++++--------- libtransmission/transmission.h | 5 ++--- qt/Prefs.cc | 2 +- qt/Session.cc | 2 +- 7 files changed, 14 insertions(+), 17 deletions(-) diff --git a/cli/cli.cc b/cli/cli.cc index c1b560e09..101d6d494 100644 --- a/cli/cli.cc +++ b/cli/cli.cc @@ -326,7 +326,7 @@ int tr_main(int argc, char* argv[]) /* load the defaults from config file + libtransmission defaults */ auto const config_dir = getConfigDir(argc, (char const**)argv); - auto settings = tr_sessionLoadSettings(nullptr, config_dir.c_str(), MyConfigName); + auto settings = tr_sessionLoadSettings(config_dir); /* the command line overrides defaults */ if (parseCommandLine(&settings, argc, (char const**)argv) != 0) diff --git a/daemon/daemon.cc b/daemon/daemon.cc index 51254ca95..375e79b4b 100644 --- a/daemon/daemon.cc +++ b/daemon/daemon.cc @@ -402,7 +402,7 @@ tr_variant load_settings(char const* config_dir) app_defaults_map.try_emplace(TR_KEY_start_paused, false); app_defaults_map.try_emplace(TR_KEY_pidfile, tr_variant::unmanaged_string(""sv)); auto const app_defaults = tr_variant{ std::move(app_defaults_map) }; - return tr_sessionLoadSettings(&app_defaults, config_dir, MyName); + return tr_sessionLoadSettings(config_dir, &app_defaults); } } // namespace diff --git a/gtk/Prefs.cc b/gtk/Prefs.cc index 57f84997f..a1803c0f1 100644 --- a/gtk/Prefs.cc +++ b/gtk/Prefs.cc @@ -108,7 +108,7 @@ tr_variant& getPrefs() if (!settings.has_value()) { auto const app_defaults = get_default_app_settings(); - settings.merge(tr_sessionLoadSettings(&app_defaults, gl_confdir.c_str(), nullptr)); + settings.merge(tr_sessionLoadSettings(gl_confdir, &app_defaults)); ensure_sound_cmd_is_a_list(&settings); } diff --git a/libtransmission/session.cc b/libtransmission/session.cc index b4fb04e5e..3a7d0a191 100644 --- a/libtransmission/session.cc +++ b/libtransmission/session.cc @@ -479,23 +479,21 @@ tr_variant tr_sessionGetSettings(tr_session const* session) return settings; } -tr_variant tr_sessionLoadSettings(tr_variant const* app_defaults, char const* config_dir, char const* app_name) +tr_variant tr_sessionLoadSettings(std::string_view const config_dir, tr_variant const* const app_defaults) { + // start with session defaults... auto settings = tr_sessionGetDefaultSettings(); - // if app defaults are provided, override libtransmission defaults + // ...app defaults (if provided) override session defaults... if (app_defaults != nullptr && app_defaults->holds_alternative()) { settings.merge(*app_defaults); } - // if a settings file exists, use it to override the defaults - if (auto const filename = fmt::format( - "{:s}/settings.json", - config_dir != nullptr ? config_dir : tr_getDefaultConfigDir(app_name)); - tr_sys_path_exists(filename)) + // ...and settings.json (if available) override the defaults + if (auto const filename = fmt::format("{:s}/settings.json", config_dir); tr_sys_path_exists(filename)) { - if (auto file_settings = tr_variant_serde::json().parse_file(filename); file_settings) + if (auto const file_settings = tr_variant_serde::json().parse_file(filename)) { settings.merge(*file_settings); } @@ -563,7 +561,7 @@ tr_session* tr_sessionInit(char const* config_dir, bool message_queueing_enabled // - client settings // - previous session's values in settings.json // - hardcoded defaults - auto settings = tr_sessionLoadSettings(nullptr, config_dir, nullptr); + auto settings = tr_sessionLoadSettings(config_dir); settings.merge(client_settings); // if logging is desired, start it now before doing more work diff --git a/libtransmission/transmission.h b/libtransmission/transmission.h index a4367f18f..3642bbdd9 100644 --- a/libtransmission/transmission.h +++ b/libtransmission/transmission.h @@ -179,15 +179,14 @@ tr_variant tr_sessionGetSettings(tr_session const* session); * * TODO: if we ever make libtransmissionapp, this would go there. * - * @param app_defaults tr_variant containing the app defaults * @param config_dir the configuration directory to find settings.json - * @param app_name if config_dir is empty, app_name is used to find the default dir. + * @param app_defaults optional tr_variant containing the app-specific defaults * @return the loaded settings * @see `tr_sessionGetDefaultSettings()` * @see `tr_sessionInit()` * @see `tr_sessionSaveSettings()` */ -tr_variant tr_sessionLoadSettings(tr_variant const* app_defaults, char const* config_dir, char const* app_name); +[[nodiscard]] tr_variant tr_sessionLoadSettings(std::string_view config_dir, tr_variant const* app_defaults = nullptr); /** * Add the session's configuration settings to the benc dictionary diff --git a/qt/Prefs.cc b/qt/Prefs.cc index 0333f0133..5248bc5b2 100644 --- a/qt/Prefs.cc +++ b/qt/Prefs.cc @@ -238,7 +238,7 @@ Prefs::Prefs(QString config_dir) #endif auto const app_defaults = get_default_app_settings(); - auto settings = tr_sessionLoadSettings(&app_defaults, config_dir_.toUtf8().constData(), nullptr); + auto settings = tr_sessionLoadSettings(config_dir_.toStdString(), &app_defaults); ensureSoundCommandIsAList(&settings); for (int i = 0; i < PREFS_COUNT; ++i) diff --git a/qt/Session.cc b/qt/Session.cc index 8dfd4b613..a25b38233 100644 --- a/qt/Session.cc +++ b/qt/Session.cc @@ -371,7 +371,7 @@ void Session::start() } else { - auto const settings = tr_sessionLoadSettings(nullptr, config_dir_.toUtf8().constData(), "qt"); + auto const settings = tr_sessionLoadSettings(config_dir_.toStdString()); session_ = tr_sessionInit(config_dir_.toUtf8().constData(), true, settings); rpc_.start(session_);