Sean Buckheister
Natanael Copa
Igor Mammedov
+ Abhay S. Kushwaha
+2012-11-18 [colin] 3.9.0cvs14
+
+ * AUTHORS
+ * src/advsearch.c
+ * src/matcher.c
+ * src/matcher.h
+ * src/matcher_parser_parse.y
+ * src/prefs_matcher.c
+ * src/gtk/authors.h
+ * src/gtk/quicksearch.c
+ Add age_{greater,lower}_hours matcher criteria
+ Initial patch by Abhay S. Kushwaha.
+
2012-11-18 [ticho] 3.9.0cvs13
* src/mbox.c
( cvs diff -u -r 1.61.2.106 -r 1.61.2.107 src/account.c; cvs diff -u -r 1.1.2.13 -r 1.1.2.14 src/addrcustomattr.c; cvs diff -u -r 1.1.2.30 -r 1.1.2.31 src/edittags.c; cvs diff -u -r 1.59.2.93 -r 1.59.2.94 src/prefs_filtering.c; cvs diff -u -r 1.43.2.98 -r 1.43.2.99 src/prefs_matcher.c; cvs diff -u -r 1.1.2.49 -r 1.1.2.50 src/prefs_msg_colors.c; cvs diff -u -r 1.43.2.131 -r 1.43.2.132 src/toolbar.c; cvs diff -u -r 1.1.2.18 -r 1.1.2.19 src/uri_opener.c; cvs diff -u -r 1.1.2.88 -r 1.1.2.89 src/wizard.c; cvs diff -u -r 1.36.2.208 -r 1.36.2.209 src/common/utils.c; cvs diff -u -r 1.4.2.86 -r 1.4.2.87 src/gtk/about.c; ) > 3.9.0cvs11.patchset
( cvs diff -u -r 1.21.2.9 -r 1.21.2.10 po/bg.po; cvs diff -u -r 1.1.2.19 -r 1.1.2.20 po/ca.po; cvs diff -u -r 1.9.2.26 -r 1.9.2.27 po/cs.po; cvs diff -u -r 1.58.2.52 -r 1.58.2.53 po/de.po; cvs diff -u -r 1.12.2.18 -r 1.12.2.19 po/en_GB.po; cvs diff -u -r 1.60.2.66 -r 1.60.2.67 po/es.po; cvs diff -u -r 1.1.2.29 -r 1.1.2.30 po/fi.po; cvs diff -u -r 1.42.2.59 -r 1.42.2.60 po/fr.po; cvs diff -u -r 1.1.2.2 -r 1.1.2.3 po/he.po; cvs diff -u -r 1.5.2.23 -r 1.5.2.24 po/hu.po; cvs diff -u -r 1.1.2.2 -r 1.1.2.3 po/id_ID.po; cvs diff -u -r 1.34.2.30 -r 1.34.2.31 po/it.po; cvs diff -u -r 1.16.2.12 -r 1.16.2.13 po/ja.po; cvs diff -u -r 1.1.2.5 -r 1.1.2.6 po/lt.po; cvs diff -u -r 1.28.2.15 -r 1.28.2.16 po/nl.po; cvs diff -u -r 1.10.2.18 -r 1.10.2.19 po/pl.po; cvs diff -u -r 1.50.2.45 -r 1.50.2.46 po/pt_BR.po; cvs diff -u -r 1.1.2.4 -r 1.1.2.5 po/pt_PT.po; cvs diff -u -r 1.17.2.22 -r 1.17.2.23 po/ru.po; cvs diff -u -r 1.2.2.37 -r 1.2.2.38 po/sk.po; cvs diff -u -r 1.17.2.28 -r 1.17.2.29 po/sr.po; cvs diff -u -r 1.4.2.13 -r 1.4.2.14 po/sv.po; cvs diff -u -r 1.1.2.6 -r 1.1.2.7 po/uk.po; cvs diff -u -r 1.5.2.31 -r 1.5.2.32 po/zh_CN.po; cvs diff -u -r 1.1.2.5 -r 1.1.2.6 po/zh_TW.po; cvs diff -u -r 1.1.4.6 -r 1.1.4.7 po/Makevars; ) > 3.9.0cvs12.patchset
( cvs diff -u -r 1.28.2.55 -r 1.28.2.56 src/mbox.c; ) > 3.9.0cvs13.patchset
+( cvs diff -u -r 1.100.2.86 -r 1.100.2.87 AUTHORS; cvs diff -u -r 1.1.2.9 -r 1.1.2.10 src/advsearch.c; cvs diff -u -r 1.75.2.78 -r 1.75.2.79 src/matcher.c; cvs diff -u -r 1.39.2.23 -r 1.39.2.24 src/matcher.h; cvs diff -u -r 1.25.2.36 -r 1.25.2.37 src/matcher_parser_parse.y; cvs diff -u -r 1.43.2.99 -r 1.43.2.100 src/prefs_matcher.c; cvs diff -u -r 1.1.2.82 -r 1.1.2.83 src/gtk/authors.h; cvs diff -u -r 1.1.2.121 -r 1.1.2.122 src/gtk/quicksearch.c; ) > 3.9.0cvs14.patchset
MICRO_VERSION=0
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=13
+EXTRA_VERSION=14
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
{ "a", "all", 0, FALSE, FALSE },
{ "ag", "age_greater", 1, FALSE, FALSE },
{ "al", "age_lower", 1, FALSE, FALSE },
+ { "agh","age_greater_hours", 1, FALSE, FALSE },
+ { "alh","age_lower_hours", 1, FALSE, FALSE },
{ "b", "body_part", 1, TRUE, TRUE },
{ "B", "message", 1, TRUE, TRUE },
{ "c", "cc", 1, TRUE, TRUE },
"Fabian Keil",
"Martin Kluge",
"IWAMOTO Kouichi",
+"Abhay S. Kushwaha",
"Joshua M. Kwan",
"Jean-Yves Lefort",
"Jérôme Lelong",
"a", N_("all messages"),
"ag #", N_("messages whose age is greater than # days"),
"al #", N_("messages whose age is less than # days"),
+ "agh #", N_("messages whose age is greater than # hours"),
+ "alh #", N_("messages whose age is less than # hours"),
"b S", N_("messages which contain S in the message body"),
"B S", N_("messages which contain S in the whole message"),
"c S", N_("messages carbon-copied to S"),
{MATCHCRITERIA_NOT_TAGGED, "~tagged"},
{MATCHCRITERIA_AGE_GREATER, "age_greater"},
{MATCHCRITERIA_AGE_LOWER, "age_lower"},
+ {MATCHCRITERIA_AGE_GREATER_HOURS, "age_greater_hours"},
+ {MATCHCRITERIA_AGE_LOWER_HOURS, "age_lower_hours"},
{MATCHCRITERIA_NEWSGROUPS, "newsgroups"},
{MATCHCRITERIA_NOT_NEWSGROUPS, "~newsgroups"},
{MATCHCRITERIA_INREPLYTO, "inreplyto"},
MsgInfo *info)
{
time_t t;
+ gint age_mult_hours = 1;
switch(prop->criteria) {
case MATCHCRITERIA_ALL:
case MATCHCRITERIA_NOT_TAGGED:
return info->tags == NULL;
case MATCHCRITERIA_AGE_GREATER:
+ age_mult_hours = 24;
+ /* Fallthrough intended */
+ case MATCHCRITERIA_AGE_GREATER_HOURS:
{
gboolean ret;
gint age;
t = time(NULL);
- age = ((t - info->date_t) / (60 * 60 * 24));
+ age = ((t - info->date_t) / (60 * 60 * age_mult_hours));
ret = (age >= prop->value);
/* debug output */
return ret;
}
case MATCHCRITERIA_AGE_LOWER:
+ age_mult_hours = 24;
+ /* Fallthrough intended */
+ case MATCHCRITERIA_AGE_LOWER_HOURS:
{
gboolean ret;
gint age;
t = time(NULL);
- age = ((t - info->date_t) / (60 * 60 * 24));
+ age = ((t - info->date_t) / (60 * 60 * age_mult_hours));
ret = (age < prop->value);
/* debug output */
case MATCHCRITERIA_NOT_TAGGED:
case MATCHCRITERIA_AGE_GREATER:
case MATCHCRITERIA_AGE_LOWER:
+ case MATCHCRITERIA_AGE_GREATER_HOURS:
+ case MATCHCRITERIA_AGE_LOWER_HOURS:
case MATCHCRITERIA_NEWSGROUPS:
case MATCHCRITERIA_NOT_NEWSGROUPS:
case MATCHCRITERIA_INREPLYTO:
switch (matcher->criteria) {
case MATCHCRITERIA_AGE_GREATER:
case MATCHCRITERIA_AGE_LOWER:
+ case MATCHCRITERIA_AGE_GREATER_HOURS:
+ case MATCHCRITERIA_AGE_LOWER_HOURS:
case MATCHCRITERIA_SCORE_GREATER:
case MATCHCRITERIA_SCORE_LOWER:
case MATCHCRITERIA_SCORE_EQUAL:
MC_(CC), MC_(NOT_CC),
MC_(TO_OR_CC), MC_(NOT_TO_AND_NOT_CC),
MC_(AGE_GREATER), MC_(AGE_LOWER),
+ MC_(AGE_GREATER_HOURS), MC_(AGE_LOWER_HOURS),
MC_(NEWSGROUPS), MC_(NOT_NEWSGROUPS),
MC_(INREPLYTO), MC_(NOT_INREPLYTO),
MC_(REFERENCES), MC_(NOT_REFERENCES),
%token MATCHER_FROM MATCHER_NOT_FROM MATCHER_TO MATCHER_NOT_TO
%token MATCHER_CC MATCHER_NOT_CC MATCHER_TO_OR_CC MATCHER_NOT_TO_AND_NOT_CC
%token MATCHER_AGE_GREATER MATCHER_AGE_LOWER MATCHER_NEWSGROUPS
+%token MATCHER_AGE_GREATER_HOURS MATCHER_AGE_LOWER_HOURS
%token MATCHER_NOT_NEWSGROUPS MATCHER_INREPLYTO MATCHER_NOT_INREPLYTO
%token MATCHER_REFERENCES MATCHER_NOT_REFERENCES MATCHER_SCORE_GREATER
%token MATCHER_SCORE_LOWER MATCHER_HEADER MATCHER_NOT_HEADER
value = strtol($2, NULL, 0);
prop = matcherprop_new(criteria, NULL, 0, NULL, value);
}
+| MATCHER_AGE_GREATER_HOURS MATCHER_INTEGER
+{
+ gint criteria = 0;
+ gint value = 0;
+
+ criteria = MATCHCRITERIA_AGE_GREATER_HOURS;
+ value = strtol($2, NULL, 0);
+ prop = matcherprop_new(criteria, NULL, 0, NULL, value);
+}
+| MATCHER_AGE_LOWER_HOURS MATCHER_INTEGER
+{
+ gint criteria = 0;
+ gint value = 0;
+
+ criteria = MATCHCRITERIA_AGE_LOWER_HOURS;
+ value = strtol($2, NULL, 0);
+ prop = matcherprop_new(criteria, NULL, 0, NULL, value);
+}
| MATCHER_NEWSGROUPS match_type MATCHER_STRING
{
gint criteria = 0;
CRITERIA_TAGGED = 36,
CRITERIA_HAS_ATTACHMENT = 37,
- CRITERIA_SIGNED = 38
+ CRITERIA_SIGNED = 38,
+
+ CRITERIA_AGE_GREATER_HOURS = 39,
+ CRITERIA_AGE_LOWER_HOURS = 40
};
enum {
};
enum {
- AGE_DAYS = 0,
- AGE_WEEKS = 1
+ AGE_HOURS = 0,
+ AGE_DAYS = 1,
+ AGE_WEEKS = 2
};
enum {
matcher.model_age = GTK_TREE_MODEL(store);
store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
+ COMBOBOX_ADD(store, _("hours"), AGE_HOURS);
COMBOBOX_ADD(store, _("days"), AGE_DAYS);
COMBOBOX_ADD(store, _("weeks"), AGE_WEEKS);
matcher.model_age_units = GTK_TREE_MODEL(store);
case MATCHCRITERIA_NOT_HEADER:
case MATCHCRITERIA_HEADER:
return CRITERIA_HEADER;
+ case MATCHCRITERIA_AGE_GREATER_HOURS:
+ return CRITERIA_AGE_GREATER_HOURS;
+ case MATCHCRITERIA_AGE_LOWER_HOURS:
+ return CRITERIA_AGE_LOWER_HOURS;
case MATCHCRITERIA_AGE_GREATER:
return CRITERIA_AGE_GREATER;
case MATCHCRITERIA_AGE_LOWER:
return MATCHCRITERIA_AGE_GREATER;
case CRITERIA_AGE_LOWER:
return MATCHCRITERIA_AGE_LOWER;
+ case CRITERIA_AGE_GREATER_HOURS:
+ return MATCHCRITERIA_AGE_GREATER_HOURS;
+ case CRITERIA_AGE_LOWER_HOURS:
+ return MATCHCRITERIA_AGE_LOWER_HOURS;
case CRITERIA_SCORE_GREATER:
return MATCHCRITERIA_SCORE_GREATER;
case CRITERIA_SCORE_LOWER:
if (value_criteria == -1)
return NULL;
- criteria = prefs_matcher_get_matching_from_criteria(value_criteria);
-
- value_pred = prefs_matcher_get_pred(value_criteria);
- if(value_pred)
- criteria = prefs_matcher_not_criteria(criteria);
-
#ifndef G_OS_WIN32
use_regexp = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(matcher.regexp_checkbtn));
#else
sel = gtk_combo_box_get_active(GTK_COMBO_BOX(matcher.match_combo2));
if(sel == AGE_WEEKS)
value *= 7;
+ else if (sel == AGE_HOURS) {
+ if (value_criteria == CRITERIA_AGE_GREATER)
+ value_criteria = CRITERIA_AGE_GREATER_HOURS;
+ else
+ value_criteria = CRITERIA_AGE_LOWER_HOURS;
+ }
break;
case CRITERIA_SCORE_GREATER:
break;
}
+ criteria = prefs_matcher_get_matching_from_criteria(value_criteria);
+
+ value_pred = prefs_matcher_get_pred(value_criteria);
+ if(value_pred)
+ criteria = prefs_matcher_not_criteria(criteria);
+
matcherprop = matcherprop_new(criteria, header, matchtype,
expr, value);
gtk_spin_button_set_range(GTK_SPIN_BUTTON(
matcher.numeric_entry), 0, 1000);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(matcher.numeric_entry), 0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo2), AGE_DAYS);
gtk_label_set_text(GTK_LABEL(matcher.match_label), _("Age is"));
break;
case MATCH_FLAG:
break;
case CRITERIA_AGE_GREATER:
case CRITERIA_AGE_LOWER:
+ case CRITERIA_AGE_GREATER_HOURS:
+ case CRITERIA_AGE_LOWER_HOURS:
match_criteria = MATCH_AGE;
break;
case CRITERIA_SCORE_GREATER:
}
break;
+ case MATCHCRITERIA_AGE_GREATER_HOURS:
+ case MATCHCRITERIA_AGE_LOWER_HOURS:
+ gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo2),
+ AGE_HOURS);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(
+ matcher.numeric_entry), prop->value);
+ break;
+
case MATCHCRITERIA_SCORE_GREATER:
case MATCHCRITERIA_SCORE_LOWER:
case MATCHCRITERIA_SCORE_EQUAL: