commit 21f4e34752b60739c7519a84462fefcd364ee265
parent 970708cd27126b79786db06c9355acc6348316af
Author: Colin Leroy <colin@colino.net>
Date: Mon, 14 Sep 2009 07:27:38 +0000
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.
Diffstat:
7 files changed, 94 insertions(+), 2 deletions(-)
diff --git 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 :