Skip to content

Commit

Permalink
Add deleteFrom and deleteCalendar parameters to ClearEvents function
Browse files Browse the repository at this point in the history
  • Loading branch information
shellbear committed Sep 14, 2019
1 parent 193332c commit 8dcbe18
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 33 deletions.
4 changes: 3 additions & 1 deletion cmd/clear.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package cmd

import (
"fmt"
"time"

"github.com/ShellBear/epical/pkg/epical"
"github.com/spf13/cobra"
)
Expand All @@ -10,7 +12,7 @@ var clearCmd = &cobra.Command{
Use: "clear",
Short: "Clear all calendar events generated by Epical",
Run: func(cmd *cobra.Command, args []string) {
epical.ClearEvents(cmd.Flag("credentials").Value.String())
epical.ClearEvents(cmd.Flag("credentials").Value.String(), time.Time{}, true)
fmt.Println("Successfully cleared calendar events.")
},
}
10 changes: 3 additions & 7 deletions cmd/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,16 @@ func Execute() {
cli.PersistentFlags().StringVarP(&Credentials, "credentials", "c", "./", "Google API credentials folder")

if err := cli.Execute(); err != nil {
log.Fatalln(err)
log.Fatalln("Failed to execute CLI", err)
}
}

func init() {
listCmd.PersistentFlags().StringVarP(&EpitechToken, "token", "t", "", "Epitech API Token")
if err := listCmd.MarkPersistentFlagRequired("token"); err != nil {
log.Fatalln(err)
}
listCmd.MarkPersistentFlagRequired("token")

syncCmd.PersistentFlags().StringVarP(&EpitechToken, "token", "t", "", "Epitech API Token")
if err := syncCmd.MarkPersistentFlagRequired("token"); err != nil {
log.Fatalln(err)
}
syncCmd.MarkPersistentFlagRequired("token")

cli.AddCommand(versionCmd)
cli.AddCommand(clearCmd)
Expand Down
40 changes: 25 additions & 15 deletions pkg/epical/epical.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"os"
"strings"
"text/tabwriter"
"time"
)

const (
Expand Down Expand Up @@ -47,33 +48,41 @@ func ListEvents(epitechToken string) {
}
}

func ClearEvents(credentialsPath string) {
func ClearEvents(credentialsPath string, deleteFrom time.Time, deleteCalendar bool) {
svc, err := GetGoogleCalendarService(credentialsPath)
if err != nil {
log.Fatalln(err)
log.Fatalln("Failed to get Google calendar service,", err)
}

cal, err := GetGoogleCalendarByName(svc, CalendarName)
if err != nil {
log.Fatalln(err)
log.Fatalln("Failed to get Google calendar ", err)
}

if cal != nil {
events, err := svc.Events.List(cal.Id).Do()
if err != nil {
log.Fatalln(err)
log.Fatalln("Failed to list calendar events", err)
}

for _, evt := range events.Items {
err = svc.Events.Delete(cal.Id, evt.Id).Do()
t, err := time.Parse(time.RFC3339, evt.Start.DateTime)
if err != nil {
log.Fatalln(err)
log.Fatalln("Failed to parse calendar event datetime,", err)
}

if t.After(deleteFrom) {
err = svc.Events.Delete(cal.Id, evt.Id).Do()
if err != nil {
log.Fatalln("Failed to delete calendar event,", err)
}
}
}

err = svc.Calendars.Delete(cal.Id).Do()
if err != nil {
log.Fatalln(err)
if deleteCalendar {
if err = svc.Calendars.Delete(cal.Id).Do(); err != nil {
log.Fatalln("Failed to delete Google calendar,", err)
}
}
}
}
Expand All @@ -85,18 +94,19 @@ func SyncCalendar(credentialsPath, token string) {
}

fmt.Printf("Found %d events to synchronize.\n", len(data))

svc, err := GetGoogleCalendarService(credentialsPath)
if err != nil {
log.Fatalln(err)
log.Fatalln("Failed to get Google calendar service,", err)
}

ClearEvents(credentialsPath)
t := time.Now().Truncate(time.Hour * 24)

ClearEvents(credentialsPath, t, false)
fmt.Println("Cleared old calendar events.")

cal, err := GetOrCreateGoogleCalendar(svc, CalendarName)
if err != nil {
log.Fatalln(err)
log.Fatalln("Failed to get Google calendar,", err)
}

if len(data) == 0 {
Expand All @@ -105,12 +115,12 @@ func SyncCalendar(credentialsPath, token string) {
for _, c := range data {
newEvt, err := NewGoogleCalendarEvent(&c)
if err != nil {
log.Fatalln(err)
log.Fatalln("Failed to create Google calendar event,", err)
}

evt, err := svc.Events.Insert(cal.Id, newEvt).Do()
if err != nil {
log.Fatalln(err)
log.Fatalln("Failed to create Google calendar event", err)
}

log.Println("Created event", evt.Summary)
Expand Down
18 changes: 8 additions & 10 deletions pkg/epical/google.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ func saveToken(path string, token *oauth2.Token) {
}
}

func GetGoogleCalendarByName(service *calendar.Service, name string) (*calendar.CalendarListEntry, error) {
func GetGoogleCalendarByName(service *calendar.Service, name string) (*calendar.Calendar, error) {
var pageToken string
var calendarList *calendar.CalendarList
var err error
Expand All @@ -104,7 +104,7 @@ func GetGoogleCalendarByName(service *calendar.Service, name string) (*calendar.

for _, cal := range calendarList.Items {
if cal.Summary == name {
return cal, nil
return service.Calendars.Get(cal.Id).Do()
}
}

Expand All @@ -117,7 +117,7 @@ func GetGoogleCalendarByName(service *calendar.Service, name string) (*calendar.
return nil, nil
}

func GetOrCreateGoogleCalendar(service *calendar.Service, name string) (*calendar.CalendarListEntry, error) {
func GetOrCreateGoogleCalendar(service *calendar.Service, name string) (*calendar.Calendar, error) {
cal, err := GetGoogleCalendarByName(service, name)
if err != nil {
return nil, err
Expand All @@ -127,15 +127,13 @@ func GetOrCreateGoogleCalendar(service *calendar.Service, name string) (*calenda
return cal, nil
}

cal = &calendar.CalendarListEntry{
Summary: CalendarName,
Description: "https://github.com/shellbear/epical",
TimeZone: "Europe/Paris",
ForegroundColor: "#ff0000",
BackgroundColor: "#00ff00",
cal = &calendar.Calendar{
Summary: CalendarName,
Description: "https://github.com/shellbear/epical",
TimeZone: "Europe/Paris",
}

cal, err = service.CalendarList.Insert(cal).Do()
cal, err = service.Calendars.Insert(cal).Do()
if err != nil {
return nil, err
}
Expand Down

0 comments on commit 8dcbe18

Please sign in to comment.