From 27bf21466ac97452beb0ab61358744da6a206ab1 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Fri, 30 Jun 2023 18:47:20 +0100 Subject: [PATCH] multitimer: revert triggercheck, tailcall sched after hardmode alarms --- apps/multitimer/{ext.js => alarm.js} | 21 ++++++- apps/multitimer/app.js | 28 ++++------ apps/multitimer/metadata.json | 2 +- apps/sched/sched.js | 82 ++++++++++++---------------- 4 files changed, 68 insertions(+), 65 deletions(-) rename apps/multitimer/{ext.js => alarm.js} (72%) diff --git a/apps/multitimer/ext.js b/apps/multitimer/alarm.js similarity index 72% rename from apps/multitimer/ext.js rename to apps/multitimer/alarm.js index 6e29e737d..1fbcc7955 100644 --- a/apps/multitimer/ext.js +++ b/apps/multitimer/alarm.js @@ -1,4 +1,4 @@ -// called by alarm.triggercheck +// called by getActiveAlarms(...)[0].js function hardMode(tries, max) { var R = Bangle.appRect; @@ -62,3 +62,22 @@ function startHM() { //between 5-8 random swipes hardMode(0, Math.abs(E.hwRand()%4)+5); } + +function buzz() { + let buzzCount = 3 * require("sched").getSettings().buzzCount; + + require("buzz").pattern(alarm.vibrate === undefined ? "::" : alarm.vibrate).then(() => { + if (buzzCount--) { + setTimeout(buzz, settings.buzzIntervalMillis); + } else if (alarm.as) { // auto-snooze + buzzCount = settings.buzzCount; + setTimeout(buzz, settings.defaultSnoozeMillis); + } + }); +} + +let alarms = require("sched").getAlarms(); +let active = require("sched").getActiveAlarms(alarms); +// active[0] is a HM alarm (otherwise we'd have triggered sched.js instead of this file) +startHM(); +buzz(); diff --git a/apps/multitimer/app.js b/apps/multitimer/app.js index 73b1dec2e..d5173a8ef 100644 --- a/apps/multitimer/app.js +++ b/apps/multitimer/app.js @@ -63,6 +63,14 @@ function clearInt() { timerInt2 = []; } +function setHM(alarm, on) { + if (on) + alarm.js = "(require('Storage').read('multitimer.alarm.js') !== undefined) ? load('multitimer.alarm.js') : load('sched.js')"; + else + delete alarm.js; + alarm.data.hm = on; +} + function drawTimers() { layer = 0; var timers = require("sched").getAlarms().filter(a => a.timer && a.appid == "multitimer"); @@ -297,14 +305,8 @@ function editTimer(idx, a) { } }, "Hard Mode": { - value: !!a.triggercheck, - onchange: v => { - if (v) - a.triggercheck = triggercheck; - else - delete a.triggercheck; - a.data.hm = v; - }, + value: a.data.hm, + onchange: v => setHM(a, v), }, "Vibrate": require("buzz_menu").pattern(a.vibrate, v => a.vibrate = v), "Delete After Expiration": { @@ -630,14 +632,8 @@ function editAlarm(idx, a) { onchange: () => editDOW(a.dow, d=>{a.dow=d;editAlarm(idx,a);}) }, "Hard Mode": { - value: !!a.triggercheck, - onchange: v => { - if (v) - a.triggercheck = triggercheck; - else - delete a.triggercheck; - a.data.hm = v; - }, + value: a.data.hm, + onchange: v => setHM(a, v), }, "Vibrate": require("buzz_menu").pattern(a.vibrate, v => a.vibrate = v), "Delete After Expiration": { diff --git a/apps/multitimer/metadata.json b/apps/multitimer/metadata.json index 6ae92fbdc..7a23052c9 100644 --- a/apps/multitimer/metadata.json +++ b/apps/multitimer/metadata.json @@ -15,7 +15,7 @@ "storage": [ {"name":"multitimer.app.js","url":"app.js"}, {"name":"multitimer.boot.js","url":"boot.js"}, - {"name":"multitimer.ext.js","url":"ext.js"}, + {"name":"multitimer.alarm.js","url":"alarm.js"}, {"name":"multitimer.img","url":"app-icon.js","evaluate":true} ], "data": [{"name":"multitimer.json"}], diff --git a/apps/sched/sched.js b/apps/sched/sched.js index eac91c1c3..bd84c3e47 100644 --- a/apps/sched/sched.js +++ b/apps/sched/sched.js @@ -24,57 +24,45 @@ function showAlarm(alarm) { Bangle.drawWidgets(); let buzzCount = settings.buzzCount; - let showPrompt = true; - if (alarm.triggercheck) { - try { - const action = eval(alarm.triggercheck); - if (action === "skipPrompt") - showPrompt = false; - } catch (e) { - // ignore errors, continue - } - } - if (showPrompt) { - E.showPrompt(message, { - title: alarm.timer ? /*LANG*/"TIMER!" : /*LANG*/"ALARM!", - buttons: { /*LANG*/"Snooze": true, /*LANG*/"Stop": false } // default is sleep so it'll come back in some mins - }).then(function (sleep) { - buzzCount = 0; + E.showPrompt(message, { + title: alarm.timer ? /*LANG*/"TIMER!" : /*LANG*/"ALARM!", + buttons: { /*LANG*/"Snooze": true, /*LANG*/"Stop": false } // default is sleep so it'll come back in some mins + }).then(function (sleep) { + buzzCount = 0; - if (sleep) { - if (alarm.ot === undefined) { - alarm.ot = alarm.t; - } - alarm.t += settings.defaultSnoozeMillis; - Bangle.emit("alarmSnooze", alarm); - } else { - let del = alarm.del === undefined ? settings.defaultDeleteExpiredTimers : alarm.del; - if (del) { - alarms.splice(alarmIndex, 1); - } else { - if (alarm.date && alarm.rp) { - setNextRepeatDate(alarm); - } else if (!alarm.timer) { - alarm.last = new Date().getDate(); - } - if (alarm.ot !== undefined) { - alarm.t = alarm.ot; - delete alarm.ot; - } - if (!alarm.rp) { - alarm.on = false; - } - } - Bangle.emit("alarmDismiss", alarm); + if (sleep) { + if (alarm.ot === undefined) { + alarm.ot = alarm.t; } + alarm.t += settings.defaultSnoozeMillis; + Bangle.emit("alarmSnooze", alarm); + } else { + let del = alarm.del === undefined ? settings.defaultDeleteExpiredTimers : alarm.del; + if (del) { + alarms.splice(alarmIndex, 1); + } else { + if (alarm.date && alarm.rp) { + setNextRepeatDate(alarm); + } else if (!alarm.timer) { + alarm.last = new Date().getDate(); + } + if (alarm.ot !== undefined) { + alarm.t = alarm.ot; + delete alarm.ot; + } + if (!alarm.rp) { + alarm.on = false; + } + } + Bangle.emit("alarmDismiss", alarm); + } - // The updated alarm is still a member of 'alarms' - // so writing to array writes changes back directly - require("sched").setAlarms(alarms); - load(); - }); - } + // The updated alarm is still a member of 'alarms' + // so writing to array writes changes back directly + require("sched").setAlarms(alarms); + load(); + }); function buzz() { if (settings.unlockAtBuzz) {