every -loop duration, look for completed tasks with loop set and incomplete them
This commit is contained in:
@@ -3,8 +3,11 @@ package ajax
|
||||
import (
|
||||
"local/storage"
|
||||
"local/todo-server/config"
|
||||
"local/todo-server/server/ajax/task"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Ajax struct {
|
||||
@@ -82,3 +85,39 @@ func has(params url.Values, k string) bool {
|
||||
_, ok := params[k]
|
||||
return ok
|
||||
}
|
||||
|
||||
func (a *Ajax) Async() {
|
||||
c := time.NewTicker(config.Loop)
|
||||
for range c.C {
|
||||
log.Println("loop tasks")
|
||||
if err := a.loopTasks(); err != nil {
|
||||
log.Println("failed to loop tasks", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (a *Ajax) loopTasks() error {
|
||||
lists, err := a.storageListLists()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, list := range lists {
|
||||
tasks, err := a.storageListTasks(list.UUID, func(t *task.Task) bool {
|
||||
return t.Complete
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, task := range tasks {
|
||||
if !task.Complete || task.Loop == 0 || time.Since(task.Completed) < task.Loop {
|
||||
continue
|
||||
}
|
||||
task.Complete = false
|
||||
task.Completed = time.Time{}
|
||||
if err := a.storageSetTask(list.UUID, task); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user