feat(train): a workout out as GPX, TCX or FIT (ADR 0030, D49)
11b: Export on a workout's page hands it to the share sheet as GPX (with a track only; heart rate and cadence in Garmin's TrackPointExtension), TCX (laps, heart rate, cadence, watts, a row's distance) or FIT (file ID, records, timer events at the pauses, laps with their intensities, session, activity), all from the same points: the precise fixes while moving, else the rower's frames, else the heart rates; a plan's steps are the laps. The FIT writer is our own (protocol 1.0, CRC-16/ARC), tested by a reader written from the specification. Not tried yet with Strava, intervals.icu or Garmin Connect. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
db7e0b7bcd
commit
128ba1f6c8
5 changed files with 1386 additions and 15 deletions
|
|
@ -514,5 +514,10 @@
|
|||
"announceTime": "Zeit {time}",
|
||||
"announcePace": "Pace {pace} pro Kilometer",
|
||||
"announceSpeed": "Tempo {speed} Kilometer pro Stunde",
|
||||
"announceHeartRate": "Puls {bpm}"
|
||||
"announceHeartRate": "Puls {bpm}",
|
||||
"workoutExport": "Exportieren",
|
||||
"workoutExportTitle": "Training exportieren",
|
||||
"workoutExportGpxHint": "Die Strecke, für Karten und andere Apps",
|
||||
"workoutExportTcxHint": "Runden, Puls und Kadenz, für die meisten Trainingsseiten",
|
||||
"workoutExportFitHint": "Was Strava, Garmin und intervals.icu am besten lesen"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -653,5 +653,10 @@
|
|||
"announceSpeed": "Speed {speed} kilometres an hour",
|
||||
"@announceSpeed": {"placeholders": {"speed": {"type": "String"}}},
|
||||
"announceHeartRate": "Heart rate {bpm}",
|
||||
"@announceHeartRate": {"placeholders": {"bpm": {"type": "String"}}}
|
||||
"@announceHeartRate": {"placeholders": {"bpm": {"type": "String"}}},
|
||||
"workoutExport": "Export",
|
||||
"workoutExportTitle": "Export the workout",
|
||||
"workoutExportGpxHint": "The track, for maps and other apps",
|
||||
"workoutExportTcxHint": "Laps, heart rate and cadence, for most training sites",
|
||||
"workoutExportFitHint": "What Strava, Garmin and intervals.icu read best"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3111,6 +3111,36 @@ abstract class AppLocalizations {
|
|||
/// In en, this message translates to:
|
||||
/// **'Heart rate {bpm}'**
|
||||
String announceHeartRate(String bpm);
|
||||
|
||||
/// No description provided for @workoutExport.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Export'**
|
||||
String get workoutExport;
|
||||
|
||||
/// No description provided for @workoutExportTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Export the workout'**
|
||||
String get workoutExportTitle;
|
||||
|
||||
/// No description provided for @workoutExportGpxHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The track, for maps and other apps'**
|
||||
String get workoutExportGpxHint;
|
||||
|
||||
/// No description provided for @workoutExportTcxHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Laps, heart rate and cadence, for most training sites'**
|
||||
String get workoutExportTcxHint;
|
||||
|
||||
/// No description provided for @workoutExportFitHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'What Strava, Garmin and intervals.icu read best'**
|
||||
String get workoutExportFitHint;
|
||||
}
|
||||
|
||||
class _AppLocalizationsDelegate
|
||||
|
|
|
|||
|
|
@ -1872,4 +1872,21 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
String announceHeartRate(String bpm) {
|
||||
return 'Puls $bpm';
|
||||
}
|
||||
|
||||
@override
|
||||
String get workoutExport => 'Exportieren';
|
||||
|
||||
@override
|
||||
String get workoutExportTitle => 'Training exportieren';
|
||||
|
||||
@override
|
||||
String get workoutExportGpxHint => 'Die Strecke, für Karten und andere Apps';
|
||||
|
||||
@override
|
||||
String get workoutExportTcxHint =>
|
||||
'Runden, Puls und Kadenz, für die meisten Trainingsseiten';
|
||||
|
||||
@override
|
||||
String get workoutExportFitHint =>
|
||||
'Was Strava, Garmin und intervals.icu am besten lesen';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1860,6 +1860,23 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
String announceHeartRate(String bpm) {
|
||||
return 'Heart rate $bpm';
|
||||
}
|
||||
|
||||
@override
|
||||
String get workoutExport => 'Export';
|
||||
|
||||
@override
|
||||
String get workoutExportTitle => 'Export the workout';
|
||||
|
||||
@override
|
||||
String get workoutExportGpxHint => 'The track, for maps and other apps';
|
||||
|
||||
@override
|
||||
String get workoutExportTcxHint =>
|
||||
'Laps, heart rate and cadence, for most training sites';
|
||||
|
||||
@override
|
||||
String get workoutExportFitHint =>
|
||||
'What Strava, Garmin and intervals.icu read best';
|
||||
}
|
||||
|
||||
/// The translations for English, as used in the United Kingdom (`en_GB`).
|
||||
|
|
|
|||
Loading…
Reference in a new issue