[Scheduler] Add "delete timer at expiration" option

pull/1946/head
Alessandro Cocco 2022-06-11 15:36:48 +02:00
parent f5f1cc7523
commit a8116f3e49
4 changed files with 30 additions and 21 deletions

View File

@ -50,6 +50,7 @@ Alarms are stored in an array in `sched.json`, and take the form:
hidden : false, // OPTIONAL if false, the widget should not show an icon for this alarm
as : false, // auto snooze
timer : 5*60*1000, // OPTIONAL - if set, this is a timer and it's the time in ms
del : false, // OPTIONAL - if true, delete the timer after expiration
js : "load('myapp.js')" // OPTIONAL - a JS command to execute when the alarm activates (*instead* of loading 'sched.js')
// when this code is run, you're responsible for setting alarm.on=false (or removing the alarm)
data : { ... } // OPTIONAL - your app can store custom data in here if needed (don't store a lot of data here)

View File

@ -66,8 +66,9 @@ exports.newDefaultAlarm = function () {
var alarm = {
t: 12 * 3600000, // Default to 12:00
del: false, // Never delete an alarm when it expires
on: true,
rp: settings.defaultRepeat,
rp: false,
as: settings.defaultAutoSnooze,
dow: 0b1111111,
last: 0,
@ -84,6 +85,7 @@ exports.newDefaultTimer = function () {
var timer = {
timer: 5 * 60 * 1000, // 5 minutes
del: settings.defaultDeleteExpiredTimers,
on: true,
rp: false,
as: false,
@ -103,7 +105,7 @@ exports.getSettings = function () {
unlockAtBuzz: false,
defaultSnoozeMillis: 600000, // 10 minutes
defaultAutoSnooze: false,
defaultRepeat: false,
defaultDeleteExpiredTimers: true, // Always
buzzCount: 10,
buzzIntervalMillis: 3000, // 3 seconds
defaultAlarmPattern: "::",

View File

@ -6,6 +6,7 @@ if (Bangle.SCHED) {
}
function showAlarm(alarm) {
const alarmIndex = alarms.indexOf(alarm);
const settings = require("sched").getSettings();
let message = "";
@ -36,19 +37,25 @@ function showAlarm(alarm) {
}
alarm.t += settings.defaultSnoozeMillis;
} 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;
let del = alarm.del === undefined ? settings.defaultDeleteExpiredTimers : alarm.del;
if (del) {
alarms.splice(alarmIndex, 1);
} 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;
}
}
}
// alarm is still a member of 'alarms', so writing to array writes changes back directly
// The updated alarm is still a member of 'alarms'
// so writing to array writes changes back directly
require("sched").setAlarms(alarms);
load();
});
@ -75,7 +82,6 @@ function showAlarm(alarm) {
buzz();
}
// Check for alarms
let alarms = require("sched").getAlarms();
let active = require("sched").getActiveAlarms(alarms);
if (active.length) {

View File

@ -14,6 +14,14 @@
}
},
/*LANG*/"Delete Expired Timers": {
value: settings.defaultDeleteExpiredTimers,
onchange: v => {
settings.defaultDeleteExpiredTimers = v;
require("sched").setSettings(settings);
}
},
/*LANG*/"Default Auto Snooze": {
value: settings.defaultAutoSnooze,
onchange: v => {
@ -34,14 +42,6 @@
}
},
/*LANG*/"Default Repeat": {
value: settings.defaultRepeat,
onchange: v => {
settings.defaultRepeat = v;
require("sched").setSettings(settings);
}
},
/*LANG*/"Buzz Count": {
value: settings.buzzCount,
min: 5,