diff --git a/bincio/extract/parsers/fit.py b/bincio/extract/parsers/fit.py index 8b1f5fb..130a400 100644 --- a/bincio/extract/parsers/fit.py +++ b/bincio/extract/parsers/fit.py @@ -139,5 +139,9 @@ def _normalise_sub_sport(value: Any) -> str | None: "indoor_cycling": "indoor", "trail": "trail", "track": "track", + "cross_country_skiing": "nordic", + "nordic_skiing": "nordic", + "skate_skiing": "nordic", + "backcountry_skiing": "nordic", } return mapping.get(s, s) or None diff --git a/bincio/extract/sport.py b/bincio/extract/sport.py index 7971093..b333559 100644 --- a/bincio/extract/sport.py +++ b/bincio/extract/sport.py @@ -43,6 +43,14 @@ _MAPPING: dict[str, str] = { "walking": "walking", "walk": "walking", "outdoor_walk": "walking", + # skiing + "skiing": "skiing", + "cross_country_skiing": "skiing", + "nordic_skiing": "skiing", + "downhill_skiing": "skiing", + "alpine_skiing": "skiing", + "skate_skiing": "skiing", + "backcountry_skiing": "skiing", # swimming "swimming": "swimming", "swim": "swimming", @@ -50,7 +58,7 @@ _MAPPING: dict[str, str] = { "lap_swimming": "swimming", } -BAS_SPORTS = {"cycling", "running", "hiking", "walking", "swimming", "other"} +BAS_SPORTS = {"cycling", "running", "hiking", "walking", "swimming", "skiing", "other"} def normalise_sport(raw: object) -> str: diff --git a/site/src/components/ActivityFeed.svelte b/site/src/components/ActivityFeed.svelte index 5e918e0..48cd65a 100644 --- a/site/src/components/ActivityFeed.svelte +++ b/site/src/components/ActivityFeed.svelte @@ -61,6 +61,7 @@ { value: 'hiking', label: '🥾 Hiking' }, { value: 'walking', label: '🚶 Walking' }, { value: 'swimming', label: '🏊 Swimming' }, + { value: 'skiing', label: '⛷️ Skiing' }, { value: 'other', label: '⚡ Other' }, ]; diff --git a/site/src/lib/format.ts b/site/src/lib/format.ts index a3a0fab..458ce36 100644 --- a/site/src/lib/format.ts +++ b/site/src/lib/format.ts @@ -53,6 +53,7 @@ const SPORT_ICONS: Record = { hiking: '🥾', walking: '🚶', swimming: '🏊', + skiing: '⛷️', other: '⚡', }; @@ -62,6 +63,7 @@ const SPORT_COLORS: Record = { hiking: '#4ade80', walking: '#a3e635', swimming: '#38bdf8', + skiing: '#e0f2fe', other: '#a78bfa', }; diff --git a/site/src/lib/types.ts b/site/src/lib/types.ts index 7badeef..1a28f6d 100644 --- a/site/src/lib/types.ts +++ b/site/src/lib/types.ts @@ -1,7 +1,7 @@ /** TypeScript types mirroring BAS v1.0 schema. */ -export type Sport = "cycling" | "running" | "hiking" | "walking" | "swimming" | "other"; -export type SubSport = "road" | "mountain" | "gravel" | "indoor" | "trail" | "track" | null; +export type Sport = "cycling" | "running" | "hiking" | "walking" | "swimming" | "skiing" | "other"; +export type SubSport = "road" | "mountain" | "gravel" | "indoor" | "trail" | "track" | "nordic" | null; export type Privacy = "public" | "blur_start" | "no_gps" | "private"; export interface ActivitySummary {