+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
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
{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"},
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:
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)) {
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:
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,
"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;
%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
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);
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 {
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)
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;
}
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;
}
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') {
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;
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);