mirror of
https://github.com/sstent/go-garth-cli.git
synced 2025-12-05 23:52:02 +00:00
112 lines
3.9 KiB
Go
112 lines
3.9 KiB
Go
package connect
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// CalendarYear describes a Garmin Connect calendar year
|
|
type CalendarYear struct {
|
|
StartDayOfJanuary int `json:"startDayofJanuary"`
|
|
LeapYear bool `json:"leapYear"`
|
|
YearItems []YearItem `json:"yearItems"`
|
|
YearSummaries []YearSummary `json:"yearSummaries"`
|
|
}
|
|
|
|
// YearItem describes an item on a Garmin Connect calendar year
|
|
type YearItem struct {
|
|
Date Date `json:"date"`
|
|
Display int `json:"display"`
|
|
}
|
|
|
|
// YearSummary describes a per-activity-type yearly summary on a Garmin Connect calendar year
|
|
type YearSummary struct {
|
|
ActivityTypeID int `json:"activityTypeId"`
|
|
NumberOfActivities int `json:"numberOfActivities"`
|
|
TotalDistance int `json:"totalDistance"`
|
|
TotalDuration int `json:"totalDuration"`
|
|
TotalCalories int `json:"totalCalories"`
|
|
}
|
|
|
|
// CalendarMonth describes a Garmin Conenct calendar month
|
|
type CalendarMonth struct {
|
|
StartDayOfMonth int `json:"startDayOfMonth"`
|
|
NumOfDaysInMonth int `json:"numOfDaysInMonth"`
|
|
NumOfDaysInPrevMonth int `json:"numOfDaysInPrevMonth"`
|
|
Month int `json:"month"`
|
|
Year int `json:"year"`
|
|
CalendarItems []CalendarItem `json:"calendarItems"`
|
|
}
|
|
|
|
// CalendarWeek describes a Garmin Connect calendar week
|
|
type CalendarWeek struct {
|
|
StartDate Date `json:"startDate"`
|
|
EndDate Date `json:"endDate"`
|
|
NumOfDaysInMonth int `json:"numOfDaysInMonth"`
|
|
CalendarItems []CalendarItem `json:"calendarItems"`
|
|
}
|
|
|
|
// CalendarItem describes an activity displayed on a Garmin Connect calendar
|
|
type CalendarItem struct {
|
|
ID int `json:"id"`
|
|
ItemType string `json:"itemType"`
|
|
ActivityTypeID int `json:"activityTypeId"`
|
|
Title string `json:"title"`
|
|
Date Date `json:"date"`
|
|
Duration int `json:"duration"`
|
|
Distance int `json:"distance"`
|
|
Calories int `json:"calories"`
|
|
StartTimestampLocal Time `json:"startTimestampLocal"`
|
|
ElapsedDuration float64 `json:"elapsedDuration"`
|
|
Strokes float64 `json:"strokes"`
|
|
MaxSpeed float64 `json:"maxSpeed"`
|
|
ShareableEvent bool `json:"shareableEvent"`
|
|
AutoCalcCalories bool `json:"autoCalcCalories"`
|
|
ProtectedWorkoutSchedule bool `json:"protectedWorkoutSchedule"`
|
|
IsParent bool `json:"isParent"`
|
|
}
|
|
|
|
// CalendarYear will get the activity summaries and list of days active for a given year
|
|
func (c *Client) CalendarYear(year int) (*CalendarYear, error) {
|
|
URL := fmt.Sprintf("https://connect.garmin.com/modern/proxy/calendar-service/year/%d",
|
|
year,
|
|
)
|
|
calendarYear := new(CalendarYear)
|
|
err := c.getJSON(URL, &calendarYear)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return calendarYear, nil
|
|
}
|
|
|
|
// CalendarMonth will get the activities for a given month
|
|
func (c *Client) CalendarMonth(year int, month int) (*CalendarMonth, error) {
|
|
URL := fmt.Sprintf("https://connect.garmin.com/modern/proxy/calendar-service/year/%d/month/%d",
|
|
year,
|
|
month-1, // Months in Garmin Connect start from zero
|
|
)
|
|
calendarMonth := new(CalendarMonth)
|
|
err := c.getJSON(URL, &calendarMonth)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return calendarMonth, nil
|
|
}
|
|
|
|
// CalendarWeek will get the activities for a given week. A week will be returned that contains the day requested, not starting with)
|
|
func (c *Client) CalendarWeek(year int, month int, week int) (*CalendarWeek, error) {
|
|
URL := fmt.Sprintf("https://connect.garmin.com/modern/proxy/calendar-service/year/%d/month/%d/day/%d/start/1",
|
|
year,
|
|
month-1, // Months in Garmin Connect start from zero
|
|
week,
|
|
)
|
|
calendarWeek := new(CalendarWeek)
|
|
err := c.getJSON(URL, &calendarWeek)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return calendarWeek, nil
|
|
}
|