X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=lib%2Fparse-time-vrp.cc;h=45db959718e30c5f9178ef02cb050864bef4cb1e;hp=03804cf50fa83e77a816ac040ca15992c1fb5db8;hb=1b29822cf55eb53e1d45a71c2a3e4a2c2a4574d1;hpb=23b8ed610a13802f0afa5fa70bc8faa04cf48a7f diff --git a/lib/parse-time-vrp.cc b/lib/parse-time-vrp.cc index 03804cf5..45db9597 100644 --- a/lib/parse-time-vrp.cc +++ b/lib/parse-time-vrp.cc @@ -15,7 +15,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see http://www.gnu.org/licenses/ . + * along with this program. If not, see https://www.gnu.org/licenses/ . * * Author: Jani Nikula */ @@ -45,14 +45,14 @@ ParseTimeValueRangeProcessor::operator() (std::string &begin, std::string &end) if (time (&now) == (time_t) -1) return Xapian::BAD_VALUENO; - if (!begin.empty ()) { + if (! begin.empty ()) { if (parse_time_string (begin.c_str (), &t, &now, PARSE_TIME_ROUND_DOWN)) return Xapian::BAD_VALUENO; begin.assign (Xapian::sortable_serialise ((double) t)); } - if (!end.empty ()) { + if (! end.empty ()) { if (end == "!" && ! b.empty ()) end = b; @@ -64,3 +64,26 @@ ParseTimeValueRangeProcessor::operator() (std::string &begin, std::string &end) return valno; } + +#if HAVE_XAPIAN_FIELD_PROCESSOR +/* XXX TODO: is throwing an exception the right thing to do here? */ +Xapian::Query +DateFieldProcessor::operator() (const std::string & str) +{ + time_t from, to, now; + + /* Use the same 'now' for begin and end. */ + if (time (&now) == (time_t) -1) + throw Xapian::QueryParserError ("Unable to get current time"); + + if (parse_time_string (str.c_str (), &from, &now, PARSE_TIME_ROUND_DOWN)) + throw Xapian::QueryParserError ("Didn't understand date specification '" + str + "'"); + + if (parse_time_string (str.c_str (), &to, &now, PARSE_TIME_ROUND_UP_INCLUSIVE)) + throw Xapian::QueryParserError ("Didn't understand date specification '" + str + "'"); + + return Xapian::Query (Xapian::Query::OP_AND, + Xapian::Query (Xapian::Query::OP_VALUE_GE, 0, Xapian::sortable_serialise ((double) from)), + Xapian::Query (Xapian::Query::OP_VALUE_LE, 0, Xapian::sortable_serialise ((double) to))); +} +#endif