mirror of
https://salsa.debian.org/dskoll/remind.git
synced 2026-04-16 06:18:47 +02:00
Add trigeventstart() and trigeventduration() functions.
This commit is contained in:
@@ -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;
|
||||
|
||||
28
src/funcs.c
28
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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user