From 21f4e34752b60739c7519a84462fefcd364ee265 Mon Sep 17 00:00:00 2001 From: Colin Leroy Date: Mon, 14 Sep 2009 07:27:38 +0000 Subject: [PATCH 1/1] 2009-09-14 [colin] 3.7.2cvs32 * src/matcher.c * src/matcher.h * src/matcher_parser_parse.y * src/prefs_matcher.c Add 'has_attachment' and 'signed' matcher expressions. Patch by Aleksei Miheev, fixes bug 1997. --- ChangeLog | 10 ++++++++++ PATCHSETS | 1 + configure.ac | 2 +- src/matcher.c | 20 ++++++++++++++++++++ src/matcher.h | 2 ++ src/matcher_parser_parse.y | 30 ++++++++++++++++++++++++++++++ src/prefs_matcher.c | 31 ++++++++++++++++++++++++++++++- 7 files changed, 94 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0838bddfe..3c50b634f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2009-09-14 [colin] 3.7.2cvs32 + + * src/matcher.c + * src/matcher.h + * src/matcher_parser_parse.y + * src/prefs_matcher.c + Add 'has_attachment' and 'signed' matcher + expressions. Patch by Aleksei Miheev, fixes + bug 1997. + 2009-09-14 [colin] 3.7.2cvs31 * src/common/utils.c diff --git a/PATCHSETS b/PATCHSETS index 599df6c2e..fb7f8750b 100644 --- a/PATCHSETS +++ b/PATCHSETS @@ -3856,3 +3856,4 @@ ( cvs diff -u -r 1.24.2.25 -r 1.24.2.26 Makefile.am; ) > 3.7.2cvs29.patchset ( cvs diff -u -r 1.1.2.25 -r 1.1.2.26 manual/plugins.xml; cvs diff -u -r 1.1.2.7 -r 1.1.2.8 manual/es/plugins.xml; ) > 3.7.2cvs30.patchset ( cvs diff -u -r 1.36.2.174 -r 1.36.2.175 src/common/utils.c; ) > 3.7.2cvs31.patchset +( cvs diff -u -r 1.75.2.65 -r 1.75.2.66 src/matcher.c; cvs diff -u -r 1.39.2.17 -r 1.39.2.18 src/matcher.h; cvs diff -u -r 1.25.2.33 -r 1.25.2.34 src/matcher_parser_parse.y; cvs diff -u -r 1.43.2.81 -r 1.43.2.82 src/prefs_matcher.c; ) > 3.7.2cvs32.patchset diff --git a/configure.ac b/configure.ac index f572a89b4..b24b397a8 100644 --- a/configure.ac +++ b/configure.ac @@ -12,7 +12,7 @@ MINOR_VERSION=7 MICRO_VERSION=2 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=31 +EXTRA_VERSION=32 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/matcher.c b/src/matcher.c index 5dc219dca..8a7930b06 100644 --- a/src/matcher.c +++ b/src/matcher.c @@ -85,6 +85,10 @@ static const MatchParser matchparser_tab[] = { {MATCHCRITERIA_NOT_WATCH_THREAD, "~watch_thread"}, {MATCHCRITERIA_SPAM, "spam"}, {MATCHCRITERIA_NOT_SPAM, "~spam"}, + {MATCHCRITERIA_HAS_ATTACHMENT, "has_attachment"}, + {MATCHCRITERIA_HAS_NO_ATTACHMENT, "~has_attachment"}, + {MATCHCRITERIA_SIGNED, "signed"}, + {MATCHCRITERIA_NOT_SIGNED, "~signed"}, /* msginfo headers */ {MATCHCRITERIA_SUBJECT, "subject"}, @@ -798,6 +802,14 @@ gboolean matcherprop_match(MatcherProp *prop, return MSG_IS_SPAM(info->flags); case MATCHCRITERIA_NOT_SPAM: return !MSG_IS_SPAM(info->flags); + case MATCHCRITERIA_HAS_ATTACHMENT: + return MSG_IS_WITH_ATTACHMENT(info->flags); + case MATCHCRITERIA_HAS_NO_ATTACHMENT: + return !MSG_IS_WITH_ATTACHMENT(info->flags); + case MATCHCRITERIA_SIGNED: + return MSG_IS_SIGNED(info->flags); + case MATCHCRITERIA_NOT_SIGNED: + return !MSG_IS_SIGNED(info->flags); case MATCHCRITERIA_COLORLABEL: { gint color = MSG_GET_COLORLABEL_VALUE(info->flags); @@ -1686,6 +1698,10 @@ gboolean matcherlist_match(MatcherList *matchers, MsgInfo *info) case MATCHCRITERIA_NOT_LOCKED: case MATCHCRITERIA_SPAM: case MATCHCRITERIA_NOT_SPAM: + case MATCHCRITERIA_HAS_ATTACHMENT: + case MATCHCRITERIA_HAS_NO_ATTACHMENT: + case MATCHCRITERIA_SIGNED: + case MATCHCRITERIA_NOT_SIGNED: case MATCHCRITERIA_COLORLABEL: case MATCHCRITERIA_NOT_COLORLABEL: case MATCHCRITERIA_IGNORE_THREAD: @@ -1881,6 +1897,10 @@ gchar *matcherprop_to_string(MatcherProp *matcher) case MATCHCRITERIA_NOT_LOCKED: case MATCHCRITERIA_SPAM: case MATCHCRITERIA_NOT_SPAM: + case MATCHCRITERIA_HAS_ATTACHMENT: + case MATCHCRITERIA_HAS_NO_ATTACHMENT: + case MATCHCRITERIA_SIGNED: + case MATCHCRITERIA_NOT_SIGNED: case MATCHCRITERIA_PARTIAL: case MATCHCRITERIA_NOT_PARTIAL: case MATCHCRITERIA_IGNORE_THREAD: diff --git a/src/matcher.h b/src/matcher.h index e46e86ab9..c78edd6fc 100644 --- a/src/matcher.h +++ b/src/matcher.h @@ -78,6 +78,8 @@ enum { MC_(FORWARDED), MC_(NOT_FORWARDED), MC_(LOCKED), MC_(NOT_LOCKED), MC_(SPAM),MC_(NOT_SPAM), + MC_(HAS_ATTACHMENT), MC_(HAS_NO_ATTACHMENT), + MC_(SIGNED), MC_(NOT_SIGNED), MC_(PARTIAL), MC_(NOT_PARTIAL), MC_(COLORLABEL), MC_(NOT_COLORLABEL), MC_(IGNORE_THREAD), MC_(NOT_IGNORE_THREAD), diff --git a/src/matcher_parser_parse.y b/src/matcher_parser_parse.y index c7a0a777b..c28684a01 100644 --- a/src/matcher_parser_parse.y +++ b/src/matcher_parser_parse.y @@ -337,6 +337,8 @@ int matcher_parserwrap(void) %token MATCHER_ADD_TO_ADDRESSBOOK %token MATCHER_STOP MATCHER_HIDE MATCHER_IGNORE MATCHER_WATCH %token MATCHER_SPAM MATCHER_NOT_SPAM +%token MATCHER_HAS_ATTACHMENT MATCHER_HAS_NO_ATTACHMENT +%token MATCHER_SIGNED MATCHER_NOT_SIGNED %token MATCHER_TAG MATCHER_NOT_TAG MATCHER_SET_TAG MATCHER_UNSET_TAG %token MATCHER_TAGGED MATCHER_NOT_TAGGED MATCHER_CLEAR_TAGS @@ -711,6 +713,34 @@ MATCHER_ALL criteria = MATCHCRITERIA_NOT_SPAM; prop = matcherprop_new(criteria, NULL, 0, NULL, 0); } +| MATCHER_HAS_ATTACHMENT +{ + gint criteria = 0; + + criteria = MATCHCRITERIA_HAS_ATTACHMENT; + prop = matcherprop_new(criteria, NULL, 0, NULL, 0); +} +| MATCHER_HAS_NO_ATTACHMENT +{ + gint criteria = 0; + + criteria = MATCHCRITERIA_HAS_NO_ATTACHMENT; + prop = matcherprop_new(criteria, NULL, 0, NULL, 0); +} +| MATCHER_SIGNED +{ + gint criteria = 0; + + criteria = MATCHCRITERIA_SIGNED; + prop = matcherprop_new(criteria, NULL, 0, NULL, 0); +} +| MATCHER_NOT_SIGNED +{ + gint criteria = 0; + + criteria = MATCHCRITERIA_NOT_SIGNED; + prop = matcherprop_new(criteria, NULL, 0, NULL, 0); +} | MATCHER_PARTIAL { gint criteria = 0; diff --git a/src/prefs_matcher.c b/src/prefs_matcher.c index 4c94b1ea6..97044002b 100644 --- a/src/prefs_matcher.c +++ b/src/prefs_matcher.c @@ -170,7 +170,10 @@ enum { CRITERIA_FOUND_IN_ADDRESSBOOK = 34, CRITERIA_TAG = 35, - CRITERIA_TAGGED = 36 + CRITERIA_TAGGED = 36, + + CRITERIA_HAS_ATTACHMENT = 37, + CRITERIA_SIGNED = 38 }; enum { @@ -373,6 +376,8 @@ static void prefs_matcher_models_create(void) COMBOBOX_ADD(store, _("Forwarded"), CRITERIA_FORWARDED); COMBOBOX_ADD(store, _("Locked"), CRITERIA_LOCKED); COMBOBOX_ADD(store, _("Spam"), CRITERIA_SPAM); + COMBOBOX_ADD(store, _("Has attachment"), CRITERIA_HAS_ATTACHMENT); + COMBOBOX_ADD(store, _("Signed"), CRITERIA_SIGNED); matcher.model_flags = GTK_TREE_MODEL(store); store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN); @@ -1008,6 +1013,12 @@ static gint prefs_matcher_get_criteria_from_matching(gint matching_id) case MATCHCRITERIA_NOT_SPAM: case MATCHCRITERIA_SPAM: return CRITERIA_SPAM; + case MATCHCRITERIA_HAS_ATTACHMENT: + case MATCHCRITERIA_HAS_NO_ATTACHMENT: + return CRITERIA_HAS_ATTACHMENT; + case MATCHCRITERIA_SIGNED: + case MATCHCRITERIA_NOT_SIGNED: + return CRITERIA_SIGNED; case MATCHCRITERIA_PARTIAL: case MATCHCRITERIA_NOT_PARTIAL: return CRITERIA_PARTIAL; @@ -1118,6 +1129,10 @@ static gint prefs_matcher_get_matching_from_criteria(gint criteria_id) return MATCHCRITERIA_LOCKED; case CRITERIA_SPAM: return MATCHCRITERIA_SPAM; + case CRITERIA_HAS_ATTACHMENT: + return MATCHCRITERIA_HAS_ATTACHMENT; + case CRITERIA_SIGNED: + return MATCHCRITERIA_SIGNED; case CRITERIA_PARTIAL: return MATCHCRITERIA_PARTIAL; case CRITERIA_COLORLABEL: @@ -1206,6 +1221,10 @@ static gint prefs_matcher_not_criteria(gint matcher_criteria) return MATCHCRITERIA_NOT_LOCKED; case MATCHCRITERIA_SPAM: return MATCHCRITERIA_NOT_SPAM; + case MATCHCRITERIA_HAS_ATTACHMENT: + return MATCHCRITERIA_HAS_NO_ATTACHMENT; + case MATCHCRITERIA_SIGNED: + return MATCHCRITERIA_NOT_SIGNED; case MATCHCRITERIA_PARTIAL: return MATCHCRITERIA_NOT_PARTIAL; case MATCHCRITERIA_COLORLABEL: @@ -1315,6 +1334,8 @@ static gint prefs_matcher_get_pred(const gint criteria) case CRITERIA_FORWARDED: case CRITERIA_LOCKED: case CRITERIA_SPAM: + case CRITERIA_HAS_ATTACHMENT: + case CRITERIA_SIGNED: case CRITERIA_COLORLABEL: return gtk_combo_box_get_active(GTK_COMBO_BOX(matcher.match_combo2)); case CRITERIA_WATCH_THREAD: @@ -1389,6 +1410,8 @@ static MatcherProp *prefs_matcher_dialog_to_matcher(void) case CRITERIA_FORWARDED: case CRITERIA_LOCKED: case CRITERIA_SPAM: + case CRITERIA_HAS_ATTACHMENT: + case CRITERIA_SIGNED: case CRITERIA_PARTIAL: case CRITERIA_IGNORE_THREAD: case CRITERIA_WATCH_THREAD: @@ -2207,6 +2230,8 @@ static void prefs_matcher_set_criteria(const gint criteria) case CRITERIA_FORWARDED: case CRITERIA_LOCKED: case CRITERIA_SPAM: + case CRITERIA_HAS_ATTACHMENT: + case CRITERIA_SIGNED: match_criteria = MATCH_FLAG; break; case CRITERIA_PARTIAL: @@ -2294,6 +2319,8 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector, case MATCHCRITERIA_NOT_FORWARDED: case MATCHCRITERIA_NOT_LOCKED: case MATCHCRITERIA_NOT_SPAM: + case MATCHCRITERIA_HAS_NO_ATTACHMENT: + case MATCHCRITERIA_NOT_SIGNED: case MATCHCRITERIA_NOT_PARTIAL: case MATCHCRITERIA_NOT_COLORLABEL: case MATCHCRITERIA_NOT_IGNORE_THREAD: @@ -2463,6 +2490,8 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector, case CRITERIA_FORWARDED: case CRITERIA_LOCKED: case CRITERIA_SPAM: + case CRITERIA_HAS_ATTACHMENT: + case CRITERIA_SIGNED: case CRITERIA_COLORLABEL: gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo2), negative_cond ? PREDICATE_FLAG_DISABLED : -- 2.25.1