From 2bca997483c3370e632ab9c0ff965aff30d8c791 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Tue, 17 Aug 2021 11:47:10 -0600 Subject: [PATCH] support only looping --- public/mytinytodo_ajax_storage.js | 2 +- server/ajax/storage.go | 11 ++++++++--- server/ajax/task.go | 12 ++++++++++-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/public/mytinytodo_ajax_storage.js b/public/mytinytodo_ajax_storage.js index 36ce0c0..b7e1899 100755 --- a/public/mytinytodo_ajax_storage.js +++ b/public/mytinytodo_ajax_storage.js @@ -46,7 +46,7 @@ }) */ - $.getJSON(this.mtt.mttUrl + 'ajax.php?loadTasks&list=' + params.list + '&compl=' + params.compl + '&sort=' + params.sort + q, callback); + $.getJSON(this.mtt.mttUrl + 'ajax.php?loadTasks&list=' + params.list + '&compl=' + params.compl + '&looping=' + params.looping + '&sort=' + params.sort + q, callback); }, diff --git a/server/ajax/storage.go b/server/ajax/storage.go index 9742f37..2533ebd 100755 --- a/server/ajax/storage.go +++ b/server/ajax/storage.go @@ -62,11 +62,11 @@ func (a *Ajax) storageListTasks(listID string, filters ...func(t *task.Task) boo if err != nil { return nil, err } - includeComplete := true + includeComplete := false for _, f := range filters { t := &task.Task{Complete: true} - if !f(t) { - includeComplete = false + if f(t) { + includeComplete = true } } if includeComplete { @@ -77,11 +77,16 @@ func (a *Ajax) storageListTasks(listID string, filters ...func(t *task.Task) boo results = append(results, completeResults...) } tasks := []*task.Task{} + uuids := map[string]struct{}{} for _, result := range results { taskID := path.Base(result) if taskID == "" { continue } + if _, ok := uuids[taskID]; ok { + continue + } + uuids[taskID] = struct{}{} task, err := a.storageGetTask(taskID) if err != nil { return nil, err diff --git a/server/ajax/task.go b/server/ajax/task.go index 517e033..31e9670 100755 --- a/server/ajax/task.go +++ b/server/ajax/task.go @@ -20,16 +20,24 @@ type taskWithDelta struct { func (a *Ajax) loadTasks(w http.ResponseWriter, r *http.Request) error { listID, _, _ := a.Cur(r) filterComplete := filterComplete(form.Get(r, "compl")) + filterLooping := filterLooping(form.Get(r, "looping")) filterTags := filterTags(form.ToStrArr(form.Get(r, "t"))) filterSubstr := filterSubstr(form.Get(r, "s")) - // TODO filter loop - tasks, err := a.storageListTasks(listID, filterComplete, filterTags, filterSubstr) + tasks, err := a.storageListTasks(listID, filterComplete, filterTags, filterSubstr, filterLooping) if err != nil { return err } return json.NewEncoder(w).Encode(map[string]interface{}{"list": tasks}) } +func filterLooping(looping string) func(t *task.Task) bool { + return func(t *task.Task) bool { + hasLoop := t.Loop > 0 || t.Cron != "" + onlyLooping := looping == "1" + return !onlyLooping || hasLoop + } +} + func filterComplete(compl string) func(t *task.Task) bool { return func(t *task.Task) bool { return compl == "" || !t.Complete || (compl == "1" && t.Complete)