From a223149aee56a1ae6384ab2a7d08f92dddd5d269 Mon Sep 17 00:00:00 2001 From: Dianne Skoll Date: Tue, 31 Dec 2019 21:09:21 -0500 Subject: [PATCH] Add trigeventstart() and trigeventduration() functions. --- src/dorem.c | 2 ++ src/funcs.c | 28 ++++++++++++++++++++++++++++ src/trigger.c | 34 +++++++++++++++++++++------------- src/types.h | 2 ++ 4 files changed, 53 insertions(+), 13 deletions(-) diff --git a/src/dorem.c b/src/dorem.c index 88fbb50c..647fa5c0 100644 --- a/src/dorem.c +++ b/src/dorem.c @@ -217,6 +217,8 @@ int ParseRem(ParsePtr s, Trigger *trig, TimeTrig *tim, int save_in_globals) trig->warn[0] = 0; trig->omitfunc[0] = 0; trig->duration_days = 0; + trig->eventstart = NO_TIME; + trig->eventduration = NO_TIME; DBufInit(&(trig->tags)); trig->passthru[0] = 0; tim->ttime = NO_TIME; diff --git a/src/funcs.c b/src/funcs.c index aa2e6bd7..31ab6b85 100644 --- a/src/funcs.c +++ b/src/funcs.c @@ -129,6 +129,8 @@ static int FTrigdate (func_info *); static int FTrigdatetime (func_info *); static int FTrigdelta (func_info *); static int FTrigduration (func_info *); +static int FTrigeventduration(func_info *); +static int FTrigeventstart (func_info *); static int FTrigfrom (func_info *); static int FTrigger (func_info *); static int FTrigpriority (func_info *); @@ -276,6 +278,8 @@ BuiltinFunc Func[] = { { "trigdatetime", 0, 0, 0, FTrigdatetime }, { "trigdelta", 0, 0, 0, FTrigdelta }, { "trigduration", 0, 0, 0, FTrigduration }, + { "trigeventduration", 0, 0, 0, FTrigeventduration }, + { "trigeventstart", 0, 0, 0, FTrigeventstart }, { "trigfrom", 0, 0, 0, FTrigfrom }, { "trigger", 1, 3, 0, FTrigger }, { "trigpriority", 0, 0, 0, FTrigpriority }, @@ -1186,6 +1190,30 @@ static int FTrigtimerep(func_info *info) return OK; } +static int FTrigeventduration(func_info *info) +{ + if (LastTrigger.eventduration == NO_TIME) { + RetVal.type = INT_TYPE; + RETVAL = -1; + } else { + RetVal.type = TIME_TYPE; + RETVAL = LastTrigger.eventduration; + } + return OK; +} + +static int FTrigeventstart(func_info *info) +{ + if (LastTrigger.eventstart == NO_TIME) { + RetVal.type = INT_TYPE; + RETVAL = -1; + } else { + RetVal.type = DATETIME_TYPE; + RETVAL = LastTrigger.eventstart; + } + return OK; +} + static int FTrigduration(func_info *info) { if (LastTimeTrig.duration == NO_TIME) { diff --git a/src/trigger.c b/src/trigger.c index 0e79a8a0..eec5d03a 100644 --- a/src/trigger.c +++ b/src/trigger.c @@ -412,9 +412,18 @@ int AdjustTriggerForDuration(int today, int r, Trigger *trig, TimeTrig *tim, int save_in_globals) { int y, m, d; + /* If we have an AT, save the original event start */ + if (tim->ttime != NO_TIME) { + trig->eventstart = MINUTES_PER_DAY * r + tim->ttime; + if (tim->duration != NO_TIME) { + trig->eventduration = tim->duration; + } + } + + /* Now potentially adjust */ if (r < today && r + trig->duration_days >= today) { /* Adjust duration down */ - tim->duration -= (today - r) * 1440; + tim->duration -= (today - r) * MINUTES_PER_DAY; tim->duration += tim->ttime; /* Start at midnight */ @@ -443,14 +452,15 @@ AdjustTriggerForDuration(int today, int r, Trigger *trig, TimeTrig *tim, int sav fprintf(ErrFp, "\n"); } - if (save_in_globals) { - LastTriggerTime = tim->ttime; - SaveLastTimeTrig(tim); - LastTriggerDate = r; - LastTrigValid = 1; - } - } - return r; + } + if (save_in_globals) { + LastTriggerTime = tim->ttime; + SaveLastTimeTrig(tim); + SaveLastTrigger(trig); + LastTriggerDate = r; + LastTrigValid = 1; + } + return r; } /***************************************************************/ @@ -468,9 +478,7 @@ int ComputeTrigger(int today, Trigger *trig, TimeTrig *tim, if (*err != OK) { return r; } - if (r < today && r + trig->duration_days >= today) { - r = AdjustTriggerForDuration(today, r, trig, tim, save_in_globals); - } + r = AdjustTriggerForDuration(today, r, trig, tim, save_in_globals); return r; } @@ -647,7 +655,7 @@ ComputeScanStart(int today, Trigger *trig, TimeTrig *tt) minutes = tt->ttime + tt->duration; /* Figure out how many days to scan backwards from */ - days = minutes / 1440; + days = minutes / MINUTES_PER_DAY; if (trig->scanfrom != NO_DATE) { if (trig->scanfrom <= today - days) { diff --git a/src/types.h b/src/types.h index b392c0d1..76a0af7c 100644 --- a/src/types.h +++ b/src/types.h @@ -71,6 +71,8 @@ typedef struct { int from; int priority; int duration_days; /* Duration converted to days to search */ + int eventstart; /* Original event start (datetime) */ + int eventduration; /* Original event duration (minutes) */ char sched[VAR_NAME_LEN+1]; /* Scheduling function */ char warn[VAR_NAME_LEN+1]; /* Warning function */ char omitfunc[VAR_NAME_LEN+1]; /* OMITFUNC function */