mirror of
https://github.com/sstent/go-garth-cli.git
synced 2025-12-05 23:52:02 +00:00
76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
package connect
|
|
|
|
import (
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
// ActivityFormat is a file format for importing and exporting activities.
|
|
type ActivityFormat int
|
|
|
|
const (
|
|
// ActivityFormatFIT is the "original" Garmin format.
|
|
ActivityFormatFIT ActivityFormat = iota
|
|
|
|
// ActivityFormatTCX is Training Center XML (TCX) format.
|
|
ActivityFormatTCX
|
|
|
|
// ActivityFormatGPX will export as GPX - the GPS Exchange Format.
|
|
ActivityFormatGPX
|
|
|
|
// ActivityFormatKML will export KML files compatible with Google Earth.
|
|
ActivityFormatKML
|
|
|
|
// ActivityFormatCSV will export splits as CSV.
|
|
ActivityFormatCSV
|
|
|
|
activityFormatMax
|
|
activityFormatInvalid
|
|
)
|
|
|
|
const (
|
|
// ErrUnknownFormat will be returned if the activity file format is unknown.
|
|
ErrUnknownFormat = Error("Unknown format")
|
|
)
|
|
|
|
var (
|
|
activityFormatTable = map[string]ActivityFormat{
|
|
"fit": ActivityFormatFIT,
|
|
"tcx": ActivityFormatTCX,
|
|
"gpx": ActivityFormatGPX,
|
|
"kml": ActivityFormatKML,
|
|
"csv": ActivityFormatCSV,
|
|
}
|
|
)
|
|
|
|
// Extension returns an appropriate filename extension for format.
|
|
func (f ActivityFormat) Extension() string {
|
|
for extension, format := range activityFormatTable {
|
|
if format == f {
|
|
return extension
|
|
}
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
// FormatFromExtension tries to guess the format from a file extension.
|
|
func FormatFromExtension(extension string) (ActivityFormat, error) {
|
|
extension = strings.ToLower(extension)
|
|
|
|
format, found := activityFormatTable[extension]
|
|
if !found {
|
|
return activityFormatInvalid, ErrUnknownFormat
|
|
}
|
|
|
|
return format, nil
|
|
}
|
|
|
|
// FormatFromFilename tries to guess the format based on a filename (or path).
|
|
func FormatFromFilename(filename string) (ActivityFormat, error) {
|
|
extension := filepath.Ext(filename)
|
|
extension = strings.TrimPrefix(extension, ".")
|
|
|
|
return FormatFromExtension(extension)
|
|
}
|