Files
go-garth-cli/python-garmin-connect/Gear.go
2025-09-21 11:03:52 -07:00

132 lines
3.6 KiB
Go

package connect
import (
"fmt"
)
// Gear describes a Garmin Connect gear entry
type Gear struct {
Uuid string `json:"uuid"`
GearPk int `json:"gearPk"`
UserProfileID int64 `json:"userProfilePk"`
GearMakeName string `json:"gearMakeName"`
GearModelName string `json:"gearModelName"`
GearTypeName string `json:"gearTypeName"`
DisplayName string `json:"displayName"`
CustomMakeModel string `json:"customMakeModel"`
ImageNameLarge string `json:"imageNameLarge"`
ImageNameMedium string `json:"imageNameMedium"`
ImageNameSmall string `json:"imageNameSmall"`
DateBegin Time `json:"dateBegin"`
DateEnd Time `json:"dateEnd"`
MaximumMeters float64 `json:"maximumMeters"`
Notified bool `json:"notified"`
CreateDate Time `json:"createDate"`
UpdateDate Time `json:"updateDate"`
}
// GearType desribes the types of gear
type GearType struct {
TypeID int `json:"gearTypePk"`
TypeName string `json:"gearTypeName"`
CreateDate Time `json:"createDate"`
UpdateDate Time `json:"updateData"`
}
// GearStats describes the stats of gear
type GearStats struct {
TotalDistance float64 `json:"totalDistance"`
TotalActivities int `json:"totalActivities"`
Processsing bool `json:"processing"`
}
// Gear will retrieve the details of the users gear
func (c *Client) Gear(profileID int64) ([]Gear, error) {
if profileID == 0 && c.Profile == nil {
return nil, ErrNotAuthenticated
}
if profileID == 0 && c.Profile != nil {
profileID = c.Profile.ProfileID
}
URL := fmt.Sprintf("https://connect.garmin.com/modern/proxy/gear-service/gear/filterGear?userProfilePk=%d",
profileID,
)
var gear []Gear
err := c.getJSON(URL, &gear)
if err != nil {
return nil, err
}
return gear, nil
}
// GearType will list the gear types
func (c *Client) GearType() ([]GearType, error) {
URL := "https://connect.garmin.com/modern/proxy/gear-service/gear/types"
var gearType []GearType
err := c.getJSON(URL, &gearType)
if err != nil {
return nil, err
}
return gearType, nil
}
// GearStats will get the statistics of an item of gear, given the uuid
func (c *Client) GearStats(uuid string) (*GearStats, error) {
URL := fmt.Sprintf("https://connect.garmin.com/modern/proxy/userstats-service/gears/%s",
uuid,
)
gearStats := new(GearStats)
err := c.getJSON(URL, &gearStats)
if err != nil {
return nil, err
}
return gearStats, nil
}
// GearLink will link an item of gear to an activity. Multiple items of gear can be linked.
func (c *Client) GearLink(uuid string, activityID int) error {
URL := fmt.Sprintf("https://connect.garmin.com/modern/proxy/gear-service/gear/link/%s/activity/%d",
uuid,
activityID,
)
return c.write("PUT", URL, "", 200)
}
// GearUnlink will remove an item of gear from an activity. All items of gear can be unlinked.
func (c *Client) GearUnlink(uuid string, activityID int) error {
URL := fmt.Sprintf("https://connect.garmin.com/modern/proxy/gear-service/gear/unlink/%s/activity/%d",
uuid,
activityID,
)
return c.write("PUT", URL, "", 200)
}
// GearForActivity will retrieve the gear associated with an activity
func (c *Client) GearForActivity(profileID int64, activityID int) ([]Gear, error) {
if profileID == 0 && c.Profile == nil {
return nil, ErrNotAuthenticated
}
if profileID == 0 && c.Profile != nil {
profileID = c.Profile.ProfileID
}
URL := fmt.Sprintf("https://connect.garmin.com/modern/proxy/gear-service/gear/filterGear?userProfilePk=%d&activityId=%d",
profileID, activityID,
)
var gear []Gear
err := c.getJSON(URL, &gear)
if err != nil {
return nil, err
}
return gear, nil
}