From 0b6d02c18656942f0a3c90ca33fb29f18e39aa2d Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 7 Jan 2026 15:46:47 -0600 Subject: [PATCH] fix: use URL base path (#8077) Xref: feat: Remote session RPC url path change option qt client (#7561) --- libtransmission/quark.cc | 2 +- libtransmission/quark.h | 2 +- libtransmission/transmission.h | 4 ++++ qt/Prefs.cc | 4 ++-- qt/Prefs.h | 2 +- qt/Session.cc | 10 ++++++++-- qt/SessionDialog.cc | 4 ++-- qt/SessionDialog.ui | 2 +- 8 files changed, 20 insertions(+), 10 deletions(-) diff --git a/libtransmission/quark.cc b/libtransmission/quark.cc index e9555e40b..97b47df1e 100644 --- a/libtransmission/quark.cc +++ b/libtransmission/quark.cc @@ -474,7 +474,7 @@ auto constexpr MyStatic = std::array{ "remote_session_password"sv, // qt app "remote_session_port"sv, // qt app "remote_session_requires_authentication"sv, // qt app - "remote_session_rpc_url_path"sv, // qt app + "remote_session_url_base_path"sv, // qt app "remote_session_username"sv, // qt app "removed"sv, // rpc "rename-partial-files"sv, // rpc, tr_session::Settings diff --git a/libtransmission/quark.h b/libtransmission/quark.h index c1d3f58e8..0a42044b6 100644 --- a/libtransmission/quark.h +++ b/libtransmission/quark.h @@ -487,7 +487,7 @@ enum // NOLINT(performance-enum-size) TR_KEY_remote_session_password, TR_KEY_remote_session_port, TR_KEY_remote_session_requires_authentication, - TR_KEY_remote_session_rpc_url_path, + TR_KEY_remote_session_url_base_path, TR_KEY_remote_session_username, TR_KEY_removed, TR_KEY_rename_partial_files_kebab_APICOMPAT, diff --git a/libtransmission/transmission.h b/libtransmission/transmission.h index 7282e99eb..8b2fefc50 100644 --- a/libtransmission/transmission.h +++ b/libtransmission/transmission.h @@ -145,6 +145,10 @@ inline auto constexpr TrDefaultPeerLimitGlobal = 200U; #define TR_DEFAULT_PEER_LIMIT_TORRENT_STR "50" inline auto constexpr TrDefaultPeerLimitTorrent = 50U; +inline auto constexpr TrHttpServerDefaultBasePath = std::string_view{ TR_DEFAULT_RPC_URL_STR }; +inline auto constexpr TrHttpServerRpcRelativePath = std::string_view{ "rpc" }; +inline auto constexpr TrHttpServerWebRelativePath = std::string_view{ "web/" }; + std::unique_lock tr_sessionLock(tr_session const* session); /** diff --git a/qt/Prefs.cc b/qt/Prefs.cc index 4dae6e13e..068064d29 100644 --- a/qt/Prefs.cc +++ b/qt/Prefs.cc @@ -103,7 +103,7 @@ std::array const Prefs::Items{ { SESSION_REMOTE_PORT, TR_KEY_remote_session_port, QMetaType::Int }, { SESSION_REMOTE_AUTH, TR_KEY_remote_session_requires_authentication, QMetaType::Bool }, { SESSION_REMOTE_USERNAME, TR_KEY_remote_session_username, QMetaType::QString }, - { SESSION_REMOTE_RPC_URL_PATH, TR_KEY_remote_session_rpc_url_path, QMetaType::QString }, + { SESSION_REMOTE_URL_BASE_PATH, TR_KEY_remote_session_url_base_path, QMetaType::QString }, { COMPLETE_SOUND_COMMAND, TR_KEY_torrent_complete_sound_command, QMetaType::QStringList }, { COMPLETE_SOUND_ENABLED, TR_KEY_torrent_complete_sound_enabled, QMetaType::Bool }, { READ_CLIPBOARD, TR_KEY_read_clipboard, QMetaType::Bool }, @@ -383,7 +383,7 @@ tr_variant Prefs::get_default_app_settings() settings.try_emplace(TR_KEY_remote_session_password, tr_variant::unmanaged_string(""sv)); settings.try_emplace(TR_KEY_remote_session_port, TrDefaultRpcPort); settings.try_emplace(TR_KEY_remote_session_requires_authentication, false); - settings.try_emplace(TR_KEY_remote_session_rpc_url_path, tr_variant::unmanaged_string(TR_DEFAULT_RPC_URL_STR "rpc")); + settings.try_emplace(TR_KEY_remote_session_url_base_path, tr_variant::unmanaged_string(TrHttpServerDefaultBasePath)); settings.try_emplace(TR_KEY_remote_session_username, tr_variant::unmanaged_string(""sv)); settings.try_emplace(TR_KEY_show_backup_trackers, false); settings.try_emplace(TR_KEY_show_filterbar, true); diff --git a/qt/Prefs.h b/qt/Prefs.h index 054be6fbc..d91ed7610 100644 --- a/qt/Prefs.h +++ b/qt/Prefs.h @@ -66,7 +66,7 @@ public: SESSION_REMOTE_PORT, SESSION_REMOTE_AUTH, SESSION_REMOTE_USERNAME, - SESSION_REMOTE_RPC_URL_PATH, + SESSION_REMOTE_URL_BASE_PATH, COMPLETE_SOUND_COMMAND, COMPLETE_SOUND_ENABLED, READ_CLIPBOARD, diff --git a/qt/Session.cc b/qt/Session.cc index 9a7a802ff..0c5c7f970 100644 --- a/qt/Session.cc +++ b/qt/Session.cc @@ -347,7 +347,10 @@ void Session::start() } url.setHost(prefs_.get(Prefs::SESSION_REMOTE_HOST)); url.setPort(prefs_.get(Prefs::SESSION_REMOTE_PORT)); - url.setPath(prefs_.get(Prefs::SESSION_REMOTE_RPC_URL_PATH)); + + auto const root_path = prefs_.get(Prefs::SESSION_REMOTE_URL_BASE_PATH); + auto const relative_path = TrHttpServerRpcRelativePath; + url.setPath(root_path + QString::fromUtf8(relative_path.data(), relative_path.size())); if (prefs_.get(Prefs::SESSION_REMOTE_AUTH)) { @@ -1162,7 +1165,10 @@ void Session::launchWebInterface() const if (session_ == nullptr) // remote session { url = rpc_.url(); - url.setPath(QStringLiteral("/transmission/web/")); + + auto const root_path = prefs_.get(Prefs::SESSION_REMOTE_URL_BASE_PATH); + auto const relative_path = TrHttpServerWebRelativePath; + url.setPath(root_path + QString::fromUtf8(relative_path.data(), relative_path.size())); } else // local session { diff --git a/qt/SessionDialog.cc b/qt/SessionDialog.cc index 6224cd414..3363ce222 100644 --- a/qt/SessionDialog.cc +++ b/qt/SessionDialog.cc @@ -19,7 +19,7 @@ void SessionDialog::accept() prefs_.set(Prefs::SESSION_REMOTE_AUTH, ui_.authCheck->isChecked()); prefs_.set(Prefs::SESSION_REMOTE_USERNAME, ui_.usernameEdit->text()); prefs_.set(Prefs::SESSION_REMOTE_PASSWORD, ui_.passwordEdit->text()); - prefs_.set(Prefs::SESSION_REMOTE_RPC_URL_PATH, ui_.rpcEdit->text()); + prefs_.set(Prefs::SESSION_REMOTE_URL_BASE_PATH, ui_.rpcEdit->text()); session_.restart(); BaseDialog::accept(); } @@ -73,7 +73,7 @@ SessionDialog::SessionDialog(Session& session, Prefs& prefs, QWidget* parent) ui_.passwordEdit->setText(prefs.get(Prefs::SESSION_REMOTE_PASSWORD)); auth_widgets_ << ui_.passwordLabel << ui_.passwordEdit; - ui_.rpcEdit->setText(prefs.get(Prefs::SESSION_REMOTE_RPC_URL_PATH)); + ui_.rpcEdit->setText(prefs.get(Prefs::SESSION_REMOTE_URL_BASE_PATH)); remote_widgets_ << ui_.rpcLabel << ui_.rpcEdit; resensitize(); diff --git a/qt/SessionDialog.ui b/qt/SessionDialog.ui index 9aa714921..de6efdfcb 100644 --- a/qt/SessionDialog.ui +++ b/qt/SessionDialog.ui @@ -110,7 +110,7 @@ - RPC URL pa&th: + Remote root pa&th: rpcEdit