add function to get default settings

This commit is contained in:
arvidn 2017-02-05 03:13:26 -05:00 committed by Arvid Norberg
parent c00a25a645
commit 7ff4f56ae2
8 changed files with 67 additions and 17 deletions

View File

@ -1,3 +1,4 @@
* add function to get default settings
* updating super seeding would include the torrent in state_update_alert
* fix issue where num_seeds could be greater than num_peers in torrent_status
* finished non-seed torrents can also be in super-seeding mode

View File

@ -214,6 +214,11 @@ namespace
return make_dict(ret);
}
dict default_settings_wrapper()
{
return make_dict(default_settings());
}
dict high_performance_seed_wrapper()
{
settings_pack ret;
@ -983,6 +988,7 @@ void bind_session()
def("high_performance_seed", high_performance_seed_wrapper);
def("min_memory_usage", min_memory_usage_wrapper);
def("default_settings", default_settings_wrapper);
class_<stats_metric>("stats_metric")
.def_readonly("name", &stats_metric::name)

View File

@ -267,6 +267,11 @@ class test_session(unittest.TestCase):
self.assertTrue('connection_speed' in seed_mode)
self.assertTrue('file_pool_size' in seed_mode)
def test_default_settings(self):
default = lt.default_settings()
print(default)
if __name__ == '__main__':
print(lt.__version__)
shutil.copy(os.path.join('..', '..', 'test', 'test_torrents', 'url_seed_multi.torrent'), '.')

View File

@ -70,6 +70,9 @@ namespace libtorrent
TORRENT_EXPORT int setting_by_name(std::string const& name);
TORRENT_EXPORT char const* name_for_setting(int s);
// returns a settings_pack with every setting set to its default value
TORRENT_EXPORT settings_pack default_settings();
#ifndef TORRENT_NO_DEPRECATE
struct session_settings;
settings_pack load_pack_from_struct(aux::session_settings const& current, session_settings const& s);

View File

@ -296,7 +296,6 @@ namespace libtorrent
TORRENT_EXPORT session_settings min_memory_usage()
{
aux::session_settings def;
initialize_default_settings(def);
settings_pack pack;
min_memory_usage(pack);
apply_pack(&pack, def, 0);
@ -308,7 +307,6 @@ namespace libtorrent
TORRENT_EXPORT session_settings high_performance_seed()
{
aux::session_settings def;
initialize_default_settings(def);
settings_pack pack;
high_performance_seed(pack);
apply_pack(&pack, def, 0);
@ -421,7 +419,6 @@ namespace libtorrent
session_settings::session_settings(std::string const& user_agent_)
{
aux::session_settings def;
initialize_default_settings(def);
def.set_str(settings_pack::user_agent, user_agent_);
load_struct_from_settings(def, *this);
}

View File

@ -56,6 +56,11 @@ namespace {
if (i != c.end() && i->first == v.first) i->second = v.second;
else c.insert(i, v);
}
// return the string, unless it's null, in which case the empty string is
// returned
char const* ensure_string(char const* str)
{ return str == NULL ? "" : str; }
}
namespace libtorrent
@ -441,8 +446,7 @@ namespace libtorrent
// loop over all settings that differ from default
for (int i = 0; i < settings_pack::num_string_settings; ++i)
{
char const* cmp = str_settings[i].default_value == 0 ? "" : str_settings[i].default_value;
if (cmp == s.m_strings[i]) continue;
if (ensure_string(str_settings[i].default_value) == s.m_strings[i]) continue;
sett[str_settings[i].name] = s.m_strings[i];
}
@ -553,7 +557,7 @@ namespace libtorrent
{
for (int i = 0; i < settings_pack::num_string_settings; ++i)
{
if (str_settings[i].default_value == 0) continue;
if (str_settings[i].default_value == NULL) continue;
s.set_str(settings_pack::string_type_base + i, str_settings[i].default_value);
TORRENT_ASSERT(s.get_str(settings_pack::string_type_base + i) == str_settings[i].default_value);
}
@ -569,16 +573,28 @@ namespace libtorrent
s.set_bool(settings_pack::bool_type_base + i, bool_settings[i].default_value);
TORRENT_ASSERT(s.get_bool(settings_pack::bool_type_base + i) == bool_settings[i].default_value);
}
}
// this seems questionable...
/*
// Some settings have dynamic defaults depending on the machine
// for instance, the disk cache size
settings_pack default_settings()
{
settings_pack ret;
// TODO: it would be nice to reserve() these vectors up front
for (int i = 0; i < settings_pack::num_string_settings; ++i)
{
if (str_settings[i].default_value == NULL) continue;
ret.set_str(settings_pack::string_type_base + i, str_settings[i].default_value);
}
// by default, set the cahe size to an 8:th of the total amount of physical RAM
boost::uint64_t phys_ram = total_physical_ram();
if (phys_ram > 0) s.set_int(settings_pack::cache_size, phys_ram / 16 / 1024 / 8);
*/
for (int i = 0; i < settings_pack::num_int_settings; ++i)
{
ret.set_int(settings_pack::int_type_base + i, int_settings[i].default_value);
}
for (int i = 0; i < settings_pack::num_bool_settings; ++i)
{
ret.set_bool(settings_pack::bool_type_base + i, bool_settings[i].default_value);
}
return ret;
}
void apply_pack(settings_pack const* pack, aux::session_settings& sett

View File

@ -158,7 +158,6 @@ void run_test(connections_t& v
, boost::bind(&peer_connection::start, _1));
libtorrent::aux::session_settings s;
initialize_default_settings(s);
int tick_interval = s.get_int(settings_pack::tick_interval);
for (int i = 0; i < int(sample_time * 1000 / tick_interval); ++i)

View File

@ -43,7 +43,6 @@ using namespace libtorrent::aux;
TORRENT_TEST(default_settings)
{
aux::session_settings sett;
initialize_default_settings(sett);
entry e;
save_settings_to_dict(sett, e.dict());
@ -57,10 +56,34 @@ TORRENT_TEST(default_settings)
#endif
}
TORRENT_TEST(default_settings2)
{
aux::session_settings sett;
settings_pack def = default_settings();
for (int i = 0; i < settings_pack::num_string_settings; ++i)
{
TEST_EQUAL(sett.get_str(settings_pack::string_type_base + i)
, def.get_str(settings_pack::string_type_base + i));
}
for (int i = 0; i < settings_pack::num_int_settings; ++i)
{
TEST_EQUAL(sett.get_int(settings_pack::int_type_base + i)
, def.get_int(settings_pack::int_type_base + i));
}
for (int i = 0; i < settings_pack::num_bool_settings; ++i)
{
TEST_EQUAL(sett.get_bool(settings_pack::bool_type_base + i)
, def.get_bool(settings_pack::bool_type_base + i));
}
}
TORRENT_TEST(apply_pack)
{
aux::session_settings sett;
initialize_default_settings(sett);
settings_pack sp;
sp.set_int(settings_pack::max_out_request_queue, 1337);