refactor: tr_session.scripts (#2146)

* refactor: tr_session.scripts
This commit is contained in:
Charles Kerr 2021-11-13 17:33:18 -06:00 committed by GitHub
parent f0f81f9907
commit 0be95b5074
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 90 additions and 40 deletions

View File

@ -2044,24 +2044,24 @@ static char const* sessionSet(
tr_sessionSetQueueSize(session, TR_UP, (int)i);
}
if (tr_variantDictFindStr(args_in, TR_KEY_script_torrent_added_filename, &str, nullptr))
if (tr_variantDictFindStrView(args_in, TR_KEY_script_torrent_added_filename, &sv))
{
tr_sessionSetScript(session, TR_SCRIPT_ON_TORRENT_ADDED, str);
session->setScript(TR_SCRIPT_ON_TORRENT_ADDED, sv);
}
if (tr_variantDictFindBool(args_in, TR_KEY_script_torrent_added_enabled, &boolVal))
{
tr_sessionSetScriptEnabled(session, TR_SCRIPT_ON_TORRENT_ADDED, boolVal);
session->useScript(TR_SCRIPT_ON_TORRENT_ADDED, boolVal);
}
if (tr_variantDictFindStr(args_in, TR_KEY_script_torrent_done_filename, &str, nullptr))
if (tr_variantDictFindStrView(args_in, TR_KEY_script_torrent_done_filename, &sv))
{
tr_sessionSetScript(session, TR_SCRIPT_ON_TORRENT_DONE, str);
session->setScript(TR_SCRIPT_ON_TORRENT_DONE, sv);
}
if (tr_variantDictFindBool(args_in, TR_KEY_script_torrent_done_enabled, &boolVal))
{
tr_sessionSetScriptEnabled(session, TR_SCRIPT_ON_TORRENT_DONE, boolVal);
session->useScript(TR_SCRIPT_ON_TORRENT_DONE, boolVal);
}
if (tr_variantDictFindBool(args_in, TR_KEY_trash_original_torrent_files, &boolVal))

View File

@ -1111,22 +1111,22 @@ static void sessionSetImpl(void* vdata)
if (tr_variantDictFindBool(settings, TR_KEY_script_torrent_added_enabled, &boolVal))
{
tr_sessionSetScriptEnabled(session, TR_SCRIPT_ON_TORRENT_ADDED, boolVal);
session->useScript(TR_SCRIPT_ON_TORRENT_ADDED, boolVal);
}
if (tr_variantDictFindStr(settings, TR_KEY_script_torrent_added_filename, &strVal, nullptr))
if (tr_variantDictFindStrView(settings, TR_KEY_script_torrent_added_filename, &sv))
{
tr_sessionSetScript(session, TR_SCRIPT_ON_TORRENT_ADDED, strVal);
session->setScript(TR_SCRIPT_ON_TORRENT_ADDED, sv);
}
if (tr_variantDictFindBool(settings, TR_KEY_script_torrent_done_enabled, &boolVal))
{
tr_sessionSetScriptEnabled(session, TR_SCRIPT_ON_TORRENT_DONE, boolVal);
session->useScript(TR_SCRIPT_ON_TORRENT_DONE, boolVal);
}
if (tr_variantDictFindStr(settings, TR_KEY_script_torrent_done_filename, &strVal, nullptr))
if (tr_variantDictFindStrView(settings, TR_KEY_script_torrent_done_filename, &sv))
{
tr_sessionSetScript(session, TR_SCRIPT_ON_TORRENT_DONE, strVal);
session->setScript(TR_SCRIPT_ON_TORRENT_DONE, sv);
}
if (tr_variantDictFindBool(settings, TR_KEY_scrape_paused_torrents_enabled, &boolVal))
@ -2675,7 +2675,7 @@ void tr_sessionSetScriptEnabled(tr_session* session, TrScript type, bool enabled
TR_ASSERT(tr_isSession(session));
TR_ASSERT(type < TR_SCRIPT_N_TYPES);
session->scripts_enabled[type] = enabled;
session->useScript(type, enabled);
}
bool tr_sessionIsScriptEnabled(tr_session const* session, TrScript type)
@ -2683,7 +2683,7 @@ bool tr_sessionIsScriptEnabled(tr_session const* session, TrScript type)
TR_ASSERT(tr_isSession(session));
TR_ASSERT(type < TR_SCRIPT_N_TYPES);
return session->scripts_enabled[type];
return session->useScript(type);
}
void tr_sessionSetScript(tr_session* session, TrScript type, char const* script)
@ -2691,7 +2691,7 @@ void tr_sessionSetScript(tr_session* session, TrScript type, char const* script)
TR_ASSERT(tr_isSession(session));
TR_ASSERT(type < TR_SCRIPT_N_TYPES);
session->scripts[type].assign(script ? script : "");
session->setScript(type, script ? script : "");
}
char const* tr_sessionGetScript(tr_session const* session, TrScript type)
@ -2699,7 +2699,7 @@ char const* tr_sessionGetScript(tr_session const* session, TrScript type)
TR_ASSERT(tr_isSession(session));
TR_ASSERT(type < TR_SCRIPT_N_TYPES);
return session->scripts[type].c_str();
return session->script(type).c_str();
}
/***

View File

@ -161,6 +161,26 @@ public:
incomplete_dir_enabled_ = enabled;
}
void useScript(TrScript i, bool enabled)
{
scripts_enabled_[i] = enabled;
}
bool useScript(TrScript i) const
{
return scripts_enabled_[i];
}
void setScript(TrScript i, std::string_view path)
{
scripts_[i] = path;
}
std::string const& script(TrScript i) const
{
return scripts_[i];
}
public:
bool isPortRandom;
bool isPexEnabled;
@ -177,7 +197,6 @@ public:
bool pauseAddedTorrent;
bool deleteSourceTorrent;
bool scrapePausedTorrents;
std::array<bool, TR_SCRIPT_N_TYPES> scripts_enabled;
uint8_t peer_id_ttl_hours;
@ -245,8 +264,6 @@ public:
std::map<uint8_t const*, tr_torrent*, CompareHash> torrentsByHash;
std::map<std::string_view, tr_torrent*, CaseInsensitiveStringCompare> torrentsByHashString;
std::array<std::string, TR_SCRIPT_N_TYPES> scripts;
char* configDir;
char* resumeDir;
char* torrentDir;
@ -289,9 +306,11 @@ public:
struct tr_bindinfo* bind_ipv6;
private:
std::array<std::string, TR_SCRIPT_N_TYPES> scripts_;
std::string incomplete_dir_;
std::string download_dir_;
std::array<bool, TR_SCRIPT_N_TYPES> scripts_enabled_;
bool incomplete_dir_enabled_ = false;
};

View File

@ -35,15 +35,15 @@ TEST_F(SessionTest, properties)
// download dir
for (auto const& sv : { "foo"sv, "bar"sv, ""sv })
for (auto const& value : { "foo"sv, "bar"sv, ""sv })
{
session->setDownloadDir(sv);
EXPECT_EQ(sv, session->downloadDir());
EXPECT_EQ(sv, tr_sessionGetDownloadDir(session));
session->setDownloadDir(value);
EXPECT_EQ(value, session->downloadDir());
EXPECT_EQ(value, tr_sessionGetDownloadDir(session));
tr_sessionSetDownloadDir(session, std::string(sv).c_str());
EXPECT_EQ(sv, session->downloadDir());
EXPECT_EQ(sv, tr_sessionGetDownloadDir(session));
tr_sessionSetDownloadDir(session, std::string(value).c_str());
EXPECT_EQ(value, session->downloadDir());
EXPECT_EQ(value, tr_sessionGetDownloadDir(session));
}
tr_sessionSetDownloadDir(session, nullptr);
@ -52,32 +52,63 @@ TEST_F(SessionTest, properties)
// incomplete dir
for (auto const& sv : { "foo"sv, "bar"sv, ""sv })
for (auto const& value : { "foo"sv, "bar"sv, ""sv })
{
session->setIncompleteDir(sv);
EXPECT_EQ(sv, session->incompleteDir());
EXPECT_EQ(sv, tr_sessionGetIncompleteDir(session));
session->setIncompleteDir(value);
EXPECT_EQ(value, session->incompleteDir());
EXPECT_EQ(value, tr_sessionGetIncompleteDir(session));
tr_sessionSetIncompleteDir(session, std::string(sv).c_str());
EXPECT_EQ(sv, session->incompleteDir());
EXPECT_EQ(sv, tr_sessionGetIncompleteDir(session));
tr_sessionSetIncompleteDir(session, std::string(value).c_str());
EXPECT_EQ(value, session->incompleteDir());
EXPECT_EQ(value, tr_sessionGetIncompleteDir(session));
}
tr_sessionSetIncompleteDir(session, nullptr);
EXPECT_EQ(""sv, session->incompleteDir());
EXPECT_EQ(""sv, tr_sessionGetIncompleteDir(session));
// script
for (auto const& type : { TR_SCRIPT_ON_TORRENT_ADDED, TR_SCRIPT_ON_TORRENT_DONE })
{
for (auto const& value : { "foo"sv, "bar"sv, ""sv })
{
session->setScript(type, value);
EXPECT_EQ(value, session->script(type));
EXPECT_EQ(value, tr_sessionGetScript(session, type));
tr_sessionSetScript(session, type, std::string(value).c_str());
EXPECT_EQ(value, session->script(type));
EXPECT_EQ(value, tr_sessionGetScript(session, type));
}
tr_sessionSetScript(session, type, nullptr);
EXPECT_EQ(""sv, session->script(type));
EXPECT_EQ(""sv, tr_sessionGetScript(session, type));
for (auto const value : { true, false })
{
session->useScript(type, value);
EXPECT_EQ(value, session->useScript(type));
EXPECT_EQ(value, tr_sessionIsScriptEnabled(session, type));
tr_sessionSetScriptEnabled(session, type, value);
EXPECT_EQ(value, session->useScript(type));
EXPECT_EQ(value, tr_sessionIsScriptEnabled(session, type));
}
}
// incomplete dir enabled
for (auto const b : { true, false })
for (auto const value : { true, false })
{
session->useIncompleteDir(b);
EXPECT_EQ(b, session->useIncompleteDir());
EXPECT_EQ(b, tr_sessionIsIncompleteDirEnabled(session));
session->useIncompleteDir(value);
EXPECT_EQ(value, session->useIncompleteDir());
EXPECT_EQ(value, tr_sessionIsIncompleteDirEnabled(session));
tr_sessionSetIncompleteDirEnabled(session, b);
EXPECT_EQ(b, session->useIncompleteDir());
EXPECT_EQ(b, tr_sessionIsIncompleteDirEnabled(session));
tr_sessionSetIncompleteDirEnabled(session, value);
EXPECT_EQ(value, session->useIncompleteDir());
EXPECT_EQ(value, tr_sessionIsIncompleteDirEnabled(session));
}
}