From 6beca85ae24c8551b4c5413531ede7a293097468 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sun, 14 Aug 2022 10:40:03 -0500 Subject: [PATCH] refactor: make tr_session.rpc_func_ private (#3640) --- libtransmission/rpcimpl.cc | 44 +++++++++++--------------------------- libtransmission/session.cc | 4 ++-- libtransmission/session.h | 23 ++++++++++++++------ 3 files changed, 32 insertions(+), 39 deletions(-) diff --git a/libtransmission/rpcimpl.cc b/libtransmission/rpcimpl.cc index 3bafb95e5..4f29c0b3e 100644 --- a/libtransmission/rpcimpl.cc +++ b/libtransmission/rpcimpl.cc @@ -58,22 +58,6 @@ enum class TrFormat **** ***/ -static tr_rpc_callback_status notify(tr_session* session, tr_rpc_callback_type type, tr_torrent* tor) -{ - tr_rpc_callback_status status = TR_RPC_OK; - - if (session->rpc_func != nullptr) - { - status = (*session->rpc_func)(session, type, tor, session->rpc_func_user_data); - } - - return status; -} - -/*** -**** -***/ - /* For functions that can't be immediately executed, like torrentAdd, * this is the callback data used to pass a response to the caller * when the task is complete */ @@ -177,10 +161,10 @@ static void notifyBatchQueueChange(tr_session* session, std::vector { for (auto* tor : torrents) { - notify(session, TR_RPC_TORRENT_CHANGED, tor); + session->rpcNotify(TR_RPC_TORRENT_CHANGED, tor); } - notify(session, TR_RPC_SESSION_QUEUE_POSITIONS_CHANGED, nullptr); + session->rpcNotify(TR_RPC_SESSION_QUEUE_POSITIONS_CHANGED); } static char const* queueMoveTop( @@ -252,7 +236,7 @@ static char const* torrentStart( if (!tor->isRunning) { tr_torrentStart(tor); - notify(session, TR_RPC_TORRENT_STARTED, tor); + session->rpcNotify(TR_RPC_TORRENT_STARTED, tor); } } @@ -272,7 +256,7 @@ static char const* torrentStartNow( if (!tor->isRunning) { tr_torrentStartNow(tor); - notify(session, TR_RPC_TORRENT_STARTED, tor); + session->rpcNotify(TR_RPC_TORRENT_STARTED, tor); } } @@ -290,7 +274,7 @@ static char const* torrentStop( if (tor->isRunning || tor->isQueued() || tor->verifyState() != TR_VERIFY_NONE) { tor->isStopping = true; - notify(session, TR_RPC_TORRENT_STOPPED, tor); + session->rpcNotify(TR_RPC_TORRENT_STOPPED, tor); } } @@ -310,9 +294,7 @@ static char const* torrentRemove( for (auto* tor : getTorrents(session, args_in)) { - tr_rpc_callback_status const status = notify(session, type, tor); - - if ((status & TR_RPC_NOREMOVE) == 0) + if (auto const status = session->rpcNotify(type, tor); (status & TR_RPC_NOREMOVE) == 0) { tr_torrentRemove(tor, delete_flag, nullptr); } @@ -332,7 +314,7 @@ static char const* torrentReannounce( if (tr_torrentCanManualUpdate(tor)) { tr_torrentManualUpdate(tor); - notify(session, TR_RPC_TORRENT_CHANGED, tor); + session->rpcNotify(TR_RPC_TORRENT_CHANGED, tor); } } @@ -348,7 +330,7 @@ static char const* torrentVerify( for (auto* tor : getTorrents(session, args_in)) { tr_torrentVerify(tor); - notify(session, TR_RPC_TORRENT_CHANGED, tor); + session->rpcNotify(TR_RPC_TORRENT_CHANGED, tor); } return nullptr; @@ -1271,7 +1253,7 @@ static char const* torrentSet( } } - notify(session, TR_RPC_TORRENT_CHANGED, tor); + session->rpcNotify(TR_RPC_TORRENT_CHANGED, tor); } return errmsg; @@ -1301,7 +1283,7 @@ static char const* torrentSetLocation( for (auto* tor : getTorrents(session, args_in)) { tor->setLocation(location, move, nullptr, nullptr); - notify(session, TR_RPC_TORRENT_MOVED, tor); + session->rpcNotify(TR_RPC_TORRENT_MOVED, tor); } return nullptr; @@ -1499,7 +1481,7 @@ static void addTorrentImpl(struct tr_rpc_idle_data* data, tr_ctor* ctor) return; } - notify(data->session, TR_RPC_TORRENT_ADDED, tor); + data->session->rpcNotify(TR_RPC_TORRENT_ADDED, tor); addTorrentInfo( tor, TrFormat::Object, @@ -2055,7 +2037,7 @@ static char const* sessionSet( tr_sessionSetAntiBruteForceEnabled(session, boolVal); } - notify(session, TR_RPC_SESSION_CHANGED, nullptr); + session->rpcNotify(TR_RPC_SESSION_CHANGED, nullptr); return nullptr; } @@ -2425,7 +2407,7 @@ static char const* sessionClose( tr_variant* /*args_out*/, tr_rpc_idle_data* /*idle_data*/) { - notify(session, TR_RPC_SESSION_CLOSE, nullptr); + session->rpcNotify(TR_RPC_SESSION_CLOSE, nullptr); return nullptr; } diff --git a/libtransmission/session.cc b/libtransmission/session.cc index 1df67b6fa..b942013f3 100644 --- a/libtransmission/session.cc +++ b/libtransmission/session.cc @@ -2501,8 +2501,8 @@ void tr_sessionSetRPCCallback(tr_session* session, tr_rpc_func func, void* user_ { TR_ASSERT(session != nullptr); - session->rpc_func = func; - session->rpc_func_user_data = user_data; + session->rpc_func_ = func; + session->rpc_func_user_data_ = user_data; } void tr_sessionSetRPCWhitelist(tr_session* session, char const* whitelist) diff --git a/libtransmission/session.h b/libtransmission/session.h index 36e59516a..9ba7b1a30 100644 --- a/libtransmission/session.h +++ b/libtransmission/session.h @@ -543,16 +543,10 @@ public: tr_session* const session_; }; - tr_port random_port_low_; - tr_port random_port_high_; - std::unique_ptr web; tr_session_id session_id; - tr_rpc_func rpc_func = nullptr; - void* rpc_func_user_data = nullptr; - struct tr_announcer* announcer = nullptr; struct tr_announcer_udp* announcer_udp = nullptr; @@ -642,6 +636,16 @@ public: return should_pause_added_torrents_; } + auto rpcNotify(tr_rpc_callback_type type, tr_torrent* tor = nullptr) + { + if (rpc_func_ != nullptr) + { + return (*rpc_func_)(this, type, tor, rpc_func_user_data_); + } + + return TR_RPC_OK; + } + private: [[nodiscard]] tr_port randomPort() const; @@ -659,6 +663,7 @@ private: friend void tr_sessionSetQueueSize(tr_session* session, tr_direction dir, int max_simultaneous_seed_torrents); friend void tr_sessionSetQueueStalledEnabled(tr_session* session, bool is_enabled); friend void tr_sessionSetQueueStalledMinutes(tr_session* session, int minutes); + friend void tr_sessionSetRPCCallback(tr_session* session, tr_rpc_func func, void* user_data); struct init_data; void initImpl(init_data&); @@ -667,6 +672,12 @@ private: void closeImplWaitForIdleUdp(); void closeImplFinish(); + tr_port random_port_low_; + tr_port random_port_high_; + + tr_rpc_func rpc_func_ = nullptr; + void* rpc_func_user_data_ = nullptr; + bool should_pause_added_torrents_ = false; bool should_delete_source_torrents_ = false; bool should_scrape_paused_torrents_ = false;