Add WithoutDue()

This commit is contained in:
Ian Gulliver
2021-09-12 22:40:29 +00:00
parent 8cf639e64a
commit 1c140f8d71
3 changed files with 60 additions and 3 deletions

View File

@@ -20,6 +20,7 @@ type WorkspaceClient struct {
type SearchQuery struct {
SectionsAny []*Section
Completed *bool
Due *bool
DueOn *civil.Date
DueBefore *civil.Date
DueAfter *civil.Date
@@ -215,6 +216,14 @@ func (wc *WorkspaceClient) Search(q *SearchQuery) ([]*Task, error) {
values.Add("completed", fmt.Sprintf("%t", *q.Completed))
}
if q.Due != nil {
if *q.Due {
values.Add("due_on.after", "1970-01-01")
} else {
values.Add("due_on", "null")
}
}
if q.DueOn != nil {
values.Add("due_on", q.DueOn.String())
}

View File

@@ -8,6 +8,7 @@ import "github.com/firestuff/asana-rules/asanaclient"
type queryMutator func(*asanaclient.WorkspaceClient, *asanaclient.SearchQuery) error
type taskActor func(*asanaclient.WorkspaceClient, *asanaclient.Task) error
type taskFilter func(*asanaclient.WorkspaceClient, *asanaclient.Task) (bool, error)
type workspaceClientGetter func(*asanaclient.Client) (*asanaclient.WorkspaceClient, error)
type periodic struct {
@@ -16,6 +17,7 @@ type periodic struct {
workspaceClientGetter workspaceClientGetter
queryMutators []queryMutator
taskFilters []taskFilter
taskActors []taskActor
}
@@ -155,6 +157,15 @@ func (p *periodic) OnlyComplete() *periodic {
return p
}
func (p *periodic) WithoutDue() *periodic {
// We can't mutate the query because due_on=null is buggy in the Asana API
p.taskFilters = append(p.taskFilters, func(wc *asanaclient.WorkspaceClient, t *asanaclient.Task) (bool, error) {
return t.ParsedDueOn == nil, nil
})
return p
}
// Task actors
func (p *periodic) MoveToMyTasksSection(name string) *periodic {
p.taskActors = append(p.taskActors, func(wc *asanaclient.WorkspaceClient, t *asanaclient.Task) error {
@@ -235,7 +246,28 @@ func (p *periodic) exec(c *asanaclient.Client) error {
return err
}
filteredTasks := []*asanaclient.Task{}
for _, task := range tasks {
included := true
for _, filter := range p.taskFilters {
include, err := filter(wc, task)
if err != nil {
return err
}
if !include {
included = false
break
}
}
if included {
filteredTasks = append(filteredTasks, task)
}
}
for _, task := range filteredTasks {
for _, act := range p.taskActors {
err = act(wc, task)
if err != nil {

22
main.go
View File

@@ -5,7 +5,7 @@ import . "github.com/firestuff/asana-rules/asanarules"
func main() {
EverySeconds(30).
InWorkspace("flamingcow.io").
InMyTasksSections("Recently Assigned", "Upcoming", "Later").
InMyTasksSections("Recently Assigned", "Upcoming", "Later", "Someday").
OnlyIncomplete().
DueInDays(0).
PrintTasks().
@@ -13,7 +13,7 @@ func main() {
EverySeconds(30).
InWorkspace("flamingcow.io").
InMyTasksSections("Recently Assigned", "Today", "Later").
InMyTasksSections("Recently Assigned", "Today", "Meetings", "Maybe Today", "Tonight", "Later", "Someday").
OnlyIncomplete().
DueInAtLeastDays(1).
DueInAtMostDays(7).
@@ -22,11 +22,27 @@ func main() {
EverySeconds(30).
InWorkspace("flamingcow.io").
InMyTasksSections("Recently Assigned", "Today", "Upcoming").
InMyTasksSections("Recently Assigned", "Today", "Meetings", "Maybe Today", "Tonight", "Upcoming", "Someday").
OnlyIncomplete().
DueInAtLeastDays(8).
PrintTasks().
MoveToMyTasksSection("Later")
EverySeconds(30).
InWorkspace("flamingcow.io").
InMyTasksSections("Recently Assigned", "Today", "Meetings", "Maybe Today", "Tonight", "Upcoming", "Someday").
OnlyIncomplete().
DueInAtLeastDays(8).
PrintTasks().
MoveToMyTasksSection("Later")
EverySeconds(30).
InWorkspace("flamingcow.io").
InMyTasksSections("Recently Assigned", "Today", "Meetings", "Maybe Today", "Tonight", "Upcoming", "Later").
OnlyIncomplete().
WithoutDue().
PrintTasks().
MoveToMyTasksSection("Someday")
Loop()
}