Skip to content

Commit

Permalink
multitimer: revert triggercheck, tailcall sched after hardmode alarms
Browse files Browse the repository at this point in the history
  • Loading branch information
bobrippling committed Jun 30, 2023
1 parent c930936 commit 8a8c8fb
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 63 deletions.
21 changes: 20 additions & 1 deletion apps/multitimer/ext.js → apps/multitimer/alarm.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// called by alarm.triggercheck
// called by getActiveAlarms(...)[0].js

function hardMode(tries, max) {
var R = Bangle.appRect;
Expand Down Expand Up @@ -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();
28 changes: 12 additions & 16 deletions apps/multitimer/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = v;
}

function drawTimers() {
layer = 0;
var timers = require("sched").getAlarms().filter(a => a.timer && a.appid == "multitimer");
Expand Down Expand Up @@ -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": {
Expand Down Expand Up @@ -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": {
Expand Down
2 changes: 1 addition & 1 deletion apps/multitimer/metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"}],
Expand Down
78 changes: 33 additions & 45 deletions apps/sched/sched.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
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 {
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;
}
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);
}
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) {
Expand Down

0 comments on commit 8a8c8fb

Please sign in to comment.