From 41b3ab7d17866ba01a378d88a970c494c7600c48 Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <lfleischer@calcurse.org>
Date: Wed, 20 May 2015 13:28:23 +0200
Subject: Add support for --filter-end-* to events

A natural convention is to specify the end time of an event as 23:59:59
on the day it is scheduled.

Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
---
 src/event.c | 7 ++++++-
 src/recur.c | 7 ++++++-
 2 files changed, 12 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/event.c b/src/event.c
index e8694ed..3918ce3 100644
--- a/src/event.c
+++ b/src/event.c
@@ -124,7 +124,7 @@ struct event *event_scan(FILE * f, struct tm start, int id, char *note,
 			 struct item_filter *filter)
 {
 	char buf[BUFSIZ], *nl;
-	time_t tstart;
+	time_t tstart, tend;
 
 	EXIT_IF(!check_date(start.tm_year, start.tm_mon, start.tm_mday) ||
 		!check_time(start.tm_hour, start.tm_min),
@@ -147,6 +147,7 @@ struct event *event_scan(FILE * f, struct tm start, int id, char *note,
 
 	tstart = mktime(&start);
 	EXIT_IF(tstart == -1, _("date error in the event\n"));
+	tend = tstart + DAYINSEC - 1;
 
 	/* Filter item. */
 	if (filter) {
@@ -158,6 +159,10 @@ struct event *event_scan(FILE * f, struct tm start, int id, char *note,
 			return NULL;
 		if (filter->start_to >= 0 && tstart > filter->start_to)
 			return NULL;
+		if (filter->end_from >= 0 && tend < filter->end_from)
+			return NULL;
+		if (filter->end_to >= 0 && tend > filter->end_to)
+			return NULL;
 	}
 
 	return event_new(buf, note, tstart, id);
diff --git a/src/recur.c b/src/recur.c
index 667ecdf..2fa2d03 100644
--- a/src/recur.c
+++ b/src/recur.c
@@ -403,7 +403,7 @@ struct recur_event *recur_event_scan(FILE * f, struct tm start, int id,
 				     struct item_filter *filter)
 {
 	char buf[BUFSIZ], *nl;
-	time_t tstart, tuntil;
+	time_t tstart, tend, tuntil;
 
 	EXIT_IF(!check_date(start.tm_year, start.tm_mon, start.tm_mday) ||
 		!check_time(start.tm_hour, start.tm_min) ||
@@ -434,6 +434,7 @@ struct recur_event *recur_event_scan(FILE * f, struct tm start, int id,
 	}
 	tstart = mktime(&start);
 	EXIT_IF(tstart == -1 || tuntil == -1, _("date error in event"));
+	tend = tstart + DAYINSEC - 1;
 
 	/* Filter item. */
 	if (filter) {
@@ -445,6 +446,10 @@ struct recur_event *recur_event_scan(FILE * f, struct tm start, int id,
 			return NULL;
 		if (filter->start_to >= 0 && tstart > filter->start_to)
 			return NULL;
+		if (filter->end_from >= 0 && tend < filter->end_from)
+			return NULL;
+		if (filter->end_to >= 0 && tend > filter->end_to)
+			return NULL;
 	}
 
 	return recur_event_new(buf, note, tstart, id, recur_char2def(type),
-- 
cgit v1.2.3-70-g09d2