-func (c *Client) Steps(ctx context.Context, startTime, endTime time.Time) (int, time.Time, error) {
- dataSourceID := DataStreamID(&fitness.DataSource{
- Type: "raw",
- DataType: &fitness.DataType{
- Name: dataTypeNameSteps,
- },
- })
- datasetID := fmt.Sprintf("%d-%d", startTime.UnixNano(), endTime.UnixNano())
-
- res, err := c.Service.Users.DataSources.Datasets.Get(userID, dataSourceID, datasetID).Context(ctx).Do()
- if err != nil {
- log.Errorf(ctx, "c.Service.Users.DataSources.Datasets.Get(%q, %q) = %v",
- dataSourceID, datasetID, err)
- return 0, time.Time{}, err
- }
-
- if len(res.Point) == 0 {
- return 0, startTime, nil
- }
-
- steps := 0
- maxEndTime := startTime
- for _, p := range res.Point {
- pointEndTime := time.Unix(0, p.EndTimeNanos).In(startTime.Location())
- value := p.Value[0].IntVal
-
- steps += int(value)
- if maxEndTime.Before(pointEndTime) {
- maxEndTime = pointEndTime
- }
- }
-
- log.Debugf(ctx, "Google Fit has data points until %v: %d steps", maxEndTime, steps)
- return steps, maxEndTime, nil
-}
-