forked from tkyshm/gocal
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclient.go
118 lines (101 loc) · 2.64 KB
/
client.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package gocal
import (
"io/ioutil"
"log"
"golang.org/x/oauth2"
"golang.org/x/oauth2/google"
"google.golang.org/api/calendar/v3"
)
// Gocal is interface for google calendar api
type Gocal interface {
GetEventsList(string, string) (*calendar.Events, error)
InsertEvent(Event) error
InsertEvents([]Event)
}
// GocalClient is a google calenar api client
type GocalClient struct {
Srv *calendar.Service
Conf Config
}
// Event is google calendar event at Gocal
type Event struct {
Title string `json:"title"`
Detail string `json:"detail"`
StartDate string `json:"start_date,omitempty"`
EndDate string `json:"end_date,omitempty"`
StartTime string `json:"start_time,omitempty"`
EndTime string `json:"end_time,omitempty"`
}
// NewCalendarClient returns http client google calandar api
// scope is calendar.CalendarReadonlyScope or calendar.CalendarScope
func NewCalendarClient(c Config, scope string) (*GocalClient, error) {
var gc GocalClient
b, err := ioutil.ReadFile(c.Credential)
if err != nil {
return nil, err
}
jc, err := google.JWTConfigFromJSON(b, scope)
if err != nil {
return nil, err
}
client := jc.Client(oauth2.NoContext)
srv, err := calendar.New(client)
if err != nil {
return nil, err
}
gc.Srv = srv
gc.Conf = c
return &gc, nil
}
// GetEventsList returns event list
func (gc GocalClient) GetEventsList(startTime string, endTime string) (*calendar.Events, error) {
events, err := gc.Srv.Events.List(gc.Conf.CalendarID).TimeMax(endTime).
TimeMin(startTime).SingleEvents(true).OrderBy("startTime").Do()
if err != nil {
return nil, err
}
return events, nil
}
// InsertEvent insert an event to the google calendar
func (gc GocalClient) InsertEvent(event Event) error {
var start calendar.EventDateTime
var end calendar.EventDateTime
if event.StartDate != "" || event.EndDate != "" {
if event.StartDate == "" {
event.StartDate = event.EndTime
} else if event.EndTime == "" {
event.EndTime = event.StartDate
}
start = calendar.EventDateTime{
Date: event.StartDate,
}
end = calendar.EventDateTime{
Date: event.EndDate,
}
} else {
start = calendar.EventDateTime{
DateTime: event.StartTime,
}
end = calendar.EventDateTime{
DateTime: event.EndTime,
}
}
ge := calendar.Event{
Summary: event.Title,
Start: &start,
Description: event.Detail,
End: &end,
}
_, err := gc.Srv.Events.Insert(gc.Conf.CalendarID, &ge).Do()
return err
}
// InsertEvents insert multiple events
func (gc GocalClient) InsertEvents(events []Event) {
var err error
for _, e := range events {
err = gc.InsertEvent(e)
if err != nil {
log.Printf("[Error] %s", err.Error())
}
}
}