bool ConfigFile::loadFeatures(int &features, const std::string §ion) { if (!g_key_file_has_group(keyfile, section.c_str())) return false; char **keys = g_key_file_get_keys(keyfile, section.c_str(), NULL, NULL); bool val; int feature; features = TRANSPORT_FEATURE_ALL; for (int i = 0; keys[i]; i++) { std::string key(keys[i]); loadBoolean(val, section, key); if (key == "chatstate") feature = TRANSPORT_FEATURE_TYPING_NOTIFY; else if (key == "avatars") feature = TRANSPORT_FEATURE_AVATARS; else if (key == "filetransfer") feature = TRANSPORT_FEATURE_FILETRANSFER; else if (key == "statistics") feature = TRANSPORT_FEATURE_STATISTICS; else continue; if (val) features = features | feature; else features = features & (~feature); } g_strfreev(keys); return true; }
void ConfigFile::loadPurpleAccountSettings(Configuration &configuration) { if (!m_loaded) return; if (!g_key_file_has_group(keyfile, "purple")) return; PurplePlugin *plugin = purple_find_prpl(Transport::instance()->protocol()->protocol().c_str()); PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin); for (GList *l = prpl_info->protocol_options; l != NULL; l = l->next) { PurpleAccountOption *option = (PurpleAccountOption *) l->data; PurpleAccountSettingValue v; v.type = purple_account_option_get_type(option); std::string key(purple_account_option_get_setting(option)); switch (v.type) { case PURPLE_PREF_BOOLEAN: if (g_key_file_has_key(keyfile, "purple", key.c_str(), NULL)) { loadBoolean(v.b, "purple", key); configuration.purple_account_settings[key] = v; } // else // v.b = purple_account_option_get_default_bool(option); break; case PURPLE_PREF_INT: if (g_key_file_has_key(keyfile, "purple", key.c_str(), NULL)) { loadInteger(v.i, "purple", key); configuration.purple_account_settings[key] = v; } // else // v.i = purple_account_option_get_default_int(option); break; case PURPLE_PREF_STRING: if (g_key_file_has_key(keyfile, "purple", key.c_str(), NULL)) { std::string str; loadString(str, "purple", key); v.str = g_strdup(str.c_str()); configuration.purple_account_settings[key] = v; } // else { // const char *str = purple_account_option_get_default_string(option); // v.str = str ? g_strdup(str) : NULL; // } break; case PURPLE_PREF_STRING_LIST: if (g_key_file_has_key(keyfile, "purple", key.c_str(), NULL)) { loadStringList(v.strlist, "purple", key); configuration.purple_account_settings[key] = v; } break; default: continue; } } }
void StaticShader::loadFakeLightingVariable(bool useFake) { loadBoolean(_locationUseFakeLighting, useFake); }
void StaticShader::loadUseFakeLighting(bool useFakeLigting) { loadBoolean(this->useFakeLighting, useFakeLigting); }
Configuration ConfigFile::getConfiguration() { Configuration configuration; char **bind; int i; if (!m_loaded) return DummyConfiguration; // Service section LOAD_REQUIRED_STRING(configuration.protocol, "service", "protocol"); std::transform(configuration.protocol.begin(), configuration.protocol.end(), configuration.protocol.begin(), tolower); m_protocol = configuration.protocol; LOAD_REQUIRED_STRING(configuration.jid, "service", "jid"); m_jid = configuration.jid; LOAD_REQUIRED_STRING(configuration.discoName, "service", "name"); LOAD_REQUIRED_STRING(configuration.server, "service", "server"); LOAD_REQUIRED_STRING(configuration.password, "service", "password"); LOAD_REQUIRED_STRING(configuration.filetransferCache, "service", "filetransfer_cache"); LOAD_REQUIRED_STRING_DEFAULT(configuration.config_interface, "service", "config_interface", "/var/run/spectrum/" + configuration.jid + ".sock"); if (!loadInteger(configuration.port, "service", "port")) return DummyConfiguration; loadString(configuration.filetransferWeb, "service", "filetransfer_web", ""); loadString(configuration.pid_f, "service", "pid_file", "/var/run/spectrum/" + configuration.jid); loadString(configuration.language, "service", "language", "en"); loadString(configuration.encoding, "service", "encoding", ""); loadString(configuration.eventloop, "service", "eventloop", "glib"); loadBoolean(configuration.jid_escaping, "service", "jid_escaping", true); loadBoolean(configuration.onlyForVIP, "service", "only_for_vip", false); loadBoolean(configuration.VIPEnabled, "service", "vip_mode", false); loadBoolean(configuration.useProxy, "service", "use_proxy", false); loadBoolean(configuration.require_tls, "service", "require_tls", true); loadStringList(configuration.allowedServers, "service", "allowed_servers"); loadStringList(configuration.admins, "service", "admins"); loadHostPort(configuration.filetransfer_proxy_ip, configuration.filetransfer_proxy_port, "service", "filetransfer_bind_address", "", 0); loadHostPort(configuration.filetransfer_proxy_streamhost_ip, configuration.filetransfer_proxy_streamhost_port, "service", "filetransfer_public_address", configuration.filetransfer_proxy_ip, configuration.filetransfer_proxy_port); if (!loadFeatures(configuration.transportFeatures, "features")) { configuration.transportFeatures = TRANSPORT_FEATURE_ALL; // TODO: transport_features and vip_features are depracted. remove it for 0.4 if(g_key_file_has_key(keyfile,"service","transport_features",NULL)) { bind = g_key_file_get_string_list (keyfile,"service","transport_features",NULL, NULL); configuration.transportFeatures = 0; for (i = 0; bind[i]; i++){ std::string feature(bind[i]); if (feature == "avatars") configuration.transportFeatures = configuration.transportFeatures | TRANSPORT_FEATURE_AVATARS; else if (feature == "chatstate") configuration.transportFeatures = configuration.transportFeatures | TRANSPORT_FEATURE_TYPING_NOTIFY; else if (feature == "filetransfer") configuration.transportFeatures = configuration.transportFeatures | TRANSPORT_FEATURE_FILETRANSFER; } g_strfreev (bind); } else configuration.transportFeatures = TRANSPORT_FEATURE_AVATARS | TRANSPORT_FEATURE_FILETRANSFER | TRANSPORT_FEATURE_TYPING_NOTIFY; } if (!loadFeatures(configuration.VIPFeatures, "vip-features")) { configuration.VIPFeatures = TRANSPORT_FEATURE_ALL; if(g_key_file_has_key(keyfile,"service","vip_features",NULL)) { bind = g_key_file_get_string_list (keyfile,"service","vip_features",NULL, NULL); configuration.VIPFeatures = 0; for (i = 0; bind[i]; i++){ std::string feature(bind[i]); if (feature == "avatars") configuration.VIPFeatures |= TRANSPORT_FEATURE_AVATARS; else if (feature == "chatstate") configuration.VIPFeatures |= TRANSPORT_FEATURE_TYPING_NOTIFY; else if (feature == "filetransfer") configuration.VIPFeatures |= TRANSPORT_FEATURE_FILETRANSFER; } g_strfreev (bind); } else configuration.VIPFeatures = TRANSPORT_FEATURE_AVATARS | TRANSPORT_FEATURE_FILETRANSFER | TRANSPORT_FEATURE_TYPING_NOTIFY; } // Database section LOAD_REQUIRED_STRING(configuration.sqlType, "database", "type"); LOAD_REQUIRED_STRING(configuration.sqlDb, "database", "database"); LOAD_REQUIRED_STRING_DEFAULT(configuration.sqlHost, "database", "host", configuration.sqlType == "sqlite" ? "optional" : ""); LOAD_REQUIRED_STRING_DEFAULT(configuration.sqlPassword, "database", "password", configuration.sqlType == "sqlite" ? "optional" : ""); LOAD_REQUIRED_STRING_DEFAULT(configuration.sqlUser, "database", "user", configuration.sqlType == "sqlite" ? "optional" : ""); LOAD_REQUIRED_STRING_DEFAULT(configuration.sqlPrefix, "database", "prefix", configuration.sqlType == "sqlite" ? "" : "required"); loadString(configuration.sqlVIP, "database", "vip_statement", ""); LOAD_REQUIRED_STRING(configuration.userDir, "purple", "userdir"); // Logging section loadString(configuration.logfile, "logging", "log_file", ""); if (g_key_file_has_key(keyfile, "logging", "log_areas", NULL)) { bind = g_key_file_get_string_list(keyfile, "logging", "log_areas", NULL, NULL); configuration.logAreas = 0; for (i = 0; bind[i]; i++) { std::string feature(bind[i]); if (feature == "xml") { configuration.logAreas = configuration.logAreas | LOG_AREA_XML; } else if (feature == "purple") configuration.logAreas = configuration.logAreas | LOG_AREA_PURPLE; } g_strfreev (bind); } else configuration.logAreas = LOG_AREA_XML | LOG_AREA_PURPLE; // Registration section loadBoolean(configuration.enable_public_registration, "registration", "enable_public_registration", true); loadString(configuration.username_mask, "registration", "username_mask", ""); loadString(configuration.reg_instructions, "registration", "instructions", ""); loadString(configuration.reg_username_field, "registration", "username_label", ""); loadString(configuration.reg_allowed_usernames, "registration", "allowed_usernames", ""); if (configuration.sqlType == "sqlite") create_dir(configuration.sqlDb, 0750); create_dir(configuration.filetransferCache, 0750); create_dir(configuration.config_interface, 0750); create_dir(configuration.pid_f, 0750); create_dir(configuration.userDir, 0750); create_dir(configuration.logfile, 0750); return configuration; }