X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=gfitsync.go;h=9eadde9efb66f919d278328f0daf06a0168840f7;hb=f1acb1c2891ade2daa46e6e0f5fbafc1d7d6dd05;hp=3bd416f578fe73e24503faa49340fd6565c8b4d7;hpb=d941e307d9f8c3175e2ceb9f29395e56759d757c;p=kraftakt.git diff --git a/gfitsync.go b/gfitsync.go index 3bd416f..9eadde9 100644 --- a/gfitsync.go +++ b/gfitsync.go @@ -126,8 +126,11 @@ func fitbitGrantHandler(ctx context.Context, w http.ResponseWriter, r *http.Requ return err } - if err := c.Subscribe(ctx, "activities"); err != nil { - return fmt.Errorf("c.Subscribe() = %v", err) + for _, collection := range []string{"activities", "sleep"} { + if err := c.Subscribe(ctx, collection); err != nil { + return fmt.Errorf("c.Subscribe(%q) = %v", collection, err) + } + log.Infof(ctx, "Successfully subscribed to %q", collection) } redirectURL := r.URL @@ -206,6 +209,7 @@ func handleNotifications(ctx context.Context, payload []byte) error { for _, s := range subscriptions { if s.CollectionType != "activities" { + log.Warningf(ctx, "ignoring collection type %q", s.CollectionType) continue } @@ -292,6 +296,8 @@ func handleNotification(ctx context.Context, s *fitbit.Subscription) error { wg.Add(1) go func() { + defer wg.Done() + var distanceMeters float64 for _, d := range summary.Summary.Distances { if d.Activity != "total" { @@ -302,8 +308,8 @@ func handleNotification(ctx context.Context, s *fitbit.Subscription) error { } if err := gfitClient.SetDistance(ctx, distanceMeters, tm); err != nil { errs = append(errs, fmt.Errorf("gfitClient.SetDistance(%d) = %v", distanceMeters, err)) + return } - wg.Done() }() wg.Add(1) @@ -314,6 +320,35 @@ func handleNotification(ctx context.Context, s *fitbit.Subscription) error { wg.Done() }() + wg.Add(1) + go func() { + defer wg.Done() + + var activities []gfit.Activity + for _, a := range summary.Activities { + if !a.HasStartTime { + continue + } + + startTime, err := time.ParseInLocation("2006-01-02T15:04", a.StartDate+"T"+a.StartTime, profile.Timezone) + if err != nil { + errs = append(errs, fmt.Errorf("gfitClient.SetActivities() = %v", err)) + return + } + endTime := startTime.Add(time.Duration(a.Duration) * time.Millisecond) + + activities = append(activities, gfit.Activity{ + Start: startTime, + End: endTime, + Type: gfit.ParseFitbitActivity(a.Name), + }) + } + if err := gfitClient.SetActivities(ctx, activities, tm); err != nil { + errs = append(errs, fmt.Errorf("gfitClient.SetActivities() = %v", err)) + return + } + }() + wg.Wait() if len(errs) != 0 {