71 lines
1.3 KiB
Go
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
|
|
}
|