{MATCHING_NOT_NEWSGROUPS, "~newsgroups"},
{MATCHING_INREPLYTO, "inreplyto"},
{MATCHING_NOT_INREPLYTO, "~inreplyto"},
+ {MATCHING_REFERENCES, "references"},
+ {MATCHING_NOT_REFERENCES, "~references"},
+ {MATCHING_SCORE_GREATER, "score_greater"},
+ {MATCHING_SCORE_LOWER, "score_lower"},
/* content have to be read */
{MATCHING_HEADER, "header"},
MatcherProp * prop;
gchar * tmp;
gint key;
- gint age;
+ gint value;
gchar * expr;
gint match;
gchar * header = NULL;
switch (key) {
case MATCHING_AGE_LOWER:
case MATCHING_AGE_GREATER:
- age = matcher_parse_number(&tmp);
+ case MATCHING_SCORE_LOWER:
+ case MATCHING_SCORE_GREATER:
+ value = matcher_parse_number(&tmp);
if (tmp == NULL) {
* str = NULL;
return NULL;
}
*str = tmp;
- prop = matcherprop_new(key, NULL, 0, NULL, age);
+ prop = matcherprop_new(key, NULL, 0, NULL, value);
return prop;
case MATCHING_NEWSGROUPS:
case MATCHING_NOT_NEWSGROUPS:
case MATCHING_INREPLYTO:
+ case MATCHING_NOT_REFERENCES:
+ case MATCHING_REFERENCES:
case MATCHING_NOT_INREPLYTO:
case MATCHING_MESSAGE:
case MATCHING_NOT_MESSAGE:
match = -1;
for(i = 0 ; i < (int) (sizeof(matchparser_tab) / sizeof(MatchParser)) ;
i++) {
- if (strncasecmp(matchparser_tab[i].str, start,
- p - start) == 0) {
- match = i;
- break;
- }
+ if ((strlen(matchparser_tab[i].str) == p - start) &&
+ (strncasecmp(matchparser_tab[i].str, start,
+ p - start) == 0)) {
+ match = i;
+ break;
+ }
}
if (match == -1) {
MatcherProp * matcherprop_new(gint criteria, gchar * header,
gint matchtype, gchar * expr,
- int age)
+ int value)
{
MatcherProp * prop;
prop->expr = NULL;
prop->matchtype = matchtype;
prop->preg = NULL;
- prop->age = age;
+ prop->value = value;
prop->error = 0;
return prop;
|| matcherprop_string_match(prop, info->cc));
case MATCHING_AGE_GREATER:
t = time(NULL);
- return ((t - info->date_t) / (60 * 60 * 24)) >= prop->age;
+ return ((t - info->date_t) / (60 * 60 * 24)) >= prop->value;
case MATCHING_AGE_LOWER:
t = time(NULL);
- return ((t - info->date_t) / (60 * 60 * 24)) <= prop->age;
+ return ((t - info->date_t) / (60 * 60 * 24)) <= prop->value;
+ case MATCHING_SCORE_GREATER:
+ return info->score >= prop->value;
+ case MATCHING_SCORE_LOWER:
+ return info->score <= prop->value;
case MATCHING_NEWSGROUPS:
return matcherprop_string_match(prop, info->newsgroups);
case MATCHING_NOT_NEWSGROUPS:
return matcherprop_string_match(prop, info->inreplyto);
case MATCHING_NOT_INREPLYTO:
return !matcherprop_string_match(prop, info->inreplyto);
+ case MATCHING_REFERENCES:
+ return matcherprop_string_match(prop, info->references);
+ case MATCHING_NOT_REFERENCES:
+ return !matcherprop_string_match(prop, info->references);
case MATCHING_HEADER:
default:
return 0;
if (matcher->expr)
printf("expr : %s\n", matcher->expr);
- printf("age: %i\n", matcher->age);
+ printf("age: %i\n", matcher->value;
printf("compiled : %s\n", matcher->preg != NULL ? "yes" : "no");
printf("error: %i\n", matcher->error);
switch(matcher->criteria) {
case MATCHING_AGE_GREATER:
case MATCHING_AGE_LOWER:
- return g_strdup_printf("%s %i", criteria_str, matcher->age);
+ case MATCHING_SCORE_GREATER:
+ case MATCHING_SCORE_LOWER:
+ return g_strdup_printf("%s %i", criteria_str, matcher->value);
break;
case MATCHING_ALL:
case MATCHING_UNREAD: