1
0
mirror of https://github.com/taigrr/wtf synced 2025-01-18 04:03:14 -08:00

Gracefully handle calendar connection failures

This commit is contained in:
Chris Cummer 2018-04-03 17:49:38 -07:00 committed by Chris Cummer
parent a4a94f2984
commit 22a9f7b194
4 changed files with 33 additions and 7 deletions

2
config.yml Normal file
View File

@ -0,0 +1,2 @@
wtf:
refresh_interval: 1

View File

@ -92,35 +92,40 @@ func saveToken(file string, token *oauth2.Token) {
log.Fatalf("Unable to cache oauth token: %v", err) log.Fatalf("Unable to cache oauth token: %v", err)
} }
defer f.Close() defer f.Close()
json.NewEncoder(f).Encode(token) json.NewEncoder(f).Encode(token)
} }
func Fetch() *calendar.Events { func Fetch() (*calendar.Events, error) {
ctx := context.Background() ctx := context.Background()
b, err := ioutil.ReadFile("./gcal/client_secret.json") b, err := ioutil.ReadFile("./gcal/client_secret.json")
if err != nil { if err != nil {
log.Fatalf("Unable to read client secret file: %v", err) //log.Fatalf("Unable to read client secret file: %v", err)
return nil, err
} }
config, err := google.ConfigFromJSON(b, calendar.CalendarReadonlyScope) config, err := google.ConfigFromJSON(b, calendar.CalendarReadonlyScope)
if err != nil { if err != nil {
log.Fatalf("Unable to parse client secret file to config: %v", err) //log.Fatalf("Unable to parse client secret file to config: %v", err)
return nil, err
} }
client := getClient(ctx, config) client := getClient(ctx, config)
srv, err := calendar.New(client) srv, err := calendar.New(client)
if err != nil { if err != nil {
log.Fatalf("Unable to retrieve calendar Client %v", err) //log.Fatalf("Unable to retrieve calendar Client %v", err)
return nil, err
} }
t := today().Format(time.RFC3339) t := today().Format(time.RFC3339)
events, err := srv.Events.List("primary").ShowDeleted(false).SingleEvents(true).TimeMin(t).MaxResults(10).OrderBy("startTime").Do() events, err := srv.Events.List("primary").ShowDeleted(false).SingleEvents(true).TimeMin(t).MaxResults(10).OrderBy("startTime").Do()
if err != nil { if err != nil {
log.Fatalf("Unable to retrieve next ten of the user's events. %v", err) //log.Fatalf("Unable to retrieve next ten of the user's events. %v", err)
return nil, err
} }
return events return events, err
} }
func today() time.Time { func today() time.Time {

View File

@ -34,7 +34,7 @@ func NewWidget() *Widget {
/* -------------------- Exported Functions -------------------- */ /* -------------------- Exported Functions -------------------- */
func (widget *Widget) Refresh() { func (widget *Widget) Refresh() {
events := Fetch() events, _ := Fetch()
widget.View.SetTitle(" 🍿 Calendar ") widget.View.SetTitle(" 🍿 Calendar ")
widget.RefreshedAt = time.Now() widget.RefreshedAt = time.Now()
@ -58,6 +58,10 @@ func (widget *Widget) addView() {
} }
func (widget *Widget) contentFrom(events *calendar.Events) string { func (widget *Widget) contentFrom(events *calendar.Events) string {
if events == nil {
return ""
}
str := "\n" str := "\n"
for _, event := range events.Items { for _, event := range events.Items {

15
wtf.go
View File

@ -1,8 +1,10 @@
package main package main
import ( import (
"fmt"
"time" "time"
"github.com/olebedev/config"
"github.com/rivo/tview" "github.com/rivo/tview"
"github.com/senorprogrammer/wtf/bamboohr" "github.com/senorprogrammer/wtf/bamboohr"
"github.com/senorprogrammer/wtf/gcal" "github.com/senorprogrammer/wtf/gcal"
@ -14,6 +16,15 @@ import (
"github.com/senorprogrammer/wtf/weather" "github.com/senorprogrammer/wtf/weather"
) )
func loadConfig() *config.Config {
cfg, err := config.ParseYamlFile("./config.yml")
if err != nil {
panic(err)
}
return cfg
}
func refresher(stat *status.Widget, app *tview.Application) { func refresher(stat *status.Widget, app *tview.Application) {
tick := time.NewTicker(1 * time.Second) tick := time.NewTicker(1 * time.Second)
quit := make(chan struct{}) quit := make(chan struct{})
@ -30,6 +41,10 @@ func refresher(stat *status.Widget, app *tview.Application) {
} }
func main() { func main() {
cfg := loadConfig()
fmt.Printf("%v\n", cfg)
bamboo := bamboohr.NewWidget() bamboo := bamboohr.NewWidget()
bamboo.Refresh() bamboo.Refresh()