diff options
author | TingPing <tingping@tingping.se> | 2013-10-14 17:25:21 -0400 |
---|---|---|
committer | TingPing <tingping@tingping.se> | 2013-10-14 17:25:21 -0400 |
commit | 490b9a91e4e17ef1efad992a315ad264293907cf (patch) | |
tree | 9b7eccfbd0f2b97f6b52af8c87dd22a0627ae3c4 | |
parent | 80cbc74b2b97e637822449600805752e8b399beb (diff) |
Don't overwrite existing ignores when flooded
Closes #792
-rw-r--r-- | src/common/ignore.c | 17 | ||||
-rw-r--r-- | src/common/ignore.h | 2 | ||||
-rw-r--r-- | src/common/outbound.c | 2 | ||||
-rw-r--r-- | src/fe-gtk/ignoregui.c | 6 |
4 files changed, 13 insertions, 14 deletions
diff --git a/src/common/ignore.c b/src/common/ignore.c index 5bd6a6a5..045224ba 100644 --- a/src/common/ignore.c +++ b/src/common/ignore.c @@ -77,7 +77,7 @@ ignore_exists (char *mask) */ int -ignore_add (char *mask, int type) +ignore_add (char *mask, int type, gboolean overwrite) { struct ignore *ig = 0; int change_only = FALSE; @@ -94,7 +94,11 @@ ignore_add (char *mask, int type) return 0; ig->mask = strdup (mask); - ig->type = type; + + if (!overwrite && change_only) + ig->type |= type; + else + ig->type = type; if (!change_only) ignore_list = g_slist_prepend (ignore_list, ig); @@ -376,16 +380,14 @@ flood_check (char *nick, char *ip, server *serv, session *sess, int what) /*0=ct if (ip[i] == '@') break; snprintf (real_ip, sizeof (real_ip), "*!*%s", &ip[i]); - /*ignore_add (char *mask, int priv, int noti, int chan, - int ctcp, int invi, int unignore, int no_save) */ snprintf (buf, sizeof (buf), _("You are being CTCP flooded from %s, ignoring %s\n"), nick, real_ip); PrintText (sess, buf); - /*FIXME: only ignore ctcp or all?, its ignoring ctcps for now */ - ignore_add (real_ip, IG_CTCP); + /* ignore CTCP */ + ignore_add (real_ip, IG_CTCP, FALSE); return 0; } } @@ -410,12 +412,9 @@ flood_check (char *nick, char *ip, server *serv, session *sess, int what) /*0=ct PrintText (sess, buf); serv->msg_last_time = current_time; /*we got the flood, restore all the vars for next one */ serv->msg_counter = 0; - /*ignore_add (char *mask, int priv, int noti, int chan, - int ctcp, int invi, int unignore, int no_save) */ if (prefs.hex_gui_autoopen_dialog) { - /*FIXME: only ignore ctcp or all?, its ignoring ctcps for now */ prefs.hex_gui_autoopen_dialog = 0; /* turn it back on in 30 secs */ fe_timeout_add (30000, flood_autodialog_timeout, NULL); diff --git a/src/common/ignore.h b/src/common/ignore.h index 3263a940..674e6285 100644 --- a/src/common/ignore.h +++ b/src/common/ignore.h @@ -44,7 +44,7 @@ struct ignore }; struct ignore *ignore_exists (char *mask); -int ignore_add (char *mask, int type); +int ignore_add (char *mask, int type, gboolean overwrite); void ignore_showlist (session *sess); int ignore_del (char *mask, struct ignore *ig); int ignore_check (char *mask, int type); diff --git a/src/common/outbound.c b/src/common/outbound.c index b4a8f4d4..4257912c 100644 --- a/src/common/outbound.c +++ b/src/common/outbound.c @@ -2278,7 +2278,7 @@ cmd_ignore (struct session *sess, char *tbuf, char *word[], char *word_eol[]) snprintf (tbuf, TBUFSIZE, "%s!*@*", word[2]); } - i = ignore_add (mask, type); + i = ignore_add (mask, type, TRUE); if (quiet) return TRUE; switch (i) diff --git a/src/fe-gtk/ignoregui.c b/src/fe-gtk/ignoregui.c index ae2dbd94..60b09698 100644 --- a/src/fe-gtk/ignoregui.c +++ b/src/fe-gtk/ignoregui.c @@ -103,7 +103,7 @@ mask_edited (GtkCellRendererText *render, gchar *path, gchar *new, gpointer dat) /* delete old mask, and add new one with original flags */ ignore_del (old, NULL); flags = ignore_get_flags (GTK_TREE_MODEL (store), &iter); - ignore_add (new, flags); + ignore_add (new, flags, TRUE); /* update tree */ gtk_list_store_set (store, &iter, MASK_COLUMN, new, -1); @@ -131,7 +131,7 @@ option_toggled (GtkCellRendererToggle *render, gchar *path, gpointer data) /* update ignore list */ gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, 0, &mask, -1); flags = ignore_get_flags (GTK_TREE_MODEL (store), &iter); - if (ignore_add (mask, flags) != 2) + if (ignore_add (mask, flags, TRUE) != 2) g_warning ("ignore treeview is out of sync!\n"); g_free (mask); @@ -244,7 +244,7 @@ ignore_store_new (int cancel, char *mask, gpointer data) return; } - ignore_add (mask, flags); + ignore_add (mask, flags, TRUE); gtk_list_store_append (store, &iter); /* ignore everything by default */ |