Exemple #1
0
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);
    }
}
Exemple #2
0
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);
}
Exemple #3
0
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);
	}
}
Exemple #4
0
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;
}
Exemple #5
0
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;
}
Exemple #6
0
/* 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);
}
Exemple #7
0
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);
	}
}
Exemple #8
0
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);
}
Exemple #9
0
/* 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);
}
Exemple #10
0
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);
}
Exemple #11
0
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);
}
Exemple #12
0
void settings_set_int(const char *key, int value)
{
        iconfig_node_set_int(settings_get_node(key), key, value);
}
Exemple #13
0
/* 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));
}
Exemple #14
0
/* 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);
}