Package gfit: Include the DataStreamName in the DataStreadID.
[kraftakt.git] / gfit / gfit.go
index ea41b95..581a9fe 100644 (file)
@@ -22,6 +22,7 @@ const (
        userID    = "me"
 
        dataTypeNameCalories  = "com.google.calories.expended"
+       dataTypeNameDistance  = "com.google.distance.delta"
        dataTypeNameSteps     = "com.google.step_count.delta"
        dataTypeNameHeartrate = "com.google.heart_rate.summary"
 )
@@ -34,6 +35,7 @@ var oauthConfig = &oauth2.Config{
        Scopes: []string{
                fitness.FitnessActivityWriteScope,
                fitness.FitnessBodyWriteScope,
+               fitness.FitnessLocationWriteScope,
        },
 }
 
@@ -101,6 +103,10 @@ func DataStreamID(dataSource *fitness.DataSource) string {
                }
        }
 
+       if dataSource.DataStreamName != "" {
+               fields = append(fields, dataSource.DataStreamName)
+       }
+
        return strings.Join(fields, ":")
 }
 
@@ -146,6 +152,28 @@ func (c *Client) DataSetPatch(ctx context.Context, dataSourceID string, points [
        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{