2012-11-18 [colin] 3.9.0cvs14
authorColin Leroy <colin@colino.net>
Sun, 18 Nov 2012 19:50:36 +0000 (19:50 +0000)
committerColin Leroy <colin@colino.net>
Sun, 18 Nov 2012 19:50:36 +0000 (19:50 +0000)
* 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.

AUTHORS
ChangeLog
PATCHSETS
configure.ac
src/advsearch.c
src/gtk/authors.h
src/gtk/quicksearch.c
src/matcher.c
src/matcher.h
src/matcher_parser_parse.y
src/prefs_matcher.c

diff --git a/AUTHORS b/AUTHORS
index fb968b3..64264b6 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -292,3 +292,4 @@ contributors (in addition to the above; based on Changelog)
        Sean Buckheister
        Natanael Copa
        Igor Mammedov
+       Abhay S. Kushwaha
index 6edf03b..2eed02f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+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
index 44ba7e4..126625f 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( 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
index 3155bba..d6a52cf 100644 (file)
@@ -12,7 +12,7 @@ MINOR_VERSION=9
 MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=13
+EXTRA_VERSION=14
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index ed806e2..26a4e34 100644 (file)
@@ -150,6 +150,8 @@ gchar *advsearch_expand_search_string(const gchar *search_string)
                { "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  },
index 46753ff..85ddf34 100644 (file)
@@ -164,6 +164,7 @@ static char *CONTRIBS_LIST[] = {
 "Fabian Keil",
 "Martin Kluge",
 "IWAMOTO Kouichi",
+"Abhay S. Kushwaha",
 "Joshua M. Kwan",
 "Jean-Yves Lefort",
 "Jérôme Lelong",
index bf6960c..82a5541 100644 (file)
@@ -433,6 +433,8 @@ static gchar *search_descr_strings[] = {
        "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"),
index c76d4dd..cd1a159 100644 (file)
@@ -110,6 +110,8 @@ static const MatchParser matchparser_tab[] = {
        {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"},
@@ -757,6 +759,7 @@ static gboolean matcherprop_match(MatcherProp *prop,
                                  MsgInfo *info)
 {
        time_t t;
+       gint age_mult_hours = 1;
 
        switch(prop->criteria) {
        case MATCHCRITERIA_ALL:
@@ -880,12 +883,15 @@ static gboolean matcherprop_match(MatcherProp *prop,
        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 */
@@ -904,12 +910,15 @@ static gboolean matcherprop_match(MatcherProp *prop,
                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 */
@@ -1748,6 +1757,8 @@ gboolean matcherlist_match(MatcherList *matchers, MsgInfo *info)
                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:
@@ -1895,6 +1906,8 @@ gchar *matcherprop_to_string(MatcherProp *matcher)
        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:
index c2debf6..56b0d96 100644 (file)
@@ -87,6 +87,7 @@ enum {
        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),
index e3f4140..2947544 100644 (file)
@@ -319,6 +319,7 @@ int matcher_parserwrap(void)
 %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
@@ -953,6 +954,24 @@ MATCHER_ALL
        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;
index e0cb02d..4e5155f 100644 (file)
@@ -183,7 +183,10 @@ enum {
        CRITERIA_TAGGED = 36,
 
        CRITERIA_HAS_ATTACHMENT = 37,
-       CRITERIA_SIGNED = 38
+       CRITERIA_SIGNED = 38,
+
+       CRITERIA_AGE_GREATER_HOURS = 39,
+       CRITERIA_AGE_LOWER_HOURS = 40
 };
 
 enum {
@@ -203,8 +206,9 @@ enum {
 };
 
 enum {
-       AGE_DAYS  = 0,
-       AGE_WEEKS = 1
+       AGE_HOURS = 0,
+       AGE_DAYS  = 1,
+       AGE_WEEKS = 2
 };
 
 enum {
@@ -326,6 +330,7 @@ static void prefs_matcher_models_create(void)
        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);
@@ -1136,6 +1141,10 @@ static gint prefs_matcher_get_criteria_from_matching(gint matching_id)
        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:
@@ -1230,6 +1239,10 @@ static gint prefs_matcher_get_matching_from_criteria(gint criteria_id)
                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:
@@ -1439,12 +1452,6 @@ static MatcherProp *prefs_matcher_dialog_to_matcher(void)
        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
@@ -1523,6 +1530,12 @@ static MatcherProp *prefs_matcher_dialog_to_matcher(void)
                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:
@@ -1603,6 +1616,12 @@ static MatcherProp *prefs_matcher_dialog_to_matcher(void)
                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);
 
@@ -1935,6 +1954,7 @@ static void prefs_matcher_criteria_select(GtkWidget *widget,
                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:
@@ -2261,6 +2281,8 @@ static void prefs_matcher_set_criteria(const gint criteria)
                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:
@@ -2497,6 +2519,14 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector,
                }
                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: