// FreeBusy will retrieve all evens for this Calendar and mark each day as either free // or busy depending on the All-Day events in the Google Calendar. // TODO(miek): This works only for 1-day freebusy events, not for multiday events! func (c *Calendar) FreeBusy() error { client, err := client(c.subject, c.secret) if err != nil { return err } srv, err := gcal.New(client) if err != nil { return err } // TimeMax is exclusive, so we need to add another day to c.end to get all the events we want. begin := c.begin.Format(time.RFC3339) end := c.end.AddDate(0, 0, 1).Format(time.RFC3339) events, err := srv.Events.List("primary").ShowDeleted(false). SingleEvents(true).TimeMin(begin).TimeMax(end).OrderBy("startTime").Do() if err != nil { return err } for _, i := range events.Items { when := i.Start.Date // If the DateTime is an empty string the Event is an all-day Event. // So only Date is available. if i.Start.DateTime != "" { continue } whenTime, _ := time.Parse("2006-01-02", when) if _, ok := c.days[whenTime]; ok { c.days[whenTime] = AvailMeta{Available: Busy} } } return nil }
func (c *Cal2Command) runGoogle(args []string) int { ctx, _ := context.WithTimeout(context.Background(), 1*time.Minute) config, err := google.ConfigFromJSON([]byte(clientSecret), calendar.CalendarScope) if err != nil { c.UI.Error(fmt.Sprintf("unable to parse client secrete file to config: %v", err)) return failure } u, err := stringInput(c.UI, "Username:"******"unable to retrieve calendar client %v", err)) return failure } events, err := srv.Events.List("primary"). ShowDeleted(false). SingleEvents(true). TimeMin(time.Now().AddDate(0, -1, 0).Format(time.RFC3339)). OrderBy("startTime").Do() if err != nil { c.UI.Error(fmt.Sprintf("unable to retrieve user events: $v", err)) return failure } n := 0 recurring := map[string]bool{} for _, e := range events.Items { if e.RecurringEventId != "" { recurring[e.RecurringEventId] = true continue // don't ingest recurring instances } c.UI.Output(fmt.Sprintf("Processing: %v", e.Summary)) _, err := ingestEvent(ctx, c.DBClient, c.UserID, e) if err != nil { c.UI.Error(err.Error()) return failure } n++ } for id := range recurring { e, err := srv.Events.Get("primary", id).Do() if err != nil { c.UI.Error(err.Error()) return failure } _, err = ingestEvent(ctx, c.DBClient, c.UserID, e) if err != nil { c.UI.Error(err.Error()) return failure } } return success }
// calendarMain is an example that demonstrates calling the Calendar API. // Its purpose is to test out the ability to get maps of struct objects. // // Example usage: // go build -o go-api-demo *.go // go-api-demo -clientid="my-clientid" -secret="my-secret" calendar func calendarMain(client *http.Client, argv []string) { if len(argv) != 0 { fmt.Fprintln(os.Stderr, "Usage: calendar") return } svc, err := calendar.New(client) if err != nil { log.Fatalf("Unable to create Calendar service: %v", err) } c, err := svc.Colors.Get().Do() if err != nil { log.Fatalf("Unable to retrieve calendar colors: %v", err) } log.Printf("Kind of colors: %v", c.Kind) log.Printf("Colors last updated: %v", c.Updated) for k, v := range c.Calendar { log.Printf("Calendar[%v]: Background=%v, Foreground=%v", k, v.Background, v.Foreground) } for k, v := range c.Event { log.Printf("Event[%v]: Background=%v, Foreground=%v", k, v.Background, v.Foreground) } listRes, err := svc.CalendarList.List().Fields("items/id").Do() if err != nil { log.Fatalf("Unable to retrieve list of calendars: %v", err) } for _, v := range listRes.Items { log.Printf("Calendar ID: %v\n", v.Id) } if len(listRes.Items) > 0 { id := listRes.Items[0].Id res, err := svc.Events.List(id).Fields("items(updated,summary)", "summary", "nextPageToken").Do() if err != nil { log.Fatalf("Unable to retrieve calendar events list: %v", err) } for _, v := range res.Items { log.Printf("Calendar ID %q event: %v: %q\n", id, v.Updated, v.Summary) } log.Printf("Calendar ID %q Summary: %v\n", id, res.Summary) log.Printf("Calendar ID %q next page token: %v\n", id, res.NextPageToken) } }
func getEvents(count int64) []*calendar.Event { sourceToken := oauth2.ReuseTokenSource(nil, &fileTokenSource{}) t, _ := sourceToken.Token() client := clientConfig.Client(oauth2.NoContext, t) svc, err := calendar.New(client) if err != nil { fmt.Println(err) } //c, err := svc.CalendarList.List().Do() startTime := time.Now().Format(time.RFC3339) c, err := svc.Events.List(*calendarId).SingleEvents(true).OrderBy("startTime").TimeMin(startTime).MaxResults(count).Do() //c, err := svc.Events.List(*calendarId).Do() if err != nil { fmt.Println(err) return nil } return c.Items }