presentation_timer: interpolating non-defined numeric slides

pull/2507/head
Gabriele Monaco 2023-01-17 13:51:14 +01:00
parent 4368d66c00
commit 6c61429995
4 changed files with 33 additions and 4 deletions

View File

@ -1,2 +1,3 @@
0.01: first release
0.02: added interface for configuration from app loader
0.03: merged save state and interpolating non-defined numeric slides

View File

@ -26,8 +26,12 @@ The only requirement is that timings are increasing,
so slides number don't have to be consecutive,
some can be skipped and they can even be short texts.
At the moment the app is just quick and dirty
but it should do its job.
In case the series of slide numbers/names is strictly increasing and doesn't
contain strings, but numbers are not consecutive integers, the app will
interpolate intermediate slides (i.e. the first slide in the csv is 5 at minute
5, the app will add slide 1 at minute 1, slide 2 at minute 2, etc.)
At the moment the app is just quick and dirty but it should do its job.
## Screenshots

View File

@ -1,7 +1,7 @@
{
"id": "presentation_timer",
"name": "Presentation Timer",
"version": "0.02",
"version": "0.03",
"description": "A touch based presentation timer for Bangle JS 2",
"icon": "presentation_timer.png",
"screenshots": [{"url":"screenshot1.png"},{"url":"screenshot2.png"},{"url":"screenshot3.png"},{"url":"screenshot4.png"}],
@ -14,7 +14,7 @@
{"name":"presentation_timer.img","url":"presentation_timer.icon.js","evaluate":true}
],
"data": [
{"name":"presentation_timer.json"}
{"name":"presentation_timer.json"},
{ "name": "presentation_timer.csv" }
]
}

View File

@ -49,6 +49,25 @@ function log_debug(o) {
//console.log(o);
}
function fillBlanks(slides) {
start = 1;
time = 0;
let arr = [];
for(let idx in slides) {
s = slides[idx];
if(s[1] != start) {
step = (s[0] - time) / (s[1] - start + 1);
for(let i=0; i<s[1]-start; ++i) {
arr.push([+(step*(i+1)+time).toFixed(2), start+i]);
}
}
arr.push([s[0],+s[1]]);
start = (+s[1]) + 1;
time = s[0];
}
return arr;
}
//first must be a number
function readSlides() {
let csv = require("Storage").read("presentation_timer.csv");
@ -56,6 +75,11 @@ function readSlides() {
let lines = csv.split("\n").filter(e=>e);
log_debug("Loading "+lines.length+" slides");
slides = lines.map(line=>{let s=line.split(";");return [+s[0],s[1]];});
//all numbers and always strictly increasing
if(slides.filter(s=>isNaN(+s[1])).length == 0 &&
slides.map((p,i,a)=>p[1]-(a[i-1]?a[i-1][1]:undefined)).filter(p=>p<=0).length == 0) {
slides = fillBlanks(slides);
}
}