2009-09-14 [colin] 3.7.2cvs32
authorColin Leroy <colin@colino.net>
Mon, 14 Sep 2009 07:27:38 +0000 (07:27 +0000)
committerColin Leroy <colin@colino.net>
Mon, 14 Sep 2009 07:27:38 +0000 (07:27 +0000)
* 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
PATCHSETS
configure.ac
src/matcher.c
src/matcher.h
src/matcher_parser_parse.y
src/prefs_matcher.c

index 0838bdd..3c50b63 100644 (file)
--- 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
index 599df6c..fb7f875 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( 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
index f572a89..b24b397 100644 (file)
@@ -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=
 
index 5dc219d..8a7930b 100644 (file)
@@ -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:
index e46e86a..c78edd6 100644 (file)
@@ -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),
index c7a0a77..c28684a 100644 (file)
@@ -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;
index 4c94b1e..9704400 100644 (file)
@@ -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 :