runplus: simpler always-resume toggle

pull/3431/head
Rob Pilling 2024-05-28 08:35:02 +01:00
parent 020d26ddef
commit 3be97f8d01
3 changed files with 14 additions and 45 deletions

View File

@ -27,4 +27,4 @@ Write to correct settings file, fixing settings not working.
0.24: Add indicators for lock,gps and pulse to karvonen screen 0.24: Add indicators for lock,gps and pulse to karvonen screen
0.25: Fix step count bug when runs are resumed after a long time 0.25: Fix step count bug when runs are resumed after a long time
0.26: Add ability to zoom in on a single stat by tapping it 0.26: Add ability to zoom in on a single stat by tapping it
0.27: Allow configuration of time after which the user is prompted to resume 0.27: Allow setting to alway resume an activity

View File

@ -1,5 +1,4 @@
let runInterval; let runInterval;
let statusTimeout;
let screen = "main"; // main | karvonen | menu | zoom let screen = "main"; // main | karvonen | menu | zoom
// Run interface wrapped in a function // Run interface wrapped in a function
const ExStats = require("exstats"); const ExStats = require("exstats");
@ -27,10 +26,7 @@ let settings = Object.assign({
B5: "step", B5: "step",
B6: "caden", B6: "caden",
paceLength: 1000, paceLength: 1000,
resume: { alwaysResume: false,
promptAfter: 10000,
default: false,
},
notify: { notify: {
dist: { dist: {
value: 0, value: 0,
@ -54,15 +50,9 @@ let statIDs = [settings.B1,settings.B2,settings.B3,settings.B4,settings.B5,setti
let exs = ExStats.getStats(statIDs, settings); let exs = ExStats.getStats(statIDs, settings);
// --------------------------- // ---------------------------
function inPauseWindow() {
return exs.state.duration <= settings.resume.promptAfter;
}
function setStatus(running) { function setStatus(running) {
const paused = inPauseWindow(); layout.button.label = running ? "STOP" : "START";
layout.status.label = running ? "RUN" : "STOP";
layout.button.label = running ? "STOP" : paused ? "RESUME" : "START";
layout.status.label = running ? "RUN" : paused ? "PAUSE" : "STOP";
layout.status.bgCol = running ? "#0f0" : "#f00"; layout.status.bgCol = running ? "#0f0" : "#f00";
if (screen === "main") layout.render(); if (screen === "main") layout.render();
} }
@ -75,10 +65,10 @@ function onStartStop() {
} }
var running = !exs.state.active; var running = !exs.state.active;
var shouldResume = settings.resume.default; var shouldResume = settings.alwaysResume;
var promise = Promise.resolve(); var promise = Promise.resolve();
if (running && !inPauseWindow()) { // if more than N seconds of duration, ask if we should resume? if (!shouldResume && running && exs.state.duration > 10000) { // if more than 10 seconds of duration, ask if we should resume?
promise = promise. promise = promise.
then(() => { then(() => {
screen = "menu"; screen = "menu";
@ -114,8 +104,6 @@ function onStartStop() {
} }
promise.then(() => { promise.then(() => {
if(statusTimeout) clearTimeout(statusTimeout);
if (running) { if (running) {
if (shouldResume) if (shouldResume)
exs.resume(); exs.resume();
@ -123,12 +111,6 @@ function onStartStop() {
exs.start(); exs.start();
} else { } else {
exs.stop(); exs.stop();
// convert start/stop label when pause-window ends
statusTimeout = setTimeout(() => {
statusTimeout = undefined;
setStatus(running);
}, settings.resume.promptAfter);
} }
// if stopping running, don't clear state // if stopping running, don't clear state
// so we can at least refer to what we've done // so we can at least refer to what we've done

View File

@ -17,10 +17,7 @@
B5: "step", B5: "step",
B6: "caden", B6: "caden",
paceLength: 1000, // TODO: Default to either 1km or 1mi based on locale paceLength: 1000, // TODO: Default to either 1km or 1mi based on locale
resume: { alwaysResume: false,
promptAfter: 10000,
default: false,
},
notify: { notify: {
dist: { dist: {
increment: 0, increment: 0,
@ -76,27 +73,17 @@
saveSettings(); saveSettings();
} }
}; };
menu[/*LANG*/"Always resume run"] = {
value : settings.alwaysResume,
onchange : v => {
settings.alwaysResume = v;
saveSettings();
},
};
var notificationsMenu = { var notificationsMenu = {
'< Back': function() { E.showMenu(menu) }, '< Back': function() { E.showMenu(menu) },
} }
menu[/*LANG*/"Notifications"] = function() { E.showMenu(notificationsMenu)}; menu[/*LANG*/"Notifications"] = function() { E.showMenu(notificationsMenu)};
var resumeMenu = {
"Prompt after": {
value : settings.resume.promptAfter / 1000,
onchange : v => {
settings.resume.promptAfter = v * 1000;
saveSettings();
}
},
"Resume by default": {
value : settings.resume.default,
onchange : v => {
settings.resume.default = v;
saveSettings();
},
},
};
menu[/*LANG*/"Resume"] = function() { E.showMenu(resumeMenu) };
ExStats.appendMenuItems(menu, settings, saveSettings); ExStats.appendMenuItems(menu, settings, saveSettings);
ExStats.appendNotifyMenuItems(notificationsMenu, settings, saveSettings); ExStats.appendNotifyMenuItems(notificationsMenu, settings, saveSettings);
var vibPatterns = [/*LANG*/"Off", ".", "-", "--", "-.-", "---"]; var vibPatterns = [/*LANG*/"Off", ".", "-", "--", "-.-", "---"];