From a5d09b29ff9f7218919a9b7de92a90e31d190938 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 11 Nov 2025 09:31:19 -0600 Subject: [PATCH] chore: move tr_rpc_parse_list_str() from libtransmission to remote.cc (#7797) libtransmission hasn't used this since 822fabb2 (#3549) --- libtransmission/rpcimpl.cc | 30 ---------------------- libtransmission/rpcimpl.h | 3 --- tests/libtransmission/rpc-test.cc | 41 ------------------------------- utils/remote.cc | 28 ++++++++++++++++++++- 4 files changed, 27 insertions(+), 75 deletions(-) diff --git a/libtransmission/rpcimpl.cc b/libtransmission/rpcimpl.cc index ea6ccc76d..3114315c6 100644 --- a/libtransmission/rpcimpl.cc +++ b/libtransmission/rpcimpl.cc @@ -2217,33 +2217,3 @@ void tr_rpc_request_exec(tr_session* session, tr_variant const& request, tr_rpc_ callback(session, tr_variant{ std::move(response) }); } - -/** - * Munge the URI into a usable form. - * - * We have very loose typing on this to make the URIs as simple as possible: - * - anything not a 'tag' or 'method' is automatically in 'arguments' - * - values that are all-digits are numbers - * - values that are all-digits or commas are number lists - * - all other values are strings - */ -tr_variant tr_rpc_parse_list_str(std::string_view str) -{ - auto const values = tr_num_parse_range(str); - auto const n_values = std::size(values); - - if (n_values == 0) - { - return { str }; - } - - if (n_values == 1) - { - return { values[0] }; - } - - auto num_vec = tr_variant::Vector{}; - num_vec.resize(n_values); - std::copy_n(std::cbegin(values), n_values, std::begin(num_vec)); - return { std::move(num_vec) }; -} diff --git a/libtransmission/rpcimpl.h b/libtransmission/rpcimpl.h index 8c5845d1c..700ab044f 100644 --- a/libtransmission/rpcimpl.h +++ b/libtransmission/rpcimpl.h @@ -6,7 +6,6 @@ #pragma once #include -#include struct tr_session; struct tr_variant; @@ -14,5 +13,3 @@ struct tr_variant; using tr_rpc_response_func = std::function; void tr_rpc_request_exec(tr_session* session, tr_variant const& request, tr_rpc_response_func&& callback = {}); - -tr_variant tr_rpc_parse_list_str(std::string_view str); diff --git a/tests/libtransmission/rpc-test.cc b/tests/libtransmission/rpc-test.cc index 18d1996a1..e0f3ccec9 100644 --- a/tests/libtransmission/rpc-test.cc +++ b/tests/libtransmission/rpc-test.cc @@ -30,47 +30,6 @@ namespace libtransmission::test using RpcTest = SessionTest; -TEST_F(RpcTest, list) -{ - auto top = tr_rpc_parse_list_str("12"sv); - auto i = top.value_if(); - ASSERT_TRUE(i); - EXPECT_EQ(12, *i); - - top = tr_rpc_parse_list_str("6,7"sv); - auto* v = top.get_if(); - ASSERT_NE(v, nullptr); - EXPECT_EQ(2U, std::size(*v)); - i = (*v)[0].value_if(); - ASSERT_TRUE(i); - EXPECT_EQ(6, *i); - i = (*v)[1].value_if(); - ASSERT_TRUE(i); - EXPECT_EQ(7, *i); - - top = tr_rpc_parse_list_str("asdf"sv); - auto sv = top.value_if(); - ASSERT_TRUE(sv); - EXPECT_EQ("asdf"sv, *sv); - - top = tr_rpc_parse_list_str("1,3-5"sv); - v = top.get_if(); - ASSERT_NE(v, nullptr); - EXPECT_EQ(4U, std::size(*v)); - i = (*v)[0].value_if(); - ASSERT_TRUE(i); - EXPECT_EQ(1, *i); - i = (*v)[1].value_if(); - ASSERT_TRUE(i); - EXPECT_EQ(3, *i); - i = (*v)[2].value_if(); - ASSERT_TRUE(i); - EXPECT_EQ(4, *i); - i = (*v)[3].value_if(); - ASSERT_TRUE(i); - EXPECT_EQ(5, *i); -} - TEST_F(RpcTest, tagSync) { auto request_map = tr_variant::Map{ 2U }; diff --git a/utils/remote.cc b/utils/remote.cc index fe0f637bf..992df025c 100644 --- a/utils/remote.cc +++ b/utils/remote.cc @@ -551,6 +551,32 @@ enum return {}; } +/** + * - values that are all-digits are numbers + * - values that are all-digits or commas are number lists + * - anything else is a string + */ +[[nodiscard]] tr_variant rpc_parse_list_str(std::string_view str) +{ + auto const values = tr_num_parse_range(str); + auto const n_values = std::size(values); + + if (n_values == 0) + { + return { str }; + } + + if (n_values == 1) + { + return { values[0] }; + } + + auto num_vec = tr_variant::Vector{}; + num_vec.resize(n_values); + std::copy_n(std::cbegin(values), n_values, std::begin(num_vec)); + return { std::move(num_vec) }; +} + void add_id_arg(tr_variant::Map& args, std::string_view id_str, std::string_view fallback = "") { if (std::empty(id_str)) @@ -583,7 +609,7 @@ void add_id_arg(tr_variant::Map& args, std::string_view id_str, std::string_view if (is_num || is_list) { - args.insert_or_assign(TR_KEY_ids, tr_rpc_parse_list_str(id_str)); + args.insert_or_assign(TR_KEY_ids, rpc_parse_list_str(id_str)); } else {