Files
automana/client/task.go
2021-09-23 04:30:50 +00:00

71 lines
1.3 KiB
Go

package client
import "fmt"
import "strings"
import "cloud.google.com/go/civil"
import "golang.org/x/net/html"
type Task struct {
GID string `json:"gid,omitempty"`
Name string `json:"name,omitempty"`
CreatedAt string `json:"created_at,omitempty"`
DueOn string `json:"due_on,omitempty"`
ParsedDueOn *civil.Date `json:"-"`
HTMLNotes string `json:"html_notes,omitempty"`
ParsedHTMLNotes *html.Node `json:"-"`
}
type taskResponse struct {
Data *Task `json:"data"`
}
type tasksResponse struct {
Data []*Task `json:"data"`
}
type taskUpdate struct {
Data *Task `json:"data"`
}
func (wc *WorkspaceClient) UpdateTask(task *Task) error {
path := fmt.Sprintf("tasks/%s", task.GID)
task.GID = ""
update := &taskUpdate{
Data: task,
}
resp := &taskResponse{}
err := wc.client.put(path, update, resp)
if err != nil {
return err
}
return nil
}
func (t *Task) String() string {
return fmt.Sprintf("%s (%s)", t.GID, t.Name)
}
func (t *Task) parse() error {
r := strings.NewReader(t.HTMLNotes)
root, err := html.Parse(r)
if err != nil {
return err
}
t.ParsedHTMLNotes = root
if t.DueOn != "" {
d, err := civil.ParseDate(t.DueOn)
if err != nil {
return err
}
t.ParsedDueOn = &d
}
return nil
}