From b2fd4a456335e0abcecd8684b8e8069192baa5c8 2011-08-16 21:51:19 From: HanzZ Date: 2011-08-16 21:51:19 Subject: [PATCH] parse unregistered config options and working [purple] options parsing --- diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index 33d2e18376981b16ed0a879338aeba3fe588cc20..7ab3ba00b5a7eb1915b08e255ccc6140248d5dca 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -231,6 +231,15 @@ class SpectrumNetworkPlugin : public NetworkPlugin { purple_account_set_bool(account, "custom_smileys", FALSE); purple_account_set_bool(account, "direct_connect", FALSE); + for (std::map::const_iterator it = config->getUnregistered().begin(); + it != config->getUnregistered().end(); it++) { + if ((*it).first.find("purple.") == 0) { + std::string key = (*it).first.substr((*it).first.find(".") + 1); + LOG4CXX_INFO(logger, "Setting account string '" << key << "'='" << (*it).second << "'"); + purple_account_set_string(account, key.c_str(), (*it).second.c_str()); + } + } + purple_account_set_privacy_type(account, PURPLE_PRIVACY_DENY_USERS); const PurpleStatusType *status_type = purple_account_get_status_type_with_primitive(account, PURPLE_STATUS_AVAILABLE); diff --git a/include/transport/config.h b/include/transport/config.h index 70660c3fdda10ffbb075d40dcd4700efcf9ff4b6..396fbbdecebb6d06302055d4d311025568cf73ba 100644 --- a/include/transport/config.h +++ b/include/transport/config.h @@ -82,11 +82,16 @@ class Config { /// Returns path to config file from which data were loaded. const std::string &getConfigFile() { return m_file; } + const std::map &getUnregistered() { + return m_unregistered; + } + /// This signal is emitted when config is loaded/reloaded. boost::signal onConfigReloaded; private: Variables m_variables; + std::map m_unregistered; std::string m_file; }; diff --git a/spectrum/src/sample.cfg b/spectrum/src/sample.cfg index e783d7588a4a39788c2ec4de375f124676cf9e49..1ef0b140b7b49e8467e599631fd74db460ed89aa 100644 --- a/spectrum/src/sample.cfg +++ b/spectrum/src/sample.cfg @@ -20,6 +20,9 @@ protocol=any [backend] default_avatar=catmelonhead.jpg +[purple] +test=test1 +test2=test3 [logging] #config=logging.cfg # log4cxx/log4j logging configuration file diff --git a/src/config.cpp b/src/config.cpp index bdf34bc2d887f87200082551e3ae067ffda653f3..d3c755bd21bbef69e933373ca841003a9decb282 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -26,6 +26,7 @@ using namespace boost::program_options; namespace Transport { bool Config::load(const std::string &configfile, boost::program_options::options_description &opts) { + m_unregistered.clear(); std::ifstream ifs(configfile.c_str()); if (!ifs.is_open()) return false; @@ -71,7 +72,15 @@ bool Config::load(const std::string &configfile, boost::program_options::options ("backend.avatars_directory", value()->default_value(""), "Path to directory with avatars") ; - store(parse_config_file(ifs, opts), m_variables); + parsed_options parsed = parse_config_file(ifs, opts, true); + + BOOST_FOREACH(option opt, parsed.options) { + if (opt.unregistered) { + m_unregistered[opt.string_key] = opt.value[0]; + } + } + + store(parsed, m_variables); notify(m_variables); m_file = configfile;