diff options
author | Vitaly Takmazov <vitalyster@gmail.com> | 2022-01-20 11:45:04 +0300 |
---|---|---|
committer | Vitaly Takmazov <vitalyster@gmail.com> | 2022-01-20 11:45:04 +0300 |
commit | df53f4d95affad9fb95007ac4471b4831ec67a04 (patch) | |
tree | bcf5ad61e35a2d4c1b8409f896f6da041de657b0 | |
parent | 6ba1ee85b7e0d19c358031cefad5a474115108a0 (diff) |
Config: process all unknown options as stringsconfig_strings
* remove CONFIG_LIST* macros as they were used only for unknown options,
CONFIG_VECTOR still used for registered options
-rw-r--r-- | backends/libcommuni/ircnetworkplugin.cpp | 14 | ||||
-rw-r--r-- | backends/libpurple/main.cpp | 2 | ||||
-rw-r--r-- | include/transport/Config.h | 2 | ||||
-rw-r--r-- | libtransport/Config.cpp | 21 | ||||
-rw-r--r-- | spectrum/src/frontends/xmpp/adhocmanager.cpp | 3 | ||||
-rw-r--r-- | spectrum/src/frontends/xmpp/settingsadhoccommand.cpp | 4 | ||||
-rw-r--r-- | tests/libtransport/config.cpp | 24 |
7 files changed, 18 insertions, 52 deletions
diff --git a/backends/libcommuni/ircnetworkplugin.cpp b/backends/libcommuni/ircnetworkplugin.cpp index 18bb3e00..f17f15d1 100644 --- a/backends/libcommuni/ircnetworkplugin.cpp +++ b/backends/libcommuni/ircnetworkplugin.cpp @@ -36,15 +36,9 @@ IRCNetworkPlugin::IRCNetworkPlugin(Config *config, Swift::QtEventLoop *loop, con m_socket->connectToHost(FROM_UTF8(host), port); connect(m_socket, SIGNAL(readyRead()), this, SLOT(readData())); - std::string server = CONFIG_STRING_DEFAULTED(m_config, "service.irc_server", ""); - if (!server.empty()) { - m_servers.push_back(server); - } - else { - std::list<std::string> list; - list = CONFIG_LIST_DEFAULTED(m_config, "service.irc_server", list); - m_servers.insert(m_servers.begin(), list.begin(), list.end()); - } + std::list<std::string> list; + boost::algorithm::split(list, CONFIG_STRING_DEFAULTED(m_config, "service.irc_server", ""), boost::is_any_of(",")); + m_servers.insert(m_servers.begin(), list.begin(), list.end()); if (CONFIG_HAS_KEY(m_config, "service.irc_identify")) { m_identify = CONFIG_STRING(m_config, "service.irc_identify"); @@ -113,7 +107,7 @@ MyIrcSession *IRCNetworkPlugin::createSession(const std::string &user, const std std::string identify = m_identify; boost::replace_all(identify, "$password", password); boost::replace_all(identify, "$name", nickname); - if (CONFIG_BOOL_DEFAULTED(m_config, "service.irc_send_pass", false)) { + if (boost::lexical_cast<bool>(CONFIG_STRING_DEFAULTED(m_config, "service.irc_send_pass", "false"))) { session->setPassword(FROM_UTF8(password)); // use IRC PASS } else { session->setIdentify(identify); // use identify supplied diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index 9136f74d..6a4868c7 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -334,7 +334,7 @@ class SpectrumNetworkPlugin : public NetworkPlugin { found = true; switch (type) { case PURPLE_PREF_BOOLEAN: - purple_account_set_bool_wrapped(account, strippedKey.c_str(), keyItem.second.as<bool>()); + purple_account_set_bool_wrapped(account, strippedKey.c_str(), boost::lexical_cast<bool>(keyItem.second.as<std::string>())); break; case PURPLE_PREF_INT: diff --git a/include/transport/Config.h b/include/transport/Config.h index e5bd3d09..2f38ac30 100644 --- a/include/transport/Config.h +++ b/include/transport/Config.h @@ -46,12 +46,10 @@ const myType &safeAs(const boost::program_options::variable_value &var, const my #define CONFIG_STRING(PTR, KEY) (*PTR)[KEY].as<std::string>() #define CONFIG_INT(PTR, KEY) (*PTR)[KEY].as<int>() #define CONFIG_BOOL(PTR, KEY) (*PTR)[KEY].as<bool>() -#define CONFIG_LIST(PTR, KEY) (*PTR)[KEY].as<std::list<std::string> >() #define CONFIG_VECTOR(PTR, KEY) ((*PTR).hasKey(KEY) ? (*PTR)[KEY].as<std::vector<std::string> >() : std::vector<std::string>()) #define CONFIG_STRING_DEFAULTED(PTR, KEY, DEF) ((*PTR).hasKey(KEY) ? Transport::safeAs<std::string>((*PTR)[KEY], DEF) : DEF) #define CONFIG_BOOL_DEFAULTED(PTR, KEY, DEF) ((*PTR).hasKey(KEY) ? Transport::safeAs<bool>((*PTR)[KEY], DEF) : DEF) -#define CONFIG_LIST_DEFAULTED(PTR, KEY, DEF) ((*PTR).hasKey(KEY) ? Transport::safeAs<std::list<std::string> >((*PTR)[KEY], DEF) : DEF) #define CONFIG_INT_DEFAULTED(PTR, KEY, DEF) ((*PTR).hasKey(KEY) ? Transport::safeAs<int>((*PTR)[KEY], DEF) : DEF) namespace Transport { diff --git a/libtransport/Config.cpp b/libtransport/Config.cpp index 52efed72..28b04cd0 100644 --- a/libtransport/Config.cpp +++ b/libtransport/Config.cpp @@ -104,6 +104,7 @@ bool Config::load(std::istream &ifs, boost::program_options::options_description ("service.max_room_list_size", value<int>()->default_value(100), "") ("service.login_delay", value<int>()->default_value(0), "") ("service.jid_escaping", value<bool>()->default_value(true), "") + ("service.verify_certs", value<bool>()->default_value(false), "") ("service.vip_only", value<bool>()->default_value(false), "") ("service.vip_message", value<std::string>()->default_value(""), "") ("service.reconnect_all_users", value<bool>()->default_value(false), "") @@ -222,28 +223,14 @@ bool Config::load(std::istream &ifs, boost::program_options::options_description BOOST_FOREACH(option &opt, parsed.options) { if (opt.unregistered) { if (std::find(has_key.begin(), has_key.end(), opt.string_key) == has_key.end()) { + m_unregistered[opt.string_key] = variable_value(opt.value[0], false); has_key.push_back(opt.string_key); - if (opt.value[0] == "true" || opt.value[0] == "1") { - m_unregistered[opt.string_key] = variable_value(true, false); - } - else if (opt.value[0] == "false" || opt.value[0] == "0") { - m_unregistered[opt.string_key] = variable_value(false, false); - } - else { - m_unregistered[opt.string_key] = variable_value(opt.value[0], false); - } } else { std::list<std::string> list; - try { - list = m_unregistered[opt.string_key].as<std::list<std::string> >(); - } - catch(...) { - list.push_back(m_unregistered[opt.string_key].as<std::string>()); - } - + boost::algorithm::split(list, m_unregistered[opt.string_key].as<std::string>(), boost::is_any_of(",")); list.push_back(opt.value[0]); - m_unregistered[opt.string_key] = variable_value(list, false); + m_unregistered[opt.string_key] = variable_value(boost::algorithm::join(list, ","), false); } } else if (opt.value[0].find("$jid") != std::string::npos) { diff --git a/spectrum/src/frontends/xmpp/adhocmanager.cpp b/spectrum/src/frontends/xmpp/adhocmanager.cpp index 50598d27..86f07144 100644 --- a/spectrum/src/frontends/xmpp/adhocmanager.cpp +++ b/spectrum/src/frontends/xmpp/adhocmanager.cpp @@ -73,9 +73,6 @@ void AdHocManager::handleUserCreated(User *user) { for (std::map<std::string, AdHocCommandFactory *>::const_iterator it = m_factories.begin(); it != m_factories.end(); it++) { for (std::map<std::string, std::string>::const_iterator it2 = it->second->getUserSettings().begin(); it2 != it->second->getUserSettings().end(); it2++) { std::string value = CONFIG_STRING_DEFAULTED(m_component->getConfig(), it->second->getNode() + "." + it2->first, it2->second); - if (it2->second == "true" || it2->second == "1" || it2->second == "false" || it2->second == "0") { - value = CONFIG_BOOL_DEFAULTED(m_component->getConfig(), it->second->getNode() + "." + it2->first, it2->second == "true" || it2->second == "1") ? "1" : "0"; - } if (m_storageBackend) { int type = (int) TYPE_BOOLEAN; m_storageBackend->getUserSetting(user->getUserInfo().id, it2->first, type, value); diff --git a/spectrum/src/frontends/xmpp/settingsadhoccommand.cpp b/spectrum/src/frontends/xmpp/settingsadhoccommand.cpp index 9e05c2f8..2a7532d3 100644 --- a/spectrum/src/frontends/xmpp/settingsadhoccommand.cpp +++ b/spectrum/src/frontends/xmpp/settingsadhoccommand.cpp @@ -67,11 +67,11 @@ std::shared_ptr<Swift::Command> SettingsAdHocCommand::getForm() { m_storageBackend->getUserSetting(user.id, "enable_transport", type, value); FormUtils::addBooleanField(form, "enable_transport", value, "Enable transport"); - value = CONFIG_BOOL_DEFAULTED(m_component->getConfig(), "settings.send_headlines", false) ? "1" : "0"; + value = CONFIG_STRING_DEFAULTED(m_component->getConfig(), "settings.send_headlines", "0"); m_storageBackend->getUserSetting(user.id, "send_headlines", type, value); FormUtils::addBooleanField(form, "send_headlines", value, "Allow sending messages as headlines"); - value = CONFIG_BOOL_DEFAULTED(m_component->getConfig(), "settings.stay_connected", false) ? "1" : "0"; + value = CONFIG_STRING_DEFAULTED(m_component->getConfig(), "settings.stay_connected", "0"); m_storageBackend->getUserSetting(user.id, "stay_connected", type, value); FormUtils::addBooleanField(form, "stay_connected", value, "Stay connected to legacy network when offline on XMPP"); diff --git a/tests/libtransport/config.cpp b/tests/libtransport/config.cpp index bcf25100..0adcbd46 100644 --- a/tests/libtransport/config.cpp +++ b/tests/libtransport/config.cpp @@ -23,7 +23,6 @@ class ConfigTest : public CPPUNIT_NS :: TestFixture{ CPPUNIT_TEST(unregisteredList); CPPUNIT_TEST(unregisteredString); CPPUNIT_TEST(unregisteredListAsString); - CPPUNIT_TEST(unregisteredStringAsList); CPPUNIT_TEST_SUITE_END(); public: @@ -47,8 +46,8 @@ class ConfigTest : public CPPUNIT_NS :: TestFixture{ Config cfg(2, const_cast<char **>(argv)); std::istringstream ifs("service.irc_send_pass = 1\npurple.group-chat-open=0\n"); cfg.load(ifs); - CPPUNIT_ASSERT_EQUAL(true, CONFIG_BOOL_DEFAULTED(&cfg, "service.irc_send_pass", false)); - CPPUNIT_ASSERT_EQUAL(false, CONFIG_BOOL_DEFAULTED(&cfg, "purple.group-chat-open", true)); + CPPUNIT_ASSERT_EQUAL(true, boost::lexical_cast<bool>(CONFIG_STRING_DEFAULTED(&cfg, "service.irc_send_pass", "false"))); + CPPUNIT_ASSERT_EQUAL(false, boost::lexical_cast<bool>(CONFIG_STRING_DEFAULTED(&cfg, "purple.group-chat-open", "true"))); } void enumerateConfigSection() { @@ -57,8 +56,8 @@ class ConfigTest : public CPPUNIT_NS :: TestFixture{ std::istringstream ifs("[purple]\nirc_send_pass=1\ngroup-chat-open=false\ntest=passed"); cfg.load(ifs); Config::SectionValuesCont purpleConfigValues = cfg.getSectionValues("purple"); - CPPUNIT_ASSERT_EQUAL(true, purpleConfigValues["purple.irc_send_pass"].as<bool>()); - CPPUNIT_ASSERT_EQUAL(false, purpleConfigValues["purple.group-chat-open"].as<bool>()); + CPPUNIT_ASSERT_EQUAL(std::string("1"), purpleConfigValues["purple.irc_send_pass"].as<std::string>()); + CPPUNIT_ASSERT_EQUAL(std::string("false"), purpleConfigValues["purple.group-chat-open"].as<std::string>()); CPPUNIT_ASSERT_EQUAL(std::string("passed"), purpleConfigValues["purple.test"].as<std::string>()); } @@ -85,7 +84,7 @@ class ConfigTest : public CPPUNIT_NS :: TestFixture{ Config cfg; std::istringstream ifs("service.irc_server = irc.freenode.org\nservice.irc_server=localhost\n"); cfg.load(ifs); - CPPUNIT_ASSERT_EQUAL(2, (int) CONFIG_LIST(&cfg, "service.irc_server").size()); + CPPUNIT_ASSERT_EQUAL(std::string("irc.freenode.org,localhost"), CONFIG_STRING(&cfg, "service.irc_server")); } void unregisteredString() { @@ -97,19 +96,10 @@ class ConfigTest : public CPPUNIT_NS :: TestFixture{ void unregisteredListAsString() { Config cfg; - std::istringstream ifs("service.irc_server = irc.freenode.orgn\nservice.irc_server = irc2.freenode.org"); + std::istringstream ifs("service.irc_server = irc.freenode.org\nservice.irc_server = irc2.freenode.org"); cfg.load(ifs); - CPPUNIT_ASSERT_EQUAL(std::string(""), CONFIG_STRING_DEFAULTED(&cfg, "service.irc_server", "")); + CPPUNIT_ASSERT_EQUAL(std::string("irc.freenode.org,irc2.freenode.org"), CONFIG_STRING_DEFAULTED(&cfg, "service.irc_server", "")); } - - void unregisteredStringAsList() { - Config cfg; - std::istringstream ifs("service.irc_server = irc.freenode.org"); - cfg.load(ifs); - std::list<std::string> list; - CPPUNIT_ASSERT_EQUAL(0, (int) CONFIG_LIST_DEFAULTED(&cfg, "service.irc_server", list).size()); - } - }; CPPUNIT_TEST_SUITE_REGISTRATION (ConfigTest); |