import (
"context"
"fmt"
- "math"
"net/http"
"strings"
"time"
userID = "me"
dataTypeNameCalories = "com.google.calories.expended"
+ dataTypeNameDistance = "com.google.distance.delta"
dataTypeNameSteps = "com.google.step_count.delta"
dataTypeNameHeartrate = "com.google.heart_rate.summary"
)
Scopes: []string{
fitness.FitnessActivityWriteScope,
fitness.FitnessBodyWriteScope,
+ fitness.FitnessLocationWriteScope,
},
}
}
}
+ if dataSource.DataStreamName != "" {
+ fields = append(fields, dataSource.DataStreamName)
+ }
+
return strings.Join(fields, ":")
}
return nil
}
+func (c *Client) SetDistance(ctx context.Context, meters float64, startOfDay time.Time) error {
+ return c.updateCumulative(ctx,
+ &fitness.DataSource{
+ Application: Application(ctx),
+ DataType: &fitness.DataType{
+ Field: []*fitness.DataTypeField{
+ &fitness.DataTypeField{
+ Name: "distance",
+ Format: "floatPoint",
+ },
+ },
+ Name: dataTypeNameDistance,
+ },
+ Name: "Distance covered",
+ Type: "raw",
+ },
+ &fitness.Value{
+ FpVal: meters,
+ },
+ startOfDay)
+}
+
func (c *Client) SetSteps(ctx context.Context, totalSteps int, startOfDay time.Time) error {
return c.updateCumulative(ctx,
&fitness.DataSource{
return results, maxEndTime, nil
}
-func (c *Client) SetHeartRate(ctx context.Context, totalDurations []fitbit.HeartRateZone, startOfDay time.Time) error {
+func (c *Client) SetHeartRate(ctx context.Context, totalDurations []fitbit.HeartRateZone, restingHeartRate int, startOfDay time.Time) error {
dataSource := &fitness.DataSource{
Application: Application(ctx),
DataType: &fitness.DataType{
break
}
+ average := float64(d.Min+d.Max) / 2.0
+ if d.Min <= restingHeartRate && restingHeartRate <= d.Max {
+ average = float64(restingHeartRate)
+ }
+
dataPoints = append(dataPoints, &fitness.DataPoint{
DataTypeName: dataSource.DataType.Name,
StartTimeNanos: startTime.UnixNano(),
EndTimeNanos: endTime.UnixNano(),
Value: []*fitness.Value{
&fitness.Value{
- FpVal: math.NaN(),
+ FpVal: average,
},
&fitness.Value{
FpVal: float64(d.Max),