diff --git a/src/dorem.c b/src/dorem.c index f361909d..545658d2 100644 --- a/src/dorem.c +++ b/src/dorem.c @@ -1102,10 +1102,16 @@ int DoSatRemind(Trigger *trig, TimeTrig *tt, ParsePtr p) iter = 0; start = trig->scanfrom; while (iter++ < MaxSatIter) { - jul = ComputeTriggerNoAdjustDuration(start, trig, tt, &r, 1); + jul = ComputeTriggerNoAdjustDuration(start, trig, tt, &r, 1, 0); if (r) { if (r == E_CANT_TRIG) return OK; else return r; } + if (jul != start && trig->duration_days) { + jul = ComputeTriggerNoAdjustDuration(start, trig, tt, &r, 1, trig->duration_days); + if (r) { + if (r == E_CANT_TRIG) return OK; else return r; + } + } if (jul == -1) { return E_EXPIRED; } diff --git a/src/protos.h b/src/protos.h index 1c068874..f75a67da 100644 --- a/src/protos.h +++ b/src/protos.h @@ -89,7 +89,7 @@ char const *FindInitialToken (Token *tok, char const *s); void FindToken (char const *s, Token *tok); void FindNumericToken (char const *s, Token *t); int ComputeTrigger (int today, Trigger *trig, TimeTrig *tim, int *err, int save_in_globals); -int ComputeTriggerNoAdjustDuration (int today, Trigger *trig, TimeTrig *tim, int *err, int save_in_globals); +int ComputeTriggerNoAdjustDuration (int today, Trigger *trig, TimeTrig *tim, int *err, int save_in_globals, int duration_days); int AdjustTriggerForDuration(int today, int r, Trigger *trig, TimeTrig *tim, int save_in_globals); int ComputeScanStart(int today, Trigger *trig, TimeTrig *tt); char *StrnCpy (char *dest, char const *source, int n); diff --git a/src/trigger.c b/src/trigger.c index 98181f19..8ff311fc 100644 --- a/src/trigger.c +++ b/src/trigger.c @@ -474,10 +474,20 @@ AdjustTriggerForDuration(int today, int r, Trigger *trig, TimeTrig *tim, int sav int ComputeTrigger(int today, Trigger *trig, TimeTrig *tim, int *err, int save_in_globals) { - int r = ComputeTriggerNoAdjustDuration(today, trig, tim, err, save_in_globals); + int r = ComputeTriggerNoAdjustDuration(today, trig, tim, err, save_in_globals, 0); if (*err != OK) { return r; } + if (r == today) { + return r; + } + + if (trig->duration_days) { + r = ComputeTriggerNoAdjustDuration(today, trig, tim, err, save_in_globals, trig->duration_days); + if (*err != OK) { + return r; + } + } r = AdjustTriggerForDuration(today, r, trig, tim, save_in_globals); return r; } @@ -491,10 +501,10 @@ int ComputeTrigger(int today, Trigger *trig, TimeTrig *tim, /* */ /***************************************************************/ int ComputeTriggerNoAdjustDuration(int today, Trigger *trig, TimeTrig *tim, - int *err, int save_in_globals) + int *err, int save_in_globals, int duration_days) { int nattempts = 0, - start = today - trig->duration_days, + start = today - duration_days, nextstart = 0, y, m, d, omit, result; @@ -561,7 +571,7 @@ int ComputeTriggerNoAdjustDuration(int today, Trigger *trig, TimeTrig *tim, } /** FIXME: Fix bad interaction with SATISFY... need to rethink!!! */ - if (result+trig->duration_days >= today && + if (result+duration_days >= today && (trig->skip != SKIP_SKIP || !omit)) { if (save_in_globals) { LastTriggerDate = result; /* Save in global var */ diff --git a/tests/test.cmp b/tests/test.cmp index 63be08af..495ccd97 100644 --- a/tests/test.cmp +++ b/tests/test.cmp @@ -1156,6 +1156,7 @@ set a129 23:30 + '2019-02-02@16:44' # Multi-day reminder REM 13 AT 16:00 DURATION 72:00 MSG 72-hour event +../tests/test.rem(371): Trig = Wednesday, 13 March, 1991 AT 16:00 DURATION 72:00 ../tests/test.rem(371): Trig = Wednesday, 13 February, 1991 AT 16:00 DURATION 72:00 ../tests/test.rem(371): Trig(adj) = Saturday, 16 February, 1991 AT 00:00 DURATION 16:00 72-hour event @@ -1364,15 +1365,18 @@ $Tw => 4 ../tests/test.rem(391): Trig(satisfied) = Thursday, 14 March, 1991 AT 16:00 DURATION 08:00 REM 14 AT 16:00 DURATION 8:01 SATISFY [$Tw == 4] MSG Thursday, the 14th ../tests/test.rem(392): Trig = Thursday, 14 March, 1991 AT 16:00 DURATION 08:01 +../tests/test.rem(392): Trig = Thursday, 14 March, 1991 AT 16:00 DURATION 08:01 $Tw => 4 4 == 4 => 1 ../tests/test.rem(392): Trig(satisfied) = Thursday, 14 March, 1991 AT 16:00 DURATION 08:01 REM 14 AT 16:00 DURATION 32:00 SATISFY [$Tw == 4] MSG Thursday, the 14th ../tests/test.rem(393): Trig = Thursday, 14 March, 1991 AT 16:00 DURATION 32:00 +../tests/test.rem(393): Trig = Thursday, 14 March, 1991 AT 16:00 DURATION 32:00 $Tw => 4 4 == 4 => 1 ../tests/test.rem(393): Trig(satisfied) = Thursday, 14 March, 1991 AT 16:00 DURATION 32:00 REM 14 AT 16:00 DURATION 32:01 SATISFY [$Tw == 4] MSG Thursday, the 14th +../tests/test.rem(394): Trig = Thursday, 14 March, 1991 AT 16:00 DURATION 32:01 ../tests/test.rem(394): Trig = Thursday, 14 February, 1991 AT 16:00 DURATION 32:01 $Tw => 4 4 == 4 => 1 @@ -1381,6 +1385,7 @@ $Tw => 4 Thursday, the 14th REM 14 AT 16:00 DURATION 40:00 SATISFY [$Tw == 4] MSG Thursday, the 14th +../tests/test.rem(395): Trig = Thursday, 14 March, 1991 AT 16:00 DURATION 40:00 ../tests/test.rem(395): Trig = Thursday, 14 February, 1991 AT 16:00 DURATION 40:00 $Tw => 4 4 == 4 => 1