From db077f971714c80f83b9890aba1ca7a0f1ab690d Mon Sep 17 00:00:00 2001 From: Erik Winter Date: Mon, 9 Aug 2021 06:46:13 +0200 Subject: [PATCH] folder and project in list reqs --- internal/process/list.go | 55 ++++++++++++++++++++++++++++++++--- internal/process/list_test.go | 18 ++++++++++++ 2 files changed, 69 insertions(+), 4 deletions(-) diff --git a/internal/process/list.go b/internal/process/list.go index 50abc25..708a894 100644 --- a/internal/process/list.go +++ b/internal/process/list.go @@ -17,10 +17,21 @@ var ( type ListReqs struct { Due task.Date IncludeBefore bool + Folder string + Project string } func (lr ListReqs) Valid() bool { - return !lr.Due.IsZero() + switch { + case lr.Folder != "": + return true + case lr.Project != "": + return true + case !lr.Due.IsZero(): + return true + } + + return false } // List finds all tasks that satisfy the given requirements @@ -45,14 +56,50 @@ func (l *List) Process() (*ListResult, error) { return &ListResult{}, ErrInvalidReqs } - potentialTasks, err := l.local.FindAllInFolder(task.FOLDER_PLANNED) - if err != nil { - return &ListResult{}, fmt.Errorf("%w: %v", ErrListProcess, err) + folders := []string{task.FOLDER_NEW, task.FOLDER_PLANNED, task.FOLDER_UNPLANNED} + if l.reqs.Folder != "" { + folders = []string{l.reqs.Folder} + } + + var potentialTasks []*task.Task + for _, folder := range folders { + folderTasks, err := l.local.FindAllInFolder(folder) + if err != nil { + return &ListResult{}, fmt.Errorf("%w: %v", ErrListProcess, err) + } + for _, ft := range folderTasks { + potentialTasks = append(potentialTasks, ft) + } + } + + if l.reqs.Due.IsZero() && l.reqs.Project == "" { + return &ListResult{ + Tasks: potentialTasks, + }, nil + } + + if l.reqs.Project != "" { + var projectTasks []*task.Task + for _, pt := range potentialTasks { + if pt.Project == l.reqs.Project { + projectTasks = append(projectTasks, pt) + } + } + + potentialTasks = projectTasks + } + + if l.reqs.Due.IsZero() { + return &ListResult{ + Tasks: potentialTasks, + }, nil } dueTasks := []*task.Task{} for _, t := range potentialTasks { switch { + case t.Due.IsZero(): + // skip case t.Due.Equal(l.reqs.Due): dueTasks = append(dueTasks, t) case l.reqs.IncludeBefore && l.reqs.Due.After(t.Due): diff --git a/internal/process/list_test.go b/internal/process/list_test.go index d1e8fac..f28cec6 100644 --- a/internal/process/list_test.go +++ b/internal/process/list_test.go @@ -20,6 +20,7 @@ func TestListProcess(t *testing.T) { Version: 1, Action: "action1", Folder: task.FOLDER_NEW, + Project: "project1", } task2 := &task.Task{ Id: "id2", @@ -27,6 +28,7 @@ func TestListProcess(t *testing.T) { Action: "action2", Due: date1, Folder: task.FOLDER_PLANNED, + Project: "project2", } task3 := &task.Task{ Id: "id3", @@ -34,6 +36,7 @@ func TestListProcess(t *testing.T) { Action: "action3", Due: date2, Folder: task.FOLDER_PLANNED, + Project: "project1", } task4 := &task.Task{ Id: "id4", @@ -41,6 +44,7 @@ func TestListProcess(t *testing.T) { Action: "action4", Due: date3, Folder: task.FOLDER_PLANNED, + Project: "project2", } allTasks := []*task.Task{task1, task2, task3, task4} @@ -73,6 +77,20 @@ func TestListProcess(t *testing.T) { }, exp: []*task.Task{task2, task3}, }, + { + name: "folder", + reqs: process.ListReqs{ + Folder: task.FOLDER_PLANNED, + }, + exp: []*task.Task{task2, task3, task4}, + }, + { + name: "project", + reqs: process.ListReqs{ + Project: "project2", + }, + exp: []*task.Task{task2, task4}, + }, } { t.Run(tc.name, func(t *testing.T) { list := process.NewList(local, tc.reqs)