From 4b8a56c56f5c683d820e84327f90307bbfdfea29 Mon Sep 17 00:00:00 2001 From: Ricardo Mones Date: Mon, 20 May 2013 22:59:57 +0200 Subject: [PATCH] Fix #2927 'Optional case insensitivity for the attach-warner-plugin' Based on original patch provided by Henri Bauer --- src/matcher.c | 14 ++++++++----- src/matcher.h | 3 ++- src/plugins/address_keeper/address_keeper.c | 2 +- src/plugins/attachwarner/attachwarner.c | 2 +- src/plugins/attachwarner/attachwarner_prefs.c | 20 +++++++++++++++++-- src/plugins/attachwarner/attachwarner_prefs.h | 1 + 6 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/matcher.c b/src/matcher.c index c95655cf4..93df51510 100644 --- a/src/matcher.c +++ b/src/matcher.c @@ -1188,10 +1188,12 @@ static gchar *build_complete_regexp(gchar **strings) * *\param lines String with "\n"-separated expressions *\param bool_and Operator + *\param case_sensitive If the matching is case sensitive or not * *\return MatcherList * New matcher list */ -MatcherList *matcherlist_new_from_lines(gchar *lines, gboolean bool_and) +MatcherList *matcherlist_new_from_lines(gchar *lines, gboolean bool_and, + gboolean case_sensitive) { MatcherProp *m = NULL; GSList *matchers = NULL; @@ -1202,8 +1204,9 @@ MatcherList *matcherlist_new_from_lines(gchar *lines, gboolean bool_and) expr = build_complete_regexp(strings); debug_print("building matcherprop for expr '%s'\n", expr?expr:"NULL"); - m = matcherprop_new(MATCHCRITERIA_SUBJECT, NULL, MATCHTYPE_REGEXP, - expr, 0); + m = matcherprop_new(MATCHCRITERIA_SUBJECT, NULL, + case_sensitive? MATCHTYPE_REGEXP: MATCHTYPE_REGEXPCASE, + expr, 0); if (m == NULL) { /* print error message */ debug_print("failed to allocate memory for matcherprop\n"); @@ -1215,8 +1218,9 @@ MatcherList *matcherlist_new_from_lines(gchar *lines, gboolean bool_and) #else int i = 0; while (strings && strings[i] && *strings[i]) { - m = matcherprop_new(MATCHCRITERIA_SUBJECT, NULL, MATCHTYPE_MATCHCASE, - strings[i], 0); + m = matcherprop_new(MATCHCRITERIA_SUBJECT, NULL, + case_sensitive? MATCHTYPE_MATCH: MATCHTYPE_MATCHCASE + strings[i], 0); if (m == NULL) { /* print error message */ debug_print("failed to allocate memory for matcherprop\n"); diff --git a/src/matcher.h b/src/matcher.h index 13542a680..9a6c89816 100644 --- a/src/matcher.h +++ b/src/matcher.h @@ -163,7 +163,8 @@ MatcherProp *matcherprop_copy (const MatcherProp *src); MatcherList * matcherlist_new (GSList *matchers, gboolean bool_and); MatcherList * matcherlist_new_from_lines(gchar *lines, - gboolean bool_and); + gboolean bool_and, + gboolean case_sensitive); void matcherlist_free (MatcherList *cond); MatcherList *matcherlist_parse (gchar **str); diff --git a/src/plugins/address_keeper/address_keeper.c b/src/plugins/address_keeper/address_keeper.c index be4f05338..673fe120a 100644 --- a/src/plugins/address_keeper/address_keeper.c +++ b/src/plugins/address_keeper/address_keeper.c @@ -197,7 +197,7 @@ static gboolean addrk_before_send_hook(gpointer source, gpointer data) if (addkeeperprefs.block_matching_addrs != NULL && addkeeperprefs.block_matching_addrs[0] != '\0') { - blocked = matcherlist_new_from_lines(addkeeperprefs.block_matching_addrs, FALSE); + blocked = matcherlist_new_from_lines(addkeeperprefs.block_matching_addrs, FALSE, TRUE); if (blocked == NULL) g_warning("couldn't allocate matcher"); } diff --git a/src/plugins/attachwarner/attachwarner.c b/src/plugins/attachwarner/attachwarner.c index e4d19a9e8..f5160dc4f 100644 --- a/src/plugins/attachwarner/attachwarner.c +++ b/src/plugins/attachwarner/attachwarner.c @@ -111,7 +111,7 @@ AttachWarnerMention *are_attachments_mentioned(Compose *compose) AttachWarnerMention *mention = NULL; MatcherList *matchers = NULL; - matchers = matcherlist_new_from_lines(attwarnerprefs.match_strings, FALSE); + matchers = matcherlist_new_from_lines(attwarnerprefs.match_strings, FALSE, attwarnerprefs.case_sensitive); if (matchers == NULL) { g_warning("couldn't allocate matcher"); diff --git a/src/plugins/attachwarner/attachwarner_prefs.c b/src/plugins/attachwarner/attachwarner_prefs.c index b1b7bf781..82fe167cf 100644 --- a/src/plugins/attachwarner/attachwarner_prefs.c +++ b/src/plugins/attachwarner/attachwarner_prefs.c @@ -45,6 +45,7 @@ struct AttachWarnerPrefsPage GtkWidget *skip_quotes_checkbox; GtkWidget *skip_forwards_and_redirections; GtkWidget *skip_signature; + GtkWidget *case_sensitive_checkbox; }; struct AttachWarnerPrefsPage attwarnerprefs_page; @@ -58,6 +59,8 @@ static PrefParam param[] = { NULL, NULL, NULL}, {"skip_signature", "TRUE", &attwarnerprefs.skip_signature, P_BOOL, NULL, NULL, NULL}, + {"case_sensitive", "TRUE", &attwarnerprefs.case_sensitive, P_BOOL, + NULL, NULL, NULL}, {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL} }; @@ -73,6 +76,7 @@ static void attwarner_prefs_create_widget_func(PrefsPage * _page, GtkWidget *skip_quotes_checkbox; GtkWidget *skip_fwd_redir_checkbox; GtkWidget *skip_signature_checkbox; + GtkWidget *case_sensitive_checkbox; vbox = gtk_vbox_new(FALSE, 6); hbox = gtk_hbox_new(FALSE, 6); @@ -80,8 +84,18 @@ static void attwarner_prefs_create_widget_func(PrefsPage * _page, label = gtk_label_new(_("Warn when matching the following regular expressions:\n(one per line)")); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 6); + + case_sensitive_checkbox = gtk_check_button_new_with_label(_("Case sensitive")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(case_sensitive_checkbox), + attwarnerprefs.case_sensitive); + gtk_box_pack_start(GTK_BOX(vbox), case_sensitive_checkbox, FALSE, FALSE, 0); + gtk_widget_show(case_sensitive_checkbox); + + CLAWS_SET_TIP(case_sensitive_checkbox, + _("Case sensitive when matching for the regular expressions in the list")); + page->case_sensitive_checkbox = case_sensitive_checkbox; + page->regexp_text = gtk_text_view_new(); - buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(page->regexp_text)); gtk_text_buffer_set_text(buffer, attwarnerprefs.match_strings, -1); @@ -125,7 +139,7 @@ static void attwarner_prefs_create_widget_func(PrefsPage * _page, CLAWS_SET_TIP(skip_signature_checkbox, _("Exclude lines from the first signature-separator onwards from checking for the regular expressions above")); page->skip_signature = skip_signature_checkbox; - + gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 6); gtk_widget_show_all(hbox); @@ -186,6 +200,8 @@ static void attwarner_prefs_save_func(PrefsPage * _page) (GTK_TOGGLE_BUTTON(page->skip_forwards_and_redirections)); attwarnerprefs.skip_signature = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(page->skip_signature)); + attwarnerprefs.case_sensitive = gtk_toggle_button_get_active + (GTK_TOGGLE_BUTTON(page->case_sensitive_checkbox)); attwarner_save_config(); g_free(attwarnerprefs.match_strings); diff --git a/src/plugins/attachwarner/attachwarner_prefs.h b/src/plugins/attachwarner/attachwarner_prefs.h index 942a21c35..0d5b27e6f 100644 --- a/src/plugins/attachwarner/attachwarner_prefs.h +++ b/src/plugins/attachwarner/attachwarner_prefs.h @@ -31,6 +31,7 @@ struct _AttachWarnerPrefs gboolean skip_quotes; gboolean skip_forwards_and_redirections; gboolean skip_signature; + gboolean case_sensitive; }; extern AttachWarnerPrefs attwarnerprefs; -- 2.25.1