-
Notifications
You must be signed in to change notification settings - Fork 0
/
tasks.go
64 lines (58 loc) · 1.47 KB
/
tasks.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package main
import (
"context"
"sync"
"golang.org/x/oauth2"
"google.golang.org/api/option"
"google.golang.org/api/tasks/v1"
)
type TasksService struct {
inner *tasks.Service
}
var TaskListNameIdStore sync.Map
func NewTasksService(token *oauth2.Token) (*TasksService, error) {
client := AuthConfig.Client(context.Background(), token)
s, err := tasks.NewService(context.Background(), option.WithHTTPClient(client))
if err != nil {
return nil, err
}
return &TasksService{inner: s}, nil
}
func (s *TasksService) InsertTask(taskListName, title, notes, duo string) error {
targetId_i, found := TaskListNameIdStore.Load(taskListName)
if found {
targetId := targetId_i.(string)
newTask := tasks.Task{Title: title, Notes: notes, Due: duo}
_, err := s.inner.Tasks.Insert(targetId, &newTask).Do()
if err != nil {
return err
}
return nil
}
taskList, err := s.inner.Tasklists.List().Do()
if err != nil {
return err
}
targetId := ""
for _, l := range taskList.Items {
if l.Title == taskListName {
targetId = l.Id
TaskListNameIdStore.Store(taskListName, l.Id)
}
}
if targetId == "" {
newList := tasks.TaskList{Title: taskListName}
list, err := s.inner.Tasklists.Insert(&newList).Do()
targetId = list.Id
TaskListNameIdStore.Store(taskListName, list.Id)
if err != nil {
return err
}
}
newTask := tasks.Task{Title: title, Notes: notes, Due: duo}
_, err = s.inner.Tasks.Insert(targetId, &newTask).Do()
if err != nil {
return err
}
return nil
}