Generation of textevents for ZWO files

This commit is contained in:
Rene Saarsoo 2020-09-22 12:16:37 +03:00
parent cec481da4e
commit 78a1bed1f2
3 changed files with 47 additions and 3 deletions

35
examples/comments.txt Normal file
View File

@ -0,0 +1,35 @@
Name: Workout with comments
Warmup: 10:00 25%..75%
# 0:10 Welcome to: #8
# 6:00 Let's talk about today's workout
# 6:10 We'll be doing 5 blocks of VO2max work
# 6:20 Each block 2 minutes and 30 seconds
# 6:30 30 seconds more than last time :)
# 6:40 Finally we finish off with 10 minutes of threshold work
# 6:50 Easy as that :)
Interval: 0:30 95% 95rpm
# 0:00 Spin to 95 RPM if you're not already there
Rest: 0:30 50% 85rpm
# 0:00 Rest a bit
Interval: 2:30 115% 105rpm
# 0:00 Here we go!
# 1:00 First minute done
# 2:00 Just 30 seconds more
# 2:20 Finish it!
Rest: 3:00 50% 85rpm
# 0:00 Good!
# 0:10 Rest for 3 minutes
# 2:50 Ready for next round?
Cooldown: 7:30 90%..25%
# 0:00 We'll now gradually decrease the power
# 0:10 It's all downhill from here :)
# 0:20 until you're cooled down
# 7:10 Thanks for participating
# 7:20 Until next time!

View File

@ -9,6 +9,7 @@
"test:watch": "jest --watch", "test:watch": "jest --watch",
"test:1": "ts-node src/index.ts examples/threshold-pushing.txt", "test:1": "ts-node src/index.ts examples/threshold-pushing.txt",
"test:2": "ts-node src/index.ts examples/darth-vader.txt", "test:2": "ts-node src/index.ts examples/darth-vader.txt",
"test:comments": "ts-node src/index.ts examples/comments.txt",
"test:stats:1": "ts-node src/index.ts --stats examples/threshold-pushing.txt", "test:stats:1": "ts-node src/index.ts --stats examples/threshold-pushing.txt",
"test:stats:2": "ts-node src/index.ts --stats examples/darth-vader.txt", "test:stats:2": "ts-node src/index.ts --stats examples/darth-vader.txt",
"format:js": "prettier --write src/" "format:js": "prettier --write src/"

View File

@ -1,11 +1,17 @@
import * as xml from "xml"; import * as xml from "xml";
import { Interval, Workout } from "./ast"; import { Interval, Workout, Comment } from "./ast";
// Zwift Workout XML generator // Zwift Workout XML generator
const generateTextEvents = (comments: Comment[]): xml.XmlObject[] => {
return comments.map(({ offset, text }) => ({
textevent: [{ _attr: { timeoffset: offset, message: text } }],
}));
};
const generateRangeInterval = ( const generateRangeInterval = (
tagName: "Warmup" | "Cooldown", tagName: "Warmup" | "Cooldown",
{ duration, intensity, cadence }: Interval, { duration, intensity, cadence, comments }: Interval,
): xml.XmlObject => { ): xml.XmlObject => {
return { return {
[tagName]: [ [tagName]: [
@ -17,11 +23,12 @@ const generateRangeInterval = (
...(cadence ? { Cadence: cadence } : {}), ...(cadence ? { Cadence: cadence } : {}),
}, },
}, },
...generateTextEvents(comments),
], ],
}; };
}; };
const generateSteadyStateInterval = ({ duration, intensity, cadence }: Interval): xml.XmlObject => { const generateSteadyStateInterval = ({ duration, intensity, cadence, comments }: Interval): xml.XmlObject => {
return { return {
SteadyState: [ SteadyState: [
{ {
@ -31,6 +38,7 @@ const generateSteadyStateInterval = ({ duration, intensity, cadence }: Interval)
...(cadence ? { Cadence: cadence } : {}), ...(cadence ? { Cadence: cadence } : {}),
}, },
}, },
...generateTextEvents(comments),
], ],
}; };
}; };