add filtering conditions message greater than, smaller than, and exactly matching...
authorAlfons Hoogervorst <alfons@proteus.demon.nl>
Fri, 15 Mar 2002 22:01:04 +0000 (22:01 +0000)
committerAlfons Hoogervorst <alfons@proteus.demon.nl>
Fri, 15 Mar 2002 22:01:04 +0000 (22:01 +0000)
ChangeLog.claws
configure.in
src/matcher.c
src/matcher.h
src/matcher_parser_lex.l
src/matcher_parser_parse.y
src/prefs_matcher.c

index 03e571a..3d7790f 100644 (file)
@@ -1,3 +1,17 @@
+2002-03-15 [alfons]    0.7.4claws10
+
+       * src/matcher.[ch]
+       * src/matcher_parser_parse.y
+       * src/matcher_parser_lex.l
+       * src/prefs_matcher.c
+               add filtering conditions message greater than, smaller 
+               than, and exactly matching a size in bytes
+               (does not work with delete from POP3 server yet)
+
+               this should also give others an idea what you should
+               do to add new criterions to claws filtering system
+               
+
 2002-03-15 [paul]      0.7.4claws9
 
        * tools/filter_conv.pl
index ffad862..a5295c0 100644 (file)
@@ -8,7 +8,7 @@ MINOR_VERSION=7
 MICRO_VERSION=4
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=claws9
+EXTRA_VERSION=claws10
 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
 
 dnl set $target
index 5f1530b..18526a3 100644 (file)
@@ -56,6 +56,10 @@ static MatchParser matchparser_tab[] = {
        {MATCHCRITERIA_SCORE_LOWER, "score_lower"},
        {MATCHCRITERIA_SCORE_EQUAL, "score_equal"},
 
+       {MATCHCRITERIA_SIZE_GREATER, "size_greater"},
+       {MATCHCRITERIA_SIZE_SMALLER, "size_smaller"},
+       {MATCHCRITERIA_SIZE_EQUAL,   "size_equal"},
+
        /* content have to be read */
        {MATCHCRITERIA_HEADER, "header"},
        {MATCHCRITERIA_NOT_HEADER, "~header"},
@@ -341,6 +345,15 @@ gboolean matcherprop_match(MatcherProp * prop, MsgInfo * info)
                return info->score <= prop->value;
        case MATCHCRITERIA_SCORE_EQUAL:
                return info->score == prop->value;
+       case MATCHCRITERIA_SIZE_GREATER:
+               /* FIXME: info->size is an off_t */
+               return info->size > (off_t) prop->value;
+       case MATCHCRITERIA_SIZE_EQUAL:
+               /* FIXME: info->size is an off_t */
+               return info->size == (off_t) prop->value;
+       case MATCHCRITERIA_SIZE_SMALLER:
+               /* FIXME: info->size is an off_t */
+               return info->size <  (off_t) prop->value;
        case MATCHCRITERIA_NEWSGROUPS:
                return matcherprop_string_match(prop, info->newsgroups);
        case MATCHCRITERIA_NOT_NEWSGROUPS:
@@ -727,6 +740,9 @@ gboolean matcherlist_match(MatcherList * matchers, MsgInfo * info)
                case MATCHCRITERIA_SCORE_GREATER:
                case MATCHCRITERIA_SCORE_LOWER:
                case MATCHCRITERIA_SCORE_EQUAL:
+               case MATCHCRITERIA_SIZE_GREATER:
+               case MATCHCRITERIA_SIZE_SMALLER:
+               case MATCHCRITERIA_SIZE_EQUAL:
                case MATCHCRITERIA_EXECUTE:
                case MATCHCRITERIA_NOT_EXECUTE:
                        if (matcherprop_match(matcher, info)) {
@@ -783,8 +799,10 @@ gchar * matcherprop_to_string(MatcherProp * matcher)
        case MATCHCRITERIA_SCORE_GREATER:
        case MATCHCRITERIA_SCORE_LOWER:
        case MATCHCRITERIA_SCORE_EQUAL:
+       case MATCHCRITERIA_SIZE_GREATER:
+       case MATCHCRITERIA_SIZE_SMALLER:
+       case MATCHCRITERIA_SIZE_EQUAL:
                return g_strdup_printf("%s %i", criteria_str, matcher->value);
-               break;
        case MATCHCRITERIA_ALL:
        case MATCHCRITERIA_UNREAD:
        case MATCHCRITERIA_NOT_UNREAD:
index 3bedb92..f0ac49f 100644 (file)
@@ -55,6 +55,9 @@ enum {
        MATCHCRITERIA_BODY_PART, MATCHCRITERIA_NOT_BODY_PART,
        MATCHCRITERIA_EXECUTE, MATCHCRITERIA_NOT_EXECUTE,
        MATCHCRITERIA_SCORE_EQUAL,
+       MATCHCRITERIA_SIZE_GREATER, 
+       MATCHCRITERIA_SIZE_SMALLER,
+       MATCHCRITERIA_SIZE_EQUAL,
        /* match type */
        MATCHTYPE_MATCHCASE,
        MATCHTYPE_MATCH,
index 3571326..f747e16 100644 (file)
@@ -58,6 +58,9 @@ static void add_char(char ch)
 "score_greater"        return MATCHER_SCORE_GREATER;
 "score_lower"  return MATCHER_SCORE_LOWER;
 "score_equal"  return MATCHER_SCORE_EQUAL;
+"size_greater"  return MATCHER_SIZE_GREATER;
+"size_smaller"  return MATCHER_SIZE_SMALLER;
+"size_equal"    return MATCHER_SIZE_EQUAL;
 "header"       return MATCHER_HEADER;
 "~header"      return MATCHER_NOT_HEADER;
 "headers_part" return MATCHER_HEADERS_PART;
index 41d1503..0ba0abf 100644 (file)
@@ -163,6 +163,7 @@ int matcher_parserwrap(void)
 %token MATCHER_FORWARD_AS_ATTACHMENT  MATCHER_EOL  MATCHER_STRING  
 %token MATCHER_OR MATCHER_AND  
 %token MATCHER_COLOR MATCHER_SCORE_EQUAL MATCHER_BOUNCE MATCHER_DELETE_ON_SERVER
+%token MATCHER_SIZE_GREATER MATCHER_SIZE_SMALLER MATCHER_SIZE_EQUAL
 
 %start file
 
@@ -601,6 +602,30 @@ MATCHER_ALL
        value = atoi($2);
        prop = matcherprop_new(criteria, NULL, 0, NULL, value);
 }
+| MATCHER_SIZE_GREATER MATCHER_INTEGER 
+{
+       gint criteria = 0;
+       gint value    = 0;
+       criteria = MATCHCRITERIA_SIZE_GREATER;
+       value = atoi($2);
+       prop = matcherprop_new(criteria, NULL, 0, NULL, value);
+}
+| MATCHER_SIZE_SMALLER MATCHER_INTEGER
+{
+       gint criteria = 0;
+       gint value    = 0;
+       criteria = MATCHCRITERIA_SIZE_SMALLER;
+       value = atoi($2);
+       prop = matcherprop_new(criteria, NULL, 0, NULL, value);
+}
+| MATCHER_SIZE_EQUAL MATCHER_INTEGER
+{
+       gint criteria = 0;
+       gint value    = 0;
+       criteria = MATCHCRITERIA_SIZE_EQUAL;
+       value = atoi($2);
+       prop = matcherprop_new(criteria, NULL, 0, NULL, value);
+}
 | MATCHER_HEADER MATCHER_STRING
 {
        header = g_strdup($2);
index 7b41b00..70b8504 100644 (file)
@@ -108,7 +108,11 @@ enum {
        CRITERIA_SCORE_LOWER = 22,
        CRITERIA_SCORE_EQUAL = 23,
 
-       CRITERIA_EXECUTE = 24
+       CRITERIA_EXECUTE = 24,
+
+       CRITERIA_SIZE_GREATER = 25,
+       CRITERIA_SIZE_SMALLER = 26,
+       CRITERIA_SIZE_EQUAL   = 27
 };
 
 enum {
@@ -150,7 +154,10 @@ gchar * criteria_text [] = {
        N_("Replied flag"), N_("Forwarded flag"),
        N_("Score greater than"), N_("Score lower than"),
        N_("Score equal to"),
-       N_("Execute")
+       N_("Execute"),
+       N_("Size greater than"), 
+       N_("Size smaller than"),
+       N_("Size exactly")
 };
 
 static gint get_sel_from_list(GtkList * list)
@@ -771,7 +778,12 @@ static gint prefs_matcher_get_criteria_from_matching(gint matching_id)
        case MATCHCRITERIA_NOT_EXECUTE:
        case MATCHCRITERIA_EXECUTE:
                return CRITERIA_EXECUTE;
-               break;
+       case MATCHCRITERIA_SIZE_GREATER:
+               return CRITERIA_SIZE_GREATER;
+       case MATCHCRITERIA_SIZE_SMALLER:
+               return CRITERIA_SIZE_SMALLER;
+       case MATCHCRITERIA_SIZE_EQUAL:
+               return CRITERIA_SIZE_EQUAL;
        default:
                return -1;
        }
@@ -830,6 +842,12 @@ static gint prefs_matcher_get_matching_from_criteria(gint criteria_id)
                return MATCHCRITERIA_MESSAGE;
        case CRITERIA_EXECUTE:
                return MATCHCRITERIA_EXECUTE;
+       case CRITERIA_SIZE_GREATER:
+               return MATCHCRITERIA_SIZE_GREATER;
+       case CRITERIA_SIZE_SMALLER:
+               return MATCHCRITERIA_SIZE_SMALLER;
+       case CRITERIA_SIZE_EQUAL:
+               return MATCHCRITERIA_SIZE_EQUAL;
        default:
                return -1;
        }
@@ -990,6 +1008,9 @@ static MatcherProp * prefs_matcher_dialog_to_matcher()
        case CRITERIA_SCORE_GREATER:
        case CRITERIA_SCORE_LOWER:
        case CRITERIA_SCORE_EQUAL:
+       case CRITERIA_SIZE_GREATER:
+       case CRITERIA_SIZE_SMALLER:
+       case CRITERIA_SIZE_EQUAL:
                value_str = gtk_entry_get_text(GTK_ENTRY(matcher.value_entry));
 
                if (*value_str == '\0') {
@@ -1198,6 +1219,9 @@ static void prefs_matcher_select(GtkCList *clist, gint row, gint column,
        case MATCHCRITERIA_SCORE_GREATER:
        case MATCHCRITERIA_SCORE_LOWER:
        case MATCHCRITERIA_SCORE_EQUAL:
+       case MATCHCRITERIA_SIZE_GREATER:
+       case MATCHCRITERIA_SIZE_SMALLER:
+       case MATCHCRITERIA_SIZE_EQUAL:
                gtk_entry_set_text(GTK_ENTRY(matcher.value_entry), itos(prop->value));
                break;
 
@@ -1325,6 +1349,9 @@ static void prefs_matcher_criteria_select(GtkList *list,
        case CRITERIA_SCORE_GREATER:
        case CRITERIA_SCORE_LOWER:
        case CRITERIA_SCORE_EQUAL:
+       case CRITERIA_SIZE_GREATER:
+       case CRITERIA_SIZE_SMALLER:
+       case CRITERIA_SIZE_EQUAL:
                gtk_widget_set_sensitive(matcher.header_combo, FALSE);
                gtk_widget_set_sensitive(matcher.header_label, FALSE);
                gtk_widget_set_sensitive(matcher.value_label, TRUE);