From 94a5d4cb1bc6a8f09995182dc9f07e4156255a8e Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Mon, 21 May 2012 11:42:07 +0200 Subject: Fix default time format for multi-day appointments As of commit 0791eaabca0fb1ef8a8675e47d701bbcde4d4a3f, we use strftime() instead of apoint_sec2str() to format start and end dates of appointments. "%H:%M" is the default strftime() format string used to simulate apoint_sec2str(). However, apoint_sec2str() additionally checks for intersection with the current day and displays "..:.." instead of the actual time if the item doesn't start (end) at the current day. Add an additional check to the new default time format and recreate the old behavior for items starting before or ending after the current day. Fixes BUG#3. Signed-off-by: Lukas Fleischer --- src/utils.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/utils.c b/src/utils.c index 5a38491..ad88117 100644 --- a/src/utils.c +++ b/src/utils.c @@ -1167,7 +1167,7 @@ static enum format_specifier parse_fs(const char **s, char *extformat) } /* Print a formatted date to stdout. */ -static void print_date(long date, const char *extformat) +static void print_date(long date, long day, const char *extformat) { char buf[BUFSIZ]; @@ -1177,10 +1177,14 @@ static void print_date(long date, const char *extformat) time_t t = date; struct tm *lt = localtime((time_t *) & t); - if (extformat[0] == '\0' || !strcmp(extformat, "default")) - strftime(buf, BUFSIZ, "%H:%M", lt); - else + if (extformat[0] == '\0' || !strcmp(extformat, "default")) { + if (date >= day && date <= day + DAYINSEC) + strftime(buf, BUFSIZ, "%H:%M", lt); + else + strftime(buf, BUFSIZ, "..:..", lt); + } else { strftime(buf, BUFSIZ, extformat, lt); + } printf("%s", buf); } @@ -1197,13 +1201,13 @@ void print_apoint(const char *format, long day, struct apoint *apt) p++; switch (parse_fs(&p, extformat)) { case FS_STARTDATE: - print_date(apt->start, extformat); + print_date(apt->start, day, extformat); break; case FS_DURATION: printf("%ld", apt->dur); break; case FS_ENDDATE: - print_date(apt->start + apt->dur, extformat); + print_date(apt->start + apt->dur, day, extformat); break; case FS_MESSAGE: printf("%s", apt->mesg); -- cgit v1.2.3