diff options
author | Lars Henriksen <LarsHenriksen@get2net.dk> | 2020-05-23 21:12:44 +0200 |
---|---|---|
committer | Lukas Fleischer <lfleischer@calcurse.org> | 2020-05-24 08:52:08 -0400 |
commit | 92dc069fc4f80c0c2afd542beb012695ad702581 (patch) | |
tree | 9e833e06197c13ed9408aef507bfe17dc22e51dd | |
parent | 61a743c56acb6854a70094533c6138275d7333b5 (diff) | |
download | calcurse-92dc069fc4f80c0c2afd542beb012695ad702581.tar.gz calcurse-92dc069fc4f80c0c2afd542beb012695ad702581.zip |
Include start day in error message for recurrence rule
Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
-rw-r--r-- | src/calcurse.h | 1 | ||||
-rw-r--r-- | src/recur.c | 12 | ||||
-rw-r--r-- | src/ui-day.c | 19 | ||||
-rw-r--r-- | src/utils.c | 16 |
4 files changed, 36 insertions, 12 deletions
diff --git a/src/calcurse.h b/src/calcurse.h index 0c959a9..25c63a0 100644 --- a/src/calcurse.h +++ b/src/calcurse.h @@ -1269,6 +1269,7 @@ long overflow_mul(long, long, long *); time_t next_wday(time_t, int); int wday_per_year(int, int); int wday_per_month(int, int, int); +char *day_ins(char **, time_t); /* vars.c */ extern int col, row; diff --git a/src/recur.c b/src/recur.c index 510fddb..d028d09 100644 --- a/src/recur.c +++ b/src/recur.c @@ -518,8 +518,10 @@ char *recur_apoint_scan(FILE *f, struct tm start, struct tm end, /* Does it occur on the start day? */ if (!recur_item_find_occurrence(tstart, tend - tstart, rpt, NULL, update_time_in_date(tstart, 0, 0), - NULL)) - return _("recurrence error: not on start day"); + NULL)) { + char *fmt = _("recurrence error: not on start day (%s)"); + return day_ins(&fmt, tstart); + } /* Filter item. */ if (filter) { @@ -589,8 +591,10 @@ char *recur_event_scan(FILE * f, struct tm start, int id, /* Does it occur on the start day? */ if (!recur_item_find_occurrence(tstart, -1, rpt, NULL, update_time_in_date(tstart, 0, 0), - NULL)) - return _("recurrence error: not on start day"); + NULL)) { + char *fmt = _("recurrence error: not on start day (%s)"); + return day_ins(&fmt, tstart); + } /* Filter item. */ if (filter) { diff --git a/src/ui-day.c b/src/ui-day.c index 5a8d960..bd83cac 100644 --- a/src/ui-day.c +++ b/src/ui-day.c @@ -175,8 +175,8 @@ static void update_start_time(time_t *start, long *dur, struct rpt *rpt, int mov time_t newtime; const char *msg_wrong_time = _("Invalid time: start time must come before end time!"); - const char *msg_match = - _("Repetition must begin on start day."); + char *msg_match = + _("Repetition must begin on start day (%s)."); const char *msg_enter = _("Press [Enter] to continue"); char *msg; @@ -188,7 +188,9 @@ static void update_start_time(time_t *start, long *dur, struct rpt *rpt, int mov newtime, *dur, rpt, NULL, update_time_in_date(newtime, 0, 0), NULL)) { - msg = (char *)msg_match; + msg = day_ins(&msg_match, newtime); + status_mesg(msg, msg_enter); + mem_free(msg); } else { if (move) { *start = newtime; @@ -200,9 +202,8 @@ static void update_start_time(time_t *start, long *dur, struct rpt *rpt, int mov break; } } - msg = (char *)msg_wrong_time; + status_mesg(msg_wrong_time, msg_enter); } - status_mesg(msg, msg_enter); keys_wgetch(win[KEY].p); } return; @@ -858,12 +859,14 @@ static int update_rept(time_t start, long dur, struct rpt **rpt, llist_t *exc, * RFC5545 and ensures that the recurrence set is non-empty (unless it * is an exception day). */ - const char *msg_match = - _("Repetition must begin on start day; any change discarded."); + char *msg_match = + _("Repetition must begin on start day (%s); any change discarded."); if (!recur_item_find_occurrence(start, dur, &nrpt, NULL, update_time_in_date(start, 0, 0), NULL)) { - status_mesg(msg_match, msg_cont); + mem_free(outstr); + outstr = day_ins(&msg_match, start); + status_mesg(outstr, msg_cont); keys_wgetch(win[KEY].p); goto cleanup; } diff --git a/src/utils.c b/src/utils.c index 5322db1..8c539c3 100644 --- a/src/utils.c +++ b/src/utils.c @@ -2067,3 +2067,19 @@ int wday_per_month(int month, int year, int weekday) return last_wday / 7 + (last_wday % 7 > 0); } + +/* + * Return allocated string with day of 't' inserted in 'template' in the user's + * preferred format; template must be a "printf" template with exactly one + * string conversion (%s). + */ +char *day_ins(char **template, time_t t) +{ + char *day, *msg; + + day = date_sec2date_str(update_time_in_date(t, 0 , 0), + DATEFMT(conf.input_datefmt)); + asprintf(&msg, *template, day); + mem_free(day); + return msg; +} |