diff --git a/public.tar b/public.tar deleted file mode 100644 index 029e0bb..0000000 Binary files a/public.tar and /dev/null differ diff --git a/server/ajax/ajax.go b/server/ajax/ajax.go index 9c44414..daba6bc 100755 --- a/server/ajax/ajax.go +++ b/server/ajax/ajax.go @@ -128,23 +128,29 @@ func (a *Ajax) loopTasks() (time.Time, error) { if task.Loop == 0 && task.Cron == "" { continue } - nextLoopTrigger := task.Completed.Add(task.Loop) - if task.Loop == 0 { - nextLoopTrigger2 := task.Cron.Next(task.Completed) - if nextLoopTrigger2.Before(nextLoopTrigger) { - nextLoopTrigger = nextLoopTrigger2 + var nextTask time.Time + if task.Loop > 0 { + nextTask = task.Completed.Add(task.Loop) + } + if string(task.Cron) != "" { + nextTask2 := task.Cron.Next(task.Completed) + if nextTask2 != (time.Time{}) && (nextTask == (time.Time{}) || nextTask2.Before(nextTask)) { + nextTask = nextTask2 } } - if time.Now().Before(nextLoopTrigger) { - if nextLoopTrigger.Before(nextDue) { - nextDue = nextLoopTrigger + if time.Now().After(nextTask) { + task.Complete = false + task.Completed = time.Time{} + if nextTask == (time.Time{}) { + task.Title += " !!!INVALID CRON/LOOP!!!" + } + if err := a.storageSetTask(list.UUID, task); err != nil { + return nextDue, err + } + } else { + if nextTask.Before(nextDue) { + nextDue = nextTask } - continue - } - task.Complete = false - task.Completed = time.Time{} - if err := a.storageSetTask(list.UUID, task); err != nil { - return nextDue, err } } } diff --git a/server/ajax/form/cron.go b/server/ajax/form/cron.go index 38267ac..a424b3c 100644 --- a/server/ajax/form/cron.go +++ b/server/ajax/form/cron.go @@ -1,6 +1,7 @@ package form import ( + "log" "time" "github.com/robfig/cron/v3" @@ -11,6 +12,7 @@ type Cron string func (c Cron) Next(since time.Time) time.Time { schedule, err := cron.ParseStandard(string(c)) if err != nil { + log.Printf("failed to parse cron %q: %v", string(c), err) return time.Time{} } return schedule.Next(since)