return nil
}
-func fitbitConnectHandler(_ context.Context, w http.ResponseWriter, r *http.Request, _ *app.User) error {
- http.Redirect(w, r, fitbit.AuthURL(), http.StatusTemporaryRedirect)
+func fitbitConnectHandler(ctx context.Context, w http.ResponseWriter, r *http.Request, u *app.User) error {
+ c, err := fitbit.NewClient(ctx, "", u)
+ if err != nil {
+ return err
+ }
+
+ http.Redirect(w, r, c.AuthURL(ctx), http.StatusTemporaryRedirect)
return nil
}
}
var errs appengine.MultiError
- if err := c.Unsubscribe(ctx); err != nil {
- errs = append(errs, fmt.Errorf("Unsubscribe() = %v", err))
+
+ for _, collection := range []string{"activities", "sleep"} {
+ if err := c.Unsubscribe(ctx, collection); err != nil {
+ errs = append(errs, fmt.Errorf("Unsubscribe(%q) = %v", collection, err))
+ continue
+ }
+ log.Infof(ctx, "Successfully unsubscribed from %q", collection)
}
if err := c.DeleteToken(ctx); err != nil {
return nil
}
-func googleConnectHandler(_ context.Context, w http.ResponseWriter, r *http.Request, _ *app.User) error {
- http.Redirect(w, r, gfit.AuthURL(), http.StatusTemporaryRedirect)
+func googleConnectHandler(ctx context.Context, w http.ResponseWriter, r *http.Request, u *app.User) error {
+ c, err := gfit.NewClient(ctx, u)
+ if err != nil {
+ return err
+ }
+
+ http.Redirect(w, r, c.AuthURL(ctx), http.StatusTemporaryRedirect)
return nil
}
// handleNotifications parses fitbit notifications and requests the individual
// activities from Fitbit. It is executed asynchronously via the delay package.
func handleNotifications(ctx context.Context, payload []byte) error {
+ log.Debugf(ctx, "NOTIFY -> %s", payload)
+
if err := app.LoadConfig(ctx); err != nil {
return err
}