BangleApps/apps/alarm/app.js

112 lines
2.6 KiB
JavaScript
Raw Normal View History

2020-02-12 10:48:14 +00:00
Bangle.loadWidgets();
Bangle.drawWidgets();
var alarms = require("Storage").readJSON("alarm.json",1)||[];
2020-02-12 10:48:14 +00:00
/*alarms = [
{ on : true,
hr : 6.5, // hours + minutes/60
msg : "Eat chocolate",
last : 0, // last day of the month we alarmed on - so we don't alarm twice in one day!
rp : true, // repeat
2020-06-01 17:12:14 +00:00
as : true, // auto snooze
2020-02-12 10:48:14 +00:00
}
];*/
function formatTime(t) {
var hrs = 0|t;
2020-02-28 15:34:31 +00:00
var mins = Math.round((t-hrs)*60);
2020-02-12 10:48:14 +00:00
return hrs+":"+("0"+mins).substr(-2);
}
function getCurrentHr() {
var time = new Date();
return time.getHours()+(time.getMinutes()/60)+(time.getSeconds()/3600);
2020-02-12 10:48:14 +00:00
}
function showMainMenu() {
const menu = {
'': { 'title': 'Alarms' },
'New Alarm': ()=>editAlarm(-1)
};
alarms.forEach((alarm,idx)=>{
txt = (alarm.on?"on ":"off ")+formatTime(alarm.hr);
if (alarm.rp) txt += " (repeat)";
menu[txt] = function() {
editAlarm(idx);
};
});
menu['< Back'] = ()=>{load();};
return E.showMenu(menu);
}
function editAlarm(alarmIndex) {
var newAlarm = alarmIndex<0;
var hrs = 12;
var mins = 0;
var en = true;
var repeat = true;
if (!newAlarm) {
var a = alarms[alarmIndex];
hrs = 0|a.hr;
2020-02-28 15:34:31 +00:00
mins = Math.round((a.hr-hrs)*60);
2020-02-12 10:48:14 +00:00
en = a.on;
repeat = a.rp;
2020-06-01 17:12:14 +00:00
as = a.as;
2020-02-12 10:48:14 +00:00
}
const menu = {
'': { 'title': 'Alarms' },
'Hours': {
value: hrs,
2020-02-28 15:34:31 +00:00
onchange: function(v){if (v<0)v=23;if (v>23)v=0;hrs=v;this.value=v;} // no arrow fn -> preserve 'this'
2020-02-12 10:48:14 +00:00
},
'Minutes': {
value: mins,
2020-02-28 15:34:31 +00:00
onchange: function(v){if (v<0)v=59;if (v>59)v=0;mins=v;this.value=v;} // no arrow fn -> preserve 'this'
2020-02-12 10:48:14 +00:00
},
'Enabled': {
value: en,
format: v=>v?"On":"Off",
onchange: v=>en=v
},
'Repeat': {
value: en,
format: v=>v?"Yes":"No",
onchange: v=>repeat=v
2020-06-01 17:12:14 +00:00
},
'Auto snooze': {
value: en,
format: v=>v?"Yes":"No",
onchange: v=>as=v
2020-02-12 10:48:14 +00:00
}
};
function getAlarm() {
var hr = hrs+(mins/60);
var day = 0;
2020-02-28 15:34:31 +00:00
// If alarm is for tomorrow not today (eg, in the past), set day
if (hr < getCurrentHr())
2020-02-12 10:48:14 +00:00
day = (new Date()).getDate();
// Save alarm
return {
on : en, hr : hr,
2020-06-01 17:12:14 +00:00
last : day, rp : repeat, as: as
2020-02-12 10:48:14 +00:00
};
}
menu["> Save"] = function() {
if (newAlarm) alarms.push(getAlarm());
else alarms[alarmIndex] = getAlarm();
require("Storage").write("alarm.json",JSON.stringify(alarms));
showMainMenu();
};
if (!newAlarm) {
menu["> Delete"] = function() {
alarms.splice(alarmIndex,1);
require("Storage").write("alarm.json",JSON.stringify(alarms));
2020-02-12 10:48:14 +00:00
showMainMenu();
};
}
menu['< Back'] = showMainMenu;
return E.showMenu(menu);
}
2020-02-28 15:34:31 +00:00
showMainMenu();