Merge pull request #1946 from alessandrococco/sched-patch
[Scheduler] Delete a timer after expirationmaster
commit
eaba9148b1
|
|
@ -31,3 +31,4 @@
|
|||
0.29: Fix wrong 'dow' handling in new timer if first day of week is Monday
|
||||
0.30: Fix "Enable All"
|
||||
0.31: Add seconds to timers
|
||||
0.32: Add option for auto-delete a timer after it expires
|
||||
|
|
|
|||
|
|
@ -280,6 +280,10 @@ function showEditTimerMenu(selectedTimer, timerIndex) {
|
|||
value: timer.on,
|
||||
onchange: v => timer.on = v
|
||||
},
|
||||
/*LANG*/"Delete After Expiration": {
|
||||
value: timer.del,
|
||||
onchange: v => timer.del = v
|
||||
},
|
||||
/*LANG*/"Vibrate": require("buzz_menu").pattern(timer.vibrate, v => timer.vibrate = v),
|
||||
/*LANG*/"Cancel": () => showMainMenu()
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"id": "alarm",
|
||||
"name": "Alarms & Timers",
|
||||
"shortName": "Alarms",
|
||||
"version": "0.31",
|
||||
"version": "0.32",
|
||||
"description": "Set alarms and timers on your Bangle",
|
||||
"icon": "app.png",
|
||||
"tags": "tool,alarm,widget",
|
||||
|
|
|
|||
|
|
@ -13,3 +13,4 @@
|
|||
0.12: Update default buzz patterns to new values
|
||||
Improve timer message using formatDuration
|
||||
Fix wrong fallback for buzz pattern
|
||||
0.13: Ask to delete a timer after stopping it
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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: "::",
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "sched",
|
||||
"name": "Scheduler",
|
||||
"version": "0.12",
|
||||
"version": "0.13",
|
||||
"description": "Scheduling library for alarms and timers",
|
||||
"icon": "app.png",
|
||||
"type": "scheduler",
|
||||
|
|
|
|||
|
|
@ -6,17 +6,18 @@ if (Bangle.SCHED) {
|
|||
}
|
||||
|
||||
function showAlarm(alarm) {
|
||||
const alarmIndex = alarms.indexOf(alarm);
|
||||
const settings = require("sched").getSettings();
|
||||
|
||||
let msg = "";
|
||||
msg += alarm.timer ? require("time_utils").formatDuration(alarm.timer) : require("time_utils").formatTime(alarm.t);
|
||||
let message = "";
|
||||
message += alarm.timer ? require("time_utils").formatDuration(alarm.timer) : require("time_utils").formatTime(alarm.t);
|
||||
if (alarm.msg) {
|
||||
msg += "\n"+alarm.msg;
|
||||
message += "\n" + alarm.msg;
|
||||
} else {
|
||||
if (alarm.timer)
|
||||
msg = atob("ACQswgD//33vRcGHIQAAABVVVAAAAAAAABVVVAAAAAAAABVVVAAAAAAAABVVVAAAAAAAABVVVAAAAAAAABVVVAAAAAAAAAP/wAAAAAAAAAP/wAAAAAAAAAqqoAPAAAAAAqqqqoP8AAAAKqqqqqv/AAACqqqqqqq/wAAKqqqlWqqvwAAqqqqlVaqrAACqqqqlVVqqAAKqqqqlVVaqgAKqaqqlVVWqgAqpWqqlVVVqoAqlWqqlVVVaoCqlV6qlVVVaqCqVVfqlVVVWqCqVVf6lVVVWqKpVVX/lVVVVqqpVVV/+VVVVqqpVVV//lVVVqqpVVVfr1VVVqqpVVVfr1VVVqqpVVVb/lVVVqqpVVVW+VVVVqqpVVVVVVVVVqiqVVVVVVVVWqCqVVVVVVVVWqCqlVVVVVVVaqAqlVVVVVVVaoAqpVVVVVVVqoAKqVVVVVVWqgAKqlVVVVVaqgACqpVVVVVqqAAAqqlVVVaqoAAAKqqVVWqqgAAACqqqqqqqAAAAAKqqqqqgAAAAAAqqqqoAAAAAAAAqqoAAAAA==")+" "+msg;
|
||||
else
|
||||
msg = atob("AC0swgF97///RcEpMlVVVVVVf9VVVVVVVVX/9VVf9VVf/1VVV///1Vf9VX///VVX///VWqqlV///1Vf//9aqqqqpf//9V///2qqqqqqn///V///6qqqqqqr///X//+qqoAAKqqv//3//6qoAAAAKqr//3//qqAAAAAAqq//3/+qoAADwAAKqv/3/+qgAADwAACqv/3/aqAAADwAAAqp/19qoAAADwAAAKqfV1qgAAADwAAACqXVWqgAAADwAAACqlVWqAAAADwAAAAqlVWqAAAADwAAAAqlVWqAAAADwAAAAqlVaoAAAADwAAAAKpVaoAAAADwAAAAKpVaoAAAADwAAAAKpVaoAAAAOsAAAAKpVaoAAAAOsAAAAKpVaoAAAAL/AAAAKpVaoAAAAgPwAAAKpVaoAAACAD8AAAKpVWqAAAIAA/AAAqlVWqAAAgAAPwAAqlVWqAACAAADwAAqlVWqgAIAAAAAACqlVVqgAgAAAAAACqVVVqoAAAAAAAAKqVVVaqAAAAAAAAqpVVVWqgAAAAAACqlVVVWqoAAAAAAKqlVVVVqqAAAAAAqqVVVVVaqoAAAAKqpVVVVVeqqoAAKqqtVVVVV/6qqqqqqr/VVVVX/2qqqqqqn/1VVVf/VaqqqqpV/9VVVf9VVWqqlVVf9VVVf1VVVVVVVVX9VQ==")+" "+msg;
|
||||
message = (alarm.timer
|
||||
? atob("ACQswgD//33vRcGHIQAAABVVVAAAAAAAABVVVAAAAAAAABVVVAAAAAAAABVVVAAAAAAAABVVVAAAAAAAABVVVAAAAAAAAAP/wAAAAAAAAAP/wAAAAAAAAAqqoAPAAAAAAqqqqoP8AAAAKqqqqqv/AAACqqqqqqq/wAAKqqqlWqqvwAAqqqqlVaqrAACqqqqlVVqqAAKqqqqlVVaqgAKqaqqlVVWqgAqpWqqlVVVqoAqlWqqlVVVaoCqlV6qlVVVaqCqVVfqlVVVWqCqVVf6lVVVWqKpVVX/lVVVVqqpVVV/+VVVVqqpVVV//lVVVqqpVVVfr1VVVqqpVVVfr1VVVqqpVVVb/lVVVqqpVVVW+VVVVqqpVVVVVVVVVqiqVVVVVVVVWqCqVVVVVVVVWqCqlVVVVVVVaqAqlVVVVVVVaoAqpVVVVVVVqoAKqVVVVVVWqgAKqlVVVVVaqgACqpVVVVVqqAAAqqlVVVaqoAAAKqqVVWqqgAAACqqqqqqqAAAAAKqqqqqgAAAAAAqqqqoAAAAAAAAqqoAAAAA==")
|
||||
: atob("AC0swgF97///RcEpMlVVVVVVf9VVVVVVVVX/9VVf9VVf/1VVV///1Vf9VX///VVX///VWqqlV///1Vf//9aqqqqpf//9V///2qqqqqqn///V///6qqqqqqr///X//+qqoAAKqqv//3//6qoAAAAKqr//3//qqAAAAAAqq//3/+qoAADwAAKqv/3/+qgAADwAACqv/3/aqAAADwAAAqp/19qoAAADwAAAKqfV1qgAAADwAAACqXVWqgAAADwAAACqlVWqAAAADwAAAAqlVWqAAAADwAAAAqlVWqAAAADwAAAAqlVaoAAAADwAAAAKpVaoAAAADwAAAAKpVaoAAAADwAAAAKpVaoAAAAOsAAAAKpVaoAAAAOsAAAAKpVaoAAAAL/AAAAKpVaoAAAAgPwAAAKpVaoAAACAD8AAAKpVWqAAAIAA/AAAqlVWqAAAgAAPwAAqlVWqAACAAADwAAqlVWqgAIAAAAAACqlVVqgAgAAAAAACqVVVqoAAAAAAAAKqVVVaqAAAAAAAAqpVVVWqgAAAAAACqlVVVWqoAAAAAAKqlVVVVqqAAAAAAqqVVVVVaqoAAAAKqpVVVVVeqqoAAKqqtVVVVV/6qqqqqqr/VVVVX/2qqqqqqn/1VVVf/VaqqqqpV/9VVVf9VVWqqlVVf9VVVf1VVVVVVVVX9VQ==")
|
||||
) + " " + message
|
||||
}
|
||||
|
||||
Bangle.loadWidgets();
|
||||
|
|
@ -24,23 +25,37 @@ function showAlarm(alarm) {
|
|||
|
||||
let buzzCount = settings.buzzCount;
|
||||
|
||||
E.showPrompt(msg,{
|
||||
title:alarm.timer ? /*LANG*/"TIMER!" : /*LANG*/"ALARM!",
|
||||
buttons : {/*LANG*/"Snooze":true,/*LANG*/"Stop":false} // default is sleep so it'll come back in 10 mins
|
||||
}).then(function(sleep) {
|
||||
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;
|
||||
if (alarm.ot === undefined) {
|
||||
alarm.ot = alarm.t;
|
||||
}
|
||||
alarm.t += settings.defaultSnoozeMillis;
|
||||
} else {
|
||||
if (!alarm.timer) alarm.last = (new Date()).getDate();
|
||||
if (alarm.ot!==undefined) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
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();
|
||||
});
|
||||
|
|
@ -67,7 +82,6 @@ function showAlarm(alarm) {
|
|||
buzz();
|
||||
}
|
||||
|
||||
// Check for alarms
|
||||
let alarms = require("sched").getAlarms();
|
||||
let active = require("sched").getActiveAlarms(alarms);
|
||||
if (active.length) {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue