diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index 33d2e183..7ab3ba00 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 70660c3f..396fbbde 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 e783d758..1ef0b140 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 bdf34bc2..d3c755bd 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;