static void hilight_add_config(HILIGHT_REC *rec) { CONFIG_NODE *node; g_return_if_fail(rec != NULL); node = iconfig_node_traverse("(hilights", TRUE); node = config_node_section(node, NULL, NODE_TYPE_BLOCK); iconfig_node_set_str(node, "text", rec->text); if (rec->level > 0) iconfig_node_set_int(node, "level", rec->level); if (rec->color) iconfig_node_set_str(node, "color", rec->color); if (rec->act_color) iconfig_node_set_str(node, "act_color", rec->act_color); if (rec->priority > 0) iconfig_node_set_int(node, "priority", rec->priority); iconfig_node_set_bool(node, "nick", rec->nick); iconfig_node_set_bool(node, "word", rec->word); if (rec->nickmask) iconfig_node_set_bool(node, "mask", TRUE); if (rec->fullword) iconfig_node_set_bool(node, "fullword", TRUE); if (rec->regexp) iconfig_node_set_bool(node, "regexp", TRUE); if (rec->servertag) iconfig_node_set_str(node, "servertag", rec->servertag); if (rec->channels != NULL && *rec->channels != NULL) { node = config_node_section(node, "channels", NODE_TYPE_LIST); iconfig_node_add_list(node, rec->channels); } }
static void sig_server_setup_saved(IRC_SERVER_SETUP_REC *rec, CONFIG_NODE *node) { if (!IS_IRC_SERVER_SETUP(rec)) return; if (rec->max_cmds_at_once > 0) iconfig_node_set_int(node, "cmds_max_at_once", rec->max_cmds_at_once); if (rec->cmd_queue_speed > 0) iconfig_node_set_int(node, "cmd_queue_speed", rec->cmd_queue_speed); if (rec->max_query_chans > 0) iconfig_node_set_int(node, "max_query_chans", rec->max_query_chans); }
static void ignore_set_config(IGNORE_REC *rec) { CONFIG_NODE *node; char *levelstr; if (rec->level == 0) return; node = iconfig_node_traverse("(ignores", TRUE); node = iconfig_node_section(node, NULL, NODE_TYPE_BLOCK); if (rec->mask != NULL) iconfig_node_set_str(node, "mask", rec->mask); if (rec->level) { levelstr = bits2level(rec->level); iconfig_node_set_str(node, "level", levelstr); g_free(levelstr); } iconfig_node_set_str(node, "pattern", rec->pattern); if (rec->exception) iconfig_node_set_bool(node, "exception", TRUE); if (rec->regexp) iconfig_node_set_bool(node, "regexp", TRUE); if (rec->fullword) iconfig_node_set_bool(node, "fullword", TRUE); if (rec->replies) iconfig_node_set_bool(node, "replies", TRUE); if (rec->unignore_time != 0) iconfig_node_set_int(node, "unignore_time", rec->unignore_time); iconfig_node_set_str(node, "servertag", rec->servertag); if (rec->channels != NULL && *rec->channels != NULL) { node = iconfig_node_section(node, "channels", NODE_TYPE_LIST); iconfig_node_add_list(node, rec->channels); } }
static CONFIG_NODE *statusbar_items_section(CONFIG_NODE *parent) { STATUSBAR_CONFIG_REC *bar; CONFIG_NODE *node; GSList *tmp; node = config_node_section(parent, "items", -1); if (node != NULL) return node; /* find the statusbar configuration from memory */ bar = statusbar_config_find(active_statusbar_group, parent->key); if (bar == NULL) { printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_STATUSBAR_NOT_FOUND, parent->key); return NULL; } /* since items list in config file overrides defaults, we'll need to copy the whole list. */ parent = config_node_section(parent, "items", NODE_TYPE_BLOCK); for (tmp = bar->items; tmp != NULL; tmp = tmp->next) { SBAR_ITEM_CONFIG_REC *rec = tmp->data; node = config_node_section(parent, rec->name, NODE_TYPE_BLOCK); if (rec->priority != 0) iconfig_node_set_int(node, "priority", rec->priority); if (rec->right_alignment) iconfig_node_set_str(node, "alignment", "right"); } return parent; }
static CONFIG_NODE *statusbar_copy_config(CONFIG_REC *config, CONFIG_NODE *source, CONFIG_NODE *parent) { GSList *tmp; g_return_val_if_fail(parent != NULL, NULL); parent = iconfig_sbar_items_section(parent, TRUE); /* since items list in config file overrides defaults, we'll need to copy the whole list. */ for (tmp = config_node_first(source->value); tmp != NULL; tmp = config_node_next(tmp)) { int priority, right_alignment; CONFIG_NODE *node, *snode; snode = tmp->data; priority = config_node_get_int(snode, "priority", 0); right_alignment = g_strcmp0(config_node_get_str(snode, "alignment", ""), "right") == 0; /* create new item */ node = iconfig_node_section(parent, snode->key, NODE_TYPE_BLOCK); if (priority != 0) iconfig_node_set_int(node, "priority", priority); if (right_alignment) iconfig_node_set_str(node, "alignment", "right"); } return parent; }
/* SYNTAX: STATUSBAR ADDITEM|MODIFYITEM [-before | -after <item>] [-priority #] [-alignment left|right] <item> <statusbar> */ static void cmd_statusbar_additem_modifyitem(const char *data, void *server, void *witem) { CONFIG_NODE *node; GHashTable *optlist; char *item, *statusbar, *value; void *free_arg; int index; int additem = GPOINTER_TO_INT(signal_get_user_data()); if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTIONS | PARAM_FLAG_STRIP_TRAILING_WS, "statusbar additem", &optlist, &item, &statusbar)) return; if (*statusbar == '\0') { cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); } node = sbar_find_item_with_defaults(statusbar, item, additem); if (node == NULL) { cmd_params_free(free_arg); return; } /* get the index */ index = -1; value = g_hash_table_lookup(optlist, "before"); if (value != NULL) index = config_node_index(node, value); value = g_hash_table_lookup(optlist, "after"); if (value != NULL) index = config_node_index(node, value) + 1; /* create/move item */ node = iconfig_node_section_index(node, item, index, NODE_TYPE_BLOCK); /* set the options */ value = g_hash_table_lookup(optlist, "priority"); if (value != NULL) iconfig_node_set_int(node, "priority", atoi(value)); value = g_hash_table_lookup(optlist, "alignment"); if (value != NULL) { iconfig_node_set_str(node, "alignment", g_ascii_strcasecmp(value, "right") == 0 ? "right" : NULL); } read_statusbar_config(); cmd_params_free(free_arg); }
static void botuser_config_save(USER_REC *user) { CONFIG_NODE *node, *subnode, *noderec; GSList *tmp; char *str; user->last_modify = time(NULL); node = config_node_traverse(userconfig, "users", TRUE); node = config_node_section(node, user->nick, NODE_TYPE_BLOCK); str = user->flags == 0 ? NULL : botuser_value2flags(user->flags); config_node_set_str(userconfig, node, "flags", str); g_free_not_null(str); config_node_set_str(userconfig, node, "password", user->password); iconfig_node_set_int(node, "last_modify", (int) user->last_modify); /* Save masks */ if (user->masks == NULL) config_node_set_str(userconfig, node, "masks", NULL); else { subnode = config_node_section(node, "masks", NODE_TYPE_LIST); for (tmp = user->masks; tmp != NULL; tmp = tmp->next) { USER_MASK_REC *rec = tmp->data; noderec = config_node_section(subnode, NULL, NODE_TYPE_BLOCK); config_node_set_str(userconfig, noderec, "mask", rec->mask); str = user->flags == 0 ? NULL : botuser_value2flags(rec->not_flags); config_node_set_str(userconfig, noderec, "not_flags", str); g_free_not_null(str); } } /* Save channels */ if (g_hash_table_size(user->channels) == 0) config_node_set_str(userconfig, node, "channels", NULL); else { subnode = config_node_section(node, "channels", NODE_TYPE_LIST); g_hash_table_foreach(user->channels, (GHFunc) botuser_save_chan, subnode); } }
static void server_setup_save(SERVER_SETUP_REC *rec) { CONFIG_NODE *parent_node, *node; GSList *config_node; parent_node = iconfig_node_traverse("(servers", TRUE); /* Try to find this channel in the configuration */ config_node = g_slist_find_custom(parent_node->value, rec, (GCompareFunc)compare_server_setup); if (config_node != NULL) /* Let's update this server record */ node = config_node->data; else /* Create a brand-new server record */ node = iconfig_node_section(parent_node, NULL, NODE_TYPE_BLOCK); iconfig_node_clear(node); iconfig_node_set_str(node, "address", rec->address); iconfig_node_set_str(node, "chatnet", rec->chatnet); iconfig_node_set_int(node, "port", rec->port); iconfig_node_set_str(node, "password", rec->password); iconfig_node_set_bool(node, "use_ssl", rec->use_ssl); iconfig_node_set_str(node, "ssl_cert", rec->ssl_cert); iconfig_node_set_str(node, "ssl_pkey", rec->ssl_pkey); iconfig_node_set_str(node, "ssl_pass", rec->ssl_pass); iconfig_node_set_bool(node, "ssl_verify", rec->ssl_verify); iconfig_node_set_str(node, "ssl_cafile", rec->ssl_cafile); iconfig_node_set_str(node, "ssl_capath", rec->ssl_capath); iconfig_node_set_str(node, "ssl_ciphers", rec->ssl_ciphers); iconfig_node_set_str(node, "own_host", rec->own_host); iconfig_node_set_str(node, "family", rec->family == AF_INET6 ? "inet6" : rec->family == AF_INET ? "inet" : NULL); if (rec->autoconnect) iconfig_node_set_bool(node, "autoconnect", TRUE); if (rec->no_proxy) iconfig_node_set_bool(node, "no_proxy", TRUE); signal_emit("server setup saved", 2, rec, node); }
/* SYNTAX: STATUSBAR <name> ADD [-before | -after <item>] [-priority #] [-alignment left|right] <item> */ static void cmd_statusbar_add(const char *data, void *server, void *item, CONFIG_NODE *node) { GHashTable *optlist; char *name, *value; void *free_arg; int index; node = statusbar_items_section(node); if (node == NULL) return; if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS, "statusbar add", &optlist, &name)) return; /* get the index */ index = -1; value = g_hash_table_lookup(optlist, "before"); if (value != NULL) index = config_node_index(node, value); value = g_hash_table_lookup(optlist, "after"); if (value != NULL) index = config_node_index(node, value)+1; /* create/move item */ node = config_node_section_index(node, name, index, NODE_TYPE_BLOCK); /* set the options */ value = g_hash_table_lookup(optlist, "priority"); if (value != NULL) iconfig_node_set_int(node, "priority", atoi(value)); value = g_hash_table_lookup(optlist, "alignment"); if (value != NULL) { iconfig_node_set_str(node, "alignment", g_strcasecmp(value, "right") == 0 ? "right" : NULL); } cmd_params_free(free_arg); }
static void server_setup_save(SERVER_SETUP_REC *rec) { CONFIG_NODE *parentnode, *node; int index; index = g_slist_index(setupservers, rec); parentnode = iconfig_node_traverse("(servers", TRUE); node = config_node_nth(parentnode, index); if (node == NULL) node = config_node_section(parentnode, NULL, NODE_TYPE_BLOCK); iconfig_node_clear(node); iconfig_node_set_str(node, "address", rec->address); iconfig_node_set_str(node, "chatnet", rec->chatnet); iconfig_node_set_int(node, "port", rec->port); iconfig_node_set_str(node, "password", rec->password); iconfig_node_set_bool(node, "use_ssl", rec->use_ssl); iconfig_node_set_str(node, "ssl_tpm", rec->ssl_tpm); iconfig_node_set_str(node, "ssl_cert", rec->ssl_cert); iconfig_node_set_str(node, "ssl_pkey", rec->ssl_pkey); iconfig_node_set_bool(node, "ssl_verify", rec->ssl_verify); iconfig_node_set_str(node, "ssl_cafile", rec->ssl_cafile); iconfig_node_set_str(node, "ssl_capath", rec->ssl_capath); iconfig_node_set_str(node, "own_host", rec->own_host); iconfig_node_set_str(node, "family", rec->family == AF_INET6 ? "inet6" : rec->family == AF_INET ? "inet" : NULL); if (rec->autoconnect) iconfig_node_set_bool(node, "autoconnect", TRUE); if (rec->no_proxy) iconfig_node_set_bool(node, "no_proxy", TRUE); signal_emit("server setup saved", 2, rec, node); }
static void ircnet_save(IRC_CHATNET_REC *rec) { CONFIG_NODE *node; g_return_if_fail(rec != NULL); node = iconfig_node_traverse("ircnets", TRUE); node = chatnet_save((CHATNET_REC *) rec, node); if (rec->max_cmds_at_once > 0) iconfig_node_set_int(node, "cmdmax", rec->max_cmds_at_once); if (rec->cmd_queue_speed > 0) iconfig_node_set_int(node, "cmdspeed", rec->cmd_queue_speed); if (rec->max_kicks > 0) iconfig_node_set_int(node, "max_kicks", rec->max_kicks); if (rec->max_msgs > 0) iconfig_node_set_int(node, "max_msgs", rec->max_msgs); if (rec->max_modes > 0) iconfig_node_set_int(node, "max_modes", rec->max_modes); if (rec->max_whois > 0) iconfig_node_set_int(node, "max_whois", rec->max_whois); }
void settings_set_int(const char *key, int value) { iconfig_node_set_int(settings_get_node(key), key, value); }
/* SYNTAX: STATUSBAR <name> POSITION <num> */ static void cmd_statusbar_position(const char *data, void *server, void *item, CONFIG_NODE *node) { iconfig_node_set_int(node, "position", atoi(data)); }
/* SYNTAX: STATUSBAR ADD|MODIFY [-disable | -nodisable] [-type window|root] [-placement top|bottom] [-position #] [-visible always|active|inactive] <statusbar> */ static void cmd_statusbar_add_modify(const char *data, void *server, void *witem) { GHashTable *optlist; CONFIG_NODE *node; char *name, *type, *placement, *visible; void *free_arg; int error; int add = GPOINTER_TO_INT(signal_get_user_data()); if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS | PARAM_FLAG_STRIP_TRAILING_WS, "statusbar add", &optlist, &name)) return; if (*name == '\0') { cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); } error = 0; type = NULL; data = g_hash_table_lookup(optlist, "type"); if (data != NULL) { if (g_ascii_strcasecmp(data, "window") == 0) type = "window"; else if (g_ascii_strcasecmp(data, "root") == 0) type = "root"; else { printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_STATUSBAR_UNKNOWN_TYPE, data); error++; } } placement = NULL; data = g_hash_table_lookup(optlist, "placement"); if (data != NULL) { if (g_ascii_strcasecmp(data, "top") == 0) placement = "top"; else if (g_ascii_strcasecmp(data, "bottom") == 0) placement = "bottom"; else { printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_STATUSBAR_UNKNOWN_PLACEMENT, data); error++; } } visible = NULL; data = g_hash_table_lookup(optlist, "visible"); if (data != NULL) { if (g_ascii_strcasecmp(data, "always") == 0) visible = "always"; else if (g_ascii_strcasecmp(data, "active") == 0) visible = "active"; else if (g_ascii_strcasecmp(data, "inactive") == 0) visible = "inactive"; else { printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_STATUSBAR_UNKNOWN_VISIBILITY, data); error++; } } if (!error) { node = sbar_node(name, add); if (node == NULL && !add && sbar_node_isdefault(name)) { /* If this node is a default status bar, we need to create it in the config * to configure it */ node = sbar_node(name, TRUE); } if (node == NULL) { printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_STATUSBAR_NOT_FOUND, name); error++; } } if (error) { cmd_params_free(free_arg); return; } if (g_hash_table_lookup(optlist, "nodisable")) iconfig_node_set_str(node, "disabled", NULL); if (g_hash_table_lookup(optlist, "disable")) iconfig_node_set_bool(node, "disabled", TRUE); if (type != NULL) iconfig_node_set_str(node, "type", type); if (placement != NULL) iconfig_node_set_str(node, "placement", placement); data = g_hash_table_lookup(optlist, "position"); if (data != NULL) iconfig_node_set_int(node, "position", atoi(data)); if (visible != NULL) iconfig_node_set_str(node, "visible", visible); read_statusbar_config(); cmd_params_free(free_arg); }