multitimer: revert triggercheck, tailcall sched after hardmode alarms

pull/2781/head
Rob Pilling 2023-06-30 18:47:20 +01:00
parent c930936b39
commit 27bf21466a
4 changed files with 68 additions and 65 deletions

View File

@ -1,4 +1,4 @@
// called by alarm.triggercheck // called by getActiveAlarms(...)[0].js
function hardMode(tries, max) { function hardMode(tries, max) {
var R = Bangle.appRect; var R = Bangle.appRect;
@ -62,3 +62,22 @@ function startHM() {
//between 5-8 random swipes //between 5-8 random swipes
hardMode(0, Math.abs(E.hwRand()%4)+5); 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();

View File

@ -63,6 +63,14 @@ function clearInt() {
timerInt2 = []; 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() { function drawTimers() {
layer = 0; layer = 0;
var timers = require("sched").getAlarms().filter(a => a.timer && a.appid == "multitimer"); var timers = require("sched").getAlarms().filter(a => a.timer && a.appid == "multitimer");
@ -297,14 +305,8 @@ function editTimer(idx, a) {
} }
}, },
"Hard Mode": { "Hard Mode": {
value: !!a.triggercheck, value: a.data.hm,
onchange: v => { onchange: v => setHM(a, v),
if (v)
a.triggercheck = triggercheck;
else
delete a.triggercheck;
a.data.hm = v;
},
}, },
"Vibrate": require("buzz_menu").pattern(a.vibrate, v => a.vibrate = v), "Vibrate": require("buzz_menu").pattern(a.vibrate, v => a.vibrate = v),
"Delete After Expiration": { "Delete After Expiration": {
@ -630,14 +632,8 @@ function editAlarm(idx, a) {
onchange: () => editDOW(a.dow, d=>{a.dow=d;editAlarm(idx,a);}) onchange: () => editDOW(a.dow, d=>{a.dow=d;editAlarm(idx,a);})
}, },
"Hard Mode": { "Hard Mode": {
value: !!a.triggercheck, value: a.data.hm,
onchange: v => { onchange: v => setHM(a, v),
if (v)
a.triggercheck = triggercheck;
else
delete a.triggercheck;
a.data.hm = v;
},
}, },
"Vibrate": require("buzz_menu").pattern(a.vibrate, v => a.vibrate = v), "Vibrate": require("buzz_menu").pattern(a.vibrate, v => a.vibrate = v),
"Delete After Expiration": { "Delete After Expiration": {

View File

@ -15,7 +15,7 @@
"storage": [ "storage": [
{"name":"multitimer.app.js","url":"app.js"}, {"name":"multitimer.app.js","url":"app.js"},
{"name":"multitimer.boot.js","url":"boot.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} {"name":"multitimer.img","url":"app-icon.js","evaluate":true}
], ],
"data": [{"name":"multitimer.json"}], "data": [{"name":"multitimer.json"}],

View File

@ -24,57 +24,45 @@ function showAlarm(alarm) {
Bangle.drawWidgets(); Bangle.drawWidgets();
let buzzCount = settings.buzzCount; let buzzCount = settings.buzzCount;
let showPrompt = true;
if (alarm.triggercheck) { E.showPrompt(message, {
try { title: alarm.timer ? /*LANG*/"TIMER!" : /*LANG*/"ALARM!",
const action = eval(alarm.triggercheck); buttons: { /*LANG*/"Snooze": true, /*LANG*/"Stop": false } // default is sleep so it'll come back in some mins
if (action === "skipPrompt") }).then(function (sleep) {
showPrompt = false; buzzCount = 0;
} 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;
if (sleep) { if (sleep) {
if (alarm.ot === undefined) { if (alarm.ot === undefined) {
alarm.ot = alarm.t; 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);
} }
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' // The updated alarm is still a member of 'alarms'
// so writing to array writes changes back directly // so writing to array writes changes back directly
require("sched").setAlarms(alarms); require("sched").setAlarms(alarms);
load(); load();
}); });
}
function buzz() { function buzz() {
if (settings.unlockAtBuzz) { if (settings.unlockAtBuzz) {