g_return_val_if_fail(server != NULL, 0);
if (nick == NULL) nick = "";
- chanrec = (channel != NULL && server != NULL &&
- server->ischannel(channel)) ?
- channel_find(server, channel) : NULL;
+ chanrec = server == NULL || channel == NULL ? NULL :
+ channel_find(server, channel);
if (chanrec != NULL && nick != NULL &&
(nickrec = nicklist_find(chanrec, nick)) != NULL) {
/* nick found - check only ignores in nickmatch cache */
CONFIG_NODE *node;
char *levelstr;
- if (rec->level == 0 || rec->unignore_time > 0)
+ if (rec->level == 0)
return;
node = iconfig_node_traverse("(ignores", 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 = config_node_section(node, "channels", NODE_TYPE_LIST);
for (tmp = ignores; tmp != NULL; tmp = tmp->next) {
IGNORE_REC *rec = tmp->data;
- if (rec->servertag != NULL)
- continue;
-
if (rec == find)
return index;
index++;
if (node != NULL) iconfig_node_list_remove(node, ignore_index(rec));
}
-void ignore_add_rec(IGNORE_REC *rec)
+static void ignore_init_rec(IGNORE_REC *rec)
{
#ifdef HAVE_REGEX_H
+ if (rec->regexp_compiled) regfree(&rec->preg);
rec->regexp_compiled = !rec->regexp || rec->pattern == NULL ? FALSE :
regcomp(&rec->preg, rec->pattern,
REG_EXTENDED|REG_ICASE|REG_NOSUB) == 0;
#endif
+}
+
+void ignore_add_rec(IGNORE_REC *rec)
+{
+ ignore_init_rec(rec);
ignores = g_slist_append(ignores, rec);
ignore_set_config(rec);
signal_emit("ignore created", 1, rec);
+ nickmatch_rebuild(nickmatch);
}
static void ignore_destroy(IGNORE_REC *rec, int send_signal)
ignores = g_slist_append(ignores, rec);
ignore_set_config(rec);
+ ignore_init_rec(rec);
signal_emit("ignore changed", 1, rec);
nickmatch_rebuild(nickmatch);
}
return;
}
- for (tmp = node->value; tmp != NULL; tmp = tmp->next) {
+ tmp = config_node_first(node->value);
+ for (; tmp != NULL; tmp = config_node_next(tmp)) {
node = tmp->data;
if (node->type != NODE_TYPE_BLOCK)
ignores = g_slist_append(ignores, rec);
rec->mask = g_strdup(config_node_get_str(node, "mask", NULL));
- if (rec->mask != NULL && strcmp(rec->mask, "*") == 0) {
- /* FIXME: remove after .98 */
- g_free(rec->mask);
- rec->mask = NULL;
- }
rec->pattern = g_strdup(config_node_get_str(node, "pattern", NULL));
rec->level = level2bits(config_node_get_str(node, "level", ""));
rec->exception = config_node_get_bool(node, "exception", FALSE);
- if (*config_node_get_str(node, "except_level", "") != '\0') {
- /* FIXME: remove after .98 */
- rec->level = level2bits(config_node_get_str(node, "except_level", ""));
- rec->exception = TRUE;
- }
rec->regexp = config_node_get_bool(node, "regexp", FALSE);
rec->fullword = config_node_get_bool(node, "fullword", FALSE);
rec->replies = config_node_get_bool(node, "replies", FALSE);
+ rec->unignore_time = config_node_get_int(node, "unignore_time", 0);
+ rec->servertag = g_strdup(config_node_get_str(node, "servertag", 0));
node = config_node_section(node, "channels", -1);
if (node != NULL) rec->channels = config_node_get_list(node);
+
+ ignore_init_rec(rec);
}
nickmatch_rebuild(nickmatch);