2020-09-09 03:26:23 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"flag"
|
|
|
|
|
"io/ioutil"
|
|
|
|
|
"log"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"golang.org/x/oauth2/google"
|
|
|
|
|
"google.golang.org/api/calendar/v3"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var calName = flag.String("calendar", "", "name of calendar")
|
2020-09-09 03:53:12 +00:00
|
|
|
var days = flag.Int("days", 0, "number of days in the future")
|
2020-09-09 03:26:23 +00:00
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
flag.Parse()
|
|
|
|
|
|
|
|
|
|
b, err := ioutil.ReadFile("credentials.json")
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// If modifying these scopes, delete your previously saved token.json.
|
|
|
|
|
config, err := google.ConfigFromJSON(b, calendar.CalendarScope)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
client, err := getClient(config)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
srv, err := calendar.New(client)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
calendars, err := srv.CalendarList.List().Do()
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
var myCal *calendar.CalendarListEntry
|
|
|
|
|
for _, item := range calendars.Items {
|
|
|
|
|
if item.Summary == *calName {
|
|
|
|
|
myCal = item
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if myCal == nil {
|
|
|
|
|
log.Fatalf("calendar '%s' not found", *calName)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
loc, err := time.LoadLocation("US/Pacific")
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
now := time.Now().In(loc)
|
|
|
|
|
|
2020-09-09 03:53:12 +00:00
|
|
|
for i := 0; i < *days; i++ {
|
|
|
|
|
date := now.Add(time.Duration(i * 24) * time.Hour)
|
2020-09-09 03:26:23 +00:00
|
|
|
|
2020-09-09 03:53:12 +00:00
|
|
|
for _, class := range classes {
|
2020-09-09 04:03:49 +00:00
|
|
|
if !class.happensOnDay(date) {
|
2020-09-09 03:53:12 +00:00
|
|
|
continue
|
2020-09-09 03:26:23 +00:00
|
|
|
}
|
|
|
|
|
|
2020-09-09 04:03:49 +00:00
|
|
|
ev := class.buildEvent(date)
|
2020-09-09 03:26:23 +00:00
|
|
|
|
2020-09-09 03:53:12 +00:00
|
|
|
_, err := srv.Events.Insert(myCal.Id, ev).Do()
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
2020-09-09 03:26:23 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
ev := &calendar.Event{
|
|
|
|
|
Summary: "Test event",
|
|
|
|
|
Start: &calendar.EventDateTime{
|
|
|
|
|
DateTime: "2020-09-09T16:00:00",
|
|
|
|
|
TimeZone: "US/Pacific",
|
|
|
|
|
},
|
|
|
|
|
End: &calendar.EventDateTime{
|
|
|
|
|
DateTime: "2020-09-09T17:00:00",
|
|
|
|
|
TimeZone: "US/Pacific",
|
|
|
|
|
},
|
|
|
|
|
Attendees: []*calendar.EventAttendee{
|
|
|
|
|
&calendar.EventAttendee{
|
|
|
|
|
Email: "oliver.park@heliosns.org",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
res, err := srv.Events.Insert(myCal.Id, ev).Do()
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.Printf("%#v", res)
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
t := time.Now().Format(time.RFC3339)
|
|
|
|
|
events, err := srv.Events.List(myCal.Id).ShowDeleted(false).
|
|
|
|
|
SingleEvents(true).TimeMin(t).MaxResults(250).OrderBy("startTime").Do()
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, item := range events.Items {
|
|
|
|
|
date := item.Start.DateTime
|
|
|
|
|
if date == "" {
|
|
|
|
|
date = item.Start.Date
|
|
|
|
|
}
|
|
|
|
|
log.Printf("%v (%v)", item.Summary, date)
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
}
|