From a8116f3e4925404d71c70c9d27de807e80edb826 Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Sat, 11 Jun 2022 15:36:48 +0200 Subject: [PATCH] [Scheduler] Add "delete timer at expiration" option --- apps/sched/README.md | 1 + apps/sched/lib.js | 6 ++++-- apps/sched/sched.js | 28 +++++++++++++++++----------- apps/sched/settings.js | 16 ++++++++-------- 4 files changed, 30 insertions(+), 21 deletions(-) diff --git a/apps/sched/README.md b/apps/sched/README.md index 57acdc0b7..8a7d1fc21 100644 --- a/apps/sched/README.md +++ b/apps/sched/README.md @@ -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) diff --git a/apps/sched/lib.js b/apps/sched/lib.js index 5089ed46c..74018dcde 100644 --- a/apps/sched/lib.js +++ b/apps/sched/lib.js @@ -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: "::", diff --git a/apps/sched/sched.js b/apps/sched/sched.js index 5c1742c4f..b0fe21d91 100644 --- a/apps/sched/sched.js +++ b/apps/sched/sched.js @@ -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) { diff --git a/apps/sched/settings.js b/apps/sched/settings.js index b73cd41d1..83e4289f2 100644 --- a/apps/sched/settings.js +++ b/apps/sched/settings.js @@ -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,