Skip to content

Commit aef3ae2

Browse files
authored
Update fitRecorder.js
1 parent edfc3e9 commit aef3ae2

File tree

1 file changed

+32
-65
lines changed

1 file changed

+32
-65
lines changed

app/recorders/fitRecorder.js

Lines changed: 32 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -75,30 +75,8 @@ export function createFITRecorder (config) {
7575
}
7676

7777
function setIntervalParameters (intervalParameters) {
78-
if (intervalParameters === undefined || intervalParameters.length === 0) { return }
79-
80-
let i = 0
81-
while (i < intervalParameters.length) {
82-
sessionData.workoutplan[i] = { intervalnumber: i }
83-
switch (true) {
84-
case (intervalParameters[i].targetDistance > 0):
85-
// A target distance is set
86-
sessionData.workoutplan[i].type = 'distance'
87-
sessionData.workoutplan[i].targetTime = 0
88-
sessionData.workoutplan[i].targetDistance = intervalParameters[i].targetDistance
89-
break
90-
case (intervalParameters[i].targetTime > 0):
91-
// A target time is set
92-
sessionData.workoutplan[i].type = 'time'
93-
sessionData.workoutplan[i].targetTime = intervalParameters[i].targetTime
94-
sessionData.workoutplan[i].targetDistance = 0
95-
break
96-
default:
97-
sessionData.workoutplan[i].type = 'open'
98-
sessionData.workoutplan[i].targetTime = 0
99-
sessionData.workoutplan[i].targetDistance = 0
100-
}
101-
i++
78+
if (intervalParameters !== undefined && intervalParameters.length > 0) {
79+
sessionData.workoutplan = intervalParameters
10280
}
10381
}
10482

@@ -131,8 +109,10 @@ export function createFITRecorder (config) {
131109
break
132110
case (metrics.metricsContext.isPauseEnd):
133111
// The session is resumed, so it was a pause instead of a stop
112+
const startTime = sessionData.lap[lapnumber].endTime
113+
const workoutStepNo = sessionData.lap[lapnumber].strokes[sessionData.lap[lapnumber].strokes.length - 1].workoutStepNumber
134114
lapnumber++
135-
addRestLap(lapnumber, metrics, sessionData.lap[lapnumber - 1].endTime, currentTime)
115+
addRestLap(lapnumber, metrics, startTime, currentTime, workoutStepNo)
136116
lapnumber++
137117
startLap(lapnumber, metrics, currentTime)
138118
addMetricsToStrokesArray(metrics)
@@ -210,11 +190,10 @@ export function createFITRecorder (config) {
210190
lapHeartrateSeries.reset()
211191
}
212192

213-
function addRestLap (lapnumber, metrics, startTime, endTime) {
193+
function addRestLap (lapnumber, metrics, startTime, endTime, workoutStepNo) {
214194
sessionData.lap[lapnumber] = { startTime }
215195
sessionData.lap[lapnumber].intensity = 'rest'
216-
// ToDo: look the situation where the Workout forces rest period (future functionality), and thus the workoutStepNumber should change based on the current and previous lap (should work automatically???)
217-
sessionData.lap[lapnumber].workoutStepNumber = metrics.workoutStepNumber
196+
sessionData.lap[lapnumber].workoutStepNumber = workoutStepNo
218197
sessionData.lap[lapnumber].lapNumber = lapnumber + 1
219198
sessionData.lap[lapnumber].endTime = endTime
220199
}
@@ -557,55 +536,43 @@ export function createFITRecorder (config) {
557536

558537
let i = 0
559538
while (i < workout.workoutplan.length) {
560-
switch (workout.workoutplan[i].type) {
561-
case ('distance'):
539+
switch (true) {
540+
case (workout.workoutplan[i].type === 'distance' && workout.workoutplan[i].targetDistance > 0):
562541
// A target distance is set
563-
writer.writeMessage(
564-
'workout_step',
565-
{
566-
message_index: i,
567-
duration_type: 'distance',
568-
duration_value: workout.workoutplan[i].targetDistance,
569-
intensity: 'active'
570-
},
571-
null,
572-
true
573-
)
542+
createWorkoutStep(writer, i, 'distance', workout.workoutplan[i].targetDistance, 'active')
574543
break
575-
case ('time'):
544+
case (workout.workoutplan[i].type === 'time' && workout.workoutplan[i].targetTime > 0):
576545
// A target time is set
577-
writer.writeMessage(
578-
'workout_step',
579-
{
580-
message_index: i,
581-
duration_type: 'time',
582-
duration_value: workout.workoutplan[i].targetTime,
583-
intensity: 'active'
584-
},
585-
null,
586-
true
587-
)
546+
createWorkoutStep(writer, i, 'time', workout.workoutplan[i].targetTime, 'active')
588547
break
589-
case ('open'):
548+
case (workout.workoutplan[i].type === 'rest' && workout.workoutplan[i].targetTime > 0):
590549
// A target time is set
591-
writer.writeMessage(
592-
'workout_step',
593-
{
594-
message_index: i,
595-
duration_type: 'open',
596-
intensity: 'active'
597-
},
598-
null,
599-
true
600-
)
550+
createWorkoutStep(writer, i, 'time', workout.workoutplan[i].targetTime, 'rest')
551+
break
552+
case (workout.workoutplan[i].type === 'justrow'):
553+
createWorkoutStep(writer, i, 'open', 0, 'active')
601554
break
602555
default:
603-
// Nothing to do here
556+
// Nothing to do here, ignore malformed data
604557
}
605558
i++
606559
}
607560
}
608561

562+
async function createWorkoutStep (writer, stepNumber, durationType, durationValue, intensityValue) {
563+
writer.writeMessage(
564+
'workout_step',
565+
{
566+
message_index: stepNumber,
567+
duration_type: durationType,
568+
...(durationValue > 0 ? { duration_value: durationValue } : {} ),
569+
intensity: intensityValue
570+
},
571+
null,
572+
true
573+
)
574+
}
575+
609576
async function createFile (content, filename, compress = false) {
610577
if (compress) {
611578
const gzipContent = await gzip(content)

0 commit comments

Comments
 (0)