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 { type SearchQuery struct {
SectionsAny []*Section SectionsAny []*Section
Completed *bool Completed *bool
Due *bool
DueOn *civil.Date DueOn *civil.Date
DueBefore *civil.Date DueBefore *civil.Date
DueAfter *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)) 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 { if q.DueOn != nil {
values.Add("due_on", q.DueOn.String()) 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 queryMutator func(*asanaclient.WorkspaceClient, *asanaclient.SearchQuery) error
type taskActor func(*asanaclient.WorkspaceClient, *asanaclient.Task) 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 workspaceClientGetter func(*asanaclient.Client) (*asanaclient.WorkspaceClient, error)
type periodic struct { type periodic struct {
@@ -16,6 +17,7 @@ type periodic struct {
workspaceClientGetter workspaceClientGetter workspaceClientGetter workspaceClientGetter
queryMutators []queryMutator queryMutators []queryMutator
taskFilters []taskFilter
taskActors []taskActor taskActors []taskActor
} }
@@ -155,6 +157,15 @@ func (p *periodic) OnlyComplete() *periodic {
return p 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 // Task actors
func (p *periodic) MoveToMyTasksSection(name string) *periodic { func (p *periodic) MoveToMyTasksSection(name string) *periodic {
p.taskActors = append(p.taskActors, func(wc *asanaclient.WorkspaceClient, t *asanaclient.Task) error { 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 return err
} }
filteredTasks := []*asanaclient.Task{}
for _, task := range tasks { 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 { for _, act := range p.taskActors {
err = act(wc, task) err = act(wc, task)
if err != nil { if err != nil {

22
main.go
View File

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