Add WithoutDue()
This commit is contained in:
@@ -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())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
22
main.go
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user