forked from FOSS/BangleApps
Merge branch 'espruino:master' into sleeplog_v0.10_beta
commit
b571accc65
|
@ -27,3 +27,4 @@
|
||||||
0.25: Fix redrawing selected Alarm/Timer entry inside edit submenu
|
0.25: Fix redrawing selected Alarm/Timer entry inside edit submenu
|
||||||
0.26: Add support for Monday as first day of the week (#1780)
|
0.26: Add support for Monday as first day of the week (#1780)
|
||||||
0.27: New UI!
|
0.27: New UI!
|
||||||
|
0.28: Fix bug with alarms not firing when configured to fire only once
|
||||||
|
|
|
@ -50,7 +50,7 @@ function showMainMenu() {
|
||||||
alarms.forEach((e, index) => {
|
alarms.forEach((e, index) => {
|
||||||
var label = e.timer
|
var label = e.timer
|
||||||
? require("time_utils").formatDuration(e.timer)
|
? require("time_utils").formatDuration(e.timer)
|
||||||
: require("time_utils").formatTime(e.t) + (e.dow > 0 ? (" " + decodeDOW(e)) : "");
|
: require("time_utils").formatTime(e.t) + (e.rp ? ` ${decodeDOW(e)}` : "");
|
||||||
menu[label] = {
|
menu[label] = {
|
||||||
value: e.on ? (e.timer ? iconTimerOn : iconAlarmOn) : (e.timer ? iconTimerOff : iconAlarmOff),
|
value: e.on ? (e.timer ? iconTimerOn : iconAlarmOn) : (e.timer ? iconTimerOff : iconAlarmOff),
|
||||||
onchange: () => setTimeout(e.timer ? showEditTimerMenu : showEditAlarmMenu, 10, e, index)
|
onchange: () => setTimeout(e.timer ? showEditTimerMenu : showEditAlarmMenu, 10, e, index)
|
||||||
|
@ -111,8 +111,8 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex) {
|
||||||
},
|
},
|
||||||
/*LANG*/"Repeat": {
|
/*LANG*/"Repeat": {
|
||||||
value: decodeDOW(alarm),
|
value: decodeDOW(alarm),
|
||||||
onchange: () => setTimeout(showEditRepeatMenu, 100, alarm.dow, dow => {
|
onchange: () => setTimeout(showEditRepeatMenu, 100, alarm.rp, alarm.dow, (repeat, dow) => {
|
||||||
alarm.rp = dow > 0;
|
alarm.rp = repeat;
|
||||||
alarm.dow = dow;
|
alarm.dow = dow;
|
||||||
alarm.t = require("time_utils").encodeTime(time);
|
alarm.t = require("time_utils").encodeTime(time);
|
||||||
setTimeout(showEditAlarmMenu, 10, alarm, alarmIndex);
|
setTimeout(showEditAlarmMenu, 10, alarm, alarmIndex);
|
||||||
|
@ -178,42 +178,46 @@ function decodeDOW(alarm) {
|
||||||
: "Once"
|
: "Once"
|
||||||
}
|
}
|
||||||
|
|
||||||
function showEditRepeatMenu(dow, dowChangeCallback) {
|
function showEditRepeatMenu(repeat, dow, dowChangeCallback) {
|
||||||
|
var originalRepeat = repeat;
|
||||||
var originalDow = dow;
|
var originalDow = dow;
|
||||||
var isCustom = dow > 0 && dow != WORKDAYS && dow != WEEKEND && dow != EVERY_DAY;
|
var isCustom = repeat && dow != WORKDAYS && dow != WEEKEND && dow != EVERY_DAY;
|
||||||
|
|
||||||
const menu = {
|
const menu = {
|
||||||
"": { "title": /*LANG*/"Repeat Alarm" },
|
"": { "title": /*LANG*/"Repeat Alarm" },
|
||||||
"< Back": () => dowChangeCallback(dow),
|
"< Back": () => dowChangeCallback(repeat, dow),
|
||||||
/*LANG*/"Once": { // No days set: the alarm will fire once
|
/*LANG*/"Once": {
|
||||||
value: dow == 0,
|
// The alarm will fire once. Internally it will be saved
|
||||||
onchange: () => dowChangeCallback(0)
|
// as "fire every days" BUT the repeat flag is false so
|
||||||
|
// we avoid messing up with the scheduler.
|
||||||
|
value: !repeat,
|
||||||
|
onchange: () => dowChangeCallback(false, EVERY_DAY)
|
||||||
},
|
},
|
||||||
/*LANG*/"Workdays": {
|
/*LANG*/"Workdays": {
|
||||||
value: dow == WORKDAYS,
|
value: repeat && dow == WORKDAYS,
|
||||||
onchange: () => dowChangeCallback(WORKDAYS)
|
onchange: () => dowChangeCallback(true, WORKDAYS)
|
||||||
},
|
},
|
||||||
/*LANG*/"Weekends": {
|
/*LANG*/"Weekends": {
|
||||||
value: dow == WEEKEND,
|
value: repeat && dow == WEEKEND,
|
||||||
onchange: () => dowChangeCallback(WEEKEND)
|
onchange: () => dowChangeCallback(true, WEEKEND)
|
||||||
},
|
},
|
||||||
/*LANG*/"Every Day": {
|
/*LANG*/"Every Day": {
|
||||||
value: dow == EVERY_DAY,
|
value: repeat && dow == EVERY_DAY,
|
||||||
onchange: () => dowChangeCallback(EVERY_DAY)
|
onchange: () => dowChangeCallback(true, EVERY_DAY)
|
||||||
},
|
},
|
||||||
/*LANG*/"Custom": {
|
/*LANG*/"Custom": {
|
||||||
value: isCustom ? decodeDOW({ rp: true, dow: dow }) : false,
|
value: isCustom ? decodeDOW({ rp: true, dow: dow }) : false,
|
||||||
onchange: () => setTimeout(showCustomDaysMenu, 10, isCustom ? dow : EVERY_DAY, dowChangeCallback, originalDow)
|
onchange: () => setTimeout(showCustomDaysMenu, 10, isCustom ? dow : EVERY_DAY, dowChangeCallback, originalRepeat, originalDow)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
E.showMenu(menu);
|
E.showMenu(menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
function showCustomDaysMenu(dow, dowChangeCallback, originalDow) {
|
function showCustomDaysMenu(dow, dowChangeCallback, originalRepeat, originalDow) {
|
||||||
const menu = {
|
const menu = {
|
||||||
"": { "title": /*LANG*/"Custom Days" },
|
"": { "title": /*LANG*/"Custom Days" },
|
||||||
"< Back": () => dowChangeCallback(dow),
|
"< Back": () => dowChangeCallback(true, dow),
|
||||||
};
|
};
|
||||||
|
|
||||||
require("date_utils").dows(firstDayOfWeek).forEach((day, i) => {
|
require("date_utils").dows(firstDayOfWeek).forEach((day, i) => {
|
||||||
|
@ -223,7 +227,7 @@ function showCustomDaysMenu(dow, dowChangeCallback, originalDow) {
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
menu[/*LANG*/"Cancel"] = () => setTimeout(showEditRepeatMenu, 10, originalDow, dowChangeCallback)
|
menu[/*LANG*/"Cancel"] = () => setTimeout(showEditRepeatMenu, 10, originalRepeat, originalDow, dowChangeCallback)
|
||||||
|
|
||||||
E.showMenu(menu);
|
E.showMenu(menu);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"id": "alarm",
|
"id": "alarm",
|
||||||
"name": "Alarms & Timers",
|
"name": "Alarms & Timers",
|
||||||
"shortName": "Alarms",
|
"shortName": "Alarms",
|
||||||
"version": "0.27",
|
"version": "0.28",
|
||||||
"description": "Set alarms and timers on your Bangle",
|
"description": "Set alarms and timers on your Bangle",
|
||||||
"icon": "app.png",
|
"icon": "app.png",
|
||||||
"tags": "tool,alarm,widget",
|
"tags": "tool,alarm,widget",
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
0.01: New face :)
|
0.01: New face :)
|
||||||
|
0.02: Color image compressed
|
||||||
|
|
|
@ -1,7 +1,17 @@
|
||||||
# About this Watchface
|
# Poketch Clock
|
||||||
|
|
||||||
Based on the electronic device from the Pokemon game.
|
A clock based on the Poketch electronic device found in Sinnoh
|
||||||
|
|
||||||
# Features
|

|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
Has a dark mode
|
Has a dark mode
|
||||||
|
|
||||||
|
## Requests
|
||||||
|
|
||||||
|
If you have any issues or would like to suggest a feature, click here to send a message -> [here](https://github.com/elykittytee/BangleApps/issues/new?title=Poketch%20Clock%20Bug).
|
||||||
|
|
||||||
|
## Creator
|
||||||
|
|
||||||
|
Eleanor Tayam
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -2,7 +2,7 @@
|
||||||
"id": "pokeclk",
|
"id": "pokeclk",
|
||||||
"name": "Poketch Clock",
|
"name": "Poketch Clock",
|
||||||
"shortName":"Poketch Clock",
|
"shortName":"Poketch Clock",
|
||||||
"version": "0.01",
|
"version": "0.02",
|
||||||
"description": "A clock based on the Poketch electronic device found in Sinnoh",
|
"description": "A clock based on the Poketch electronic device found in Sinnoh",
|
||||||
"icon": "app.png",
|
"icon": "app.png",
|
||||||
"type": "clock",
|
"type": "clock",
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 2.3 KiB |
|
@ -6,6 +6,7 @@
|
||||||
0.06: Refactor some methods to library
|
0.06: Refactor some methods to library
|
||||||
0.07: Update settings
|
0.07: Update settings
|
||||||
Correct `decodeTime(t)` to return a more likely expected time
|
Correct `decodeTime(t)` to return a more likely expected time
|
||||||
0.08: add day of week check to getActiveAlarms()
|
0.08: Add day of week check to getActiveAlarms()
|
||||||
0.09: Move some functions to new time_utils module
|
0.09: Move some functions to new time_utils module
|
||||||
0.10: Default to sched.js if custom js not found
|
0.10: Default to sched.js if custom js not found
|
||||||
|
0.11: Fix default dow
|
||||||
|
|
|
@ -8,12 +8,12 @@
|
||||||
var time = new Date();
|
var time = new Date();
|
||||||
var currentTime = (time.getHours()*3600000)+(time.getMinutes()*60000)+(time.getSeconds()*1000);
|
var currentTime = (time.getHours()*3600000)+(time.getMinutes()*60000)+(time.getSeconds()*1000);
|
||||||
var d = time.getDate();
|
var d = time.getDate();
|
||||||
var active = alarms.filter(
|
var active = alarms.filter(a =>
|
||||||
a=>a.on && // enabled
|
a.on // enabled
|
||||||
a.last!=d && // not already fired today
|
&& (a.last != d) // not already fired today
|
||||||
a.t+60000>currentTime && // is not in the past by >1 minute
|
&& (a.t + 60000 > currentTime) // is not in the past by >1 minute
|
||||||
(a.dow>>time.getDay())&1 && // is allowed on this day of the week
|
&& (a.dow >> time.getDay() & 1) // is allowed on this day of the week
|
||||||
(!a.date || a.date==time.toISOString().substr(0,10)) // is allowed on this date
|
&& (!a.date || a.date == time.toISOString().substr(0, 10)) // is allowed on this date
|
||||||
);
|
);
|
||||||
if (active.length) {
|
if (active.length) {
|
||||||
active = active.sort((a,b)=>a.t-b.t); // sort by time
|
active = active.sort((a,b)=>a.t-b.t); // sort by time
|
||||||
|
|
|
@ -11,16 +11,19 @@ exports.getAlarm = function(id) {
|
||||||
return exports.getAlarms().find(a=>a.id==id);
|
return exports.getAlarms().find(a=>a.id==id);
|
||||||
};
|
};
|
||||||
// Given a list of alarms from getAlarms, return a list of active alarms for the given time (or current time if time not specified)
|
// Given a list of alarms from getAlarms, return a list of active alarms for the given time (or current time if time not specified)
|
||||||
exports.getActiveAlarms = function(alarms, time) {
|
exports.getActiveAlarms = function (alarms, time) {
|
||||||
if (!time) time = new Date();
|
if (!time) time = new Date();
|
||||||
var currentTime = (time.getHours()*3600000)+(time.getMinutes()*60000)+(time.getSeconds()*1000)
|
// get current time 10s in future to ensure we alarm if we've started the app a tad early
|
||||||
+10000;// get current time - 10s in future to ensure we alarm if we've started the app a tad early
|
var currentTime = (time.getHours() * 3600000) + (time.getMinutes() * 60000) + (time.getSeconds() * 1000) + 10000;
|
||||||
return alarms.filter(a=>a.on
|
return alarms
|
||||||
&&(a.t<currentTime)
|
.filter(a =>
|
||||||
&&(a.last!=time.getDate())
|
a.on // enabled
|
||||||
&& (!a.date || a.date==time.toISOString().substr(0,10))
|
&& (a.last != time.getDate()) // not already fired today
|
||||||
&& a.dow >> (time).getDay() & 1)
|
&& (a.t < currentTime)
|
||||||
.sort((a,b)=>a.t-b.t);
|
&& (a.dow >> time.getDay() & 1) // is allowed on this day of the week
|
||||||
|
&& (!a.date || a.date == time.toISOString().substr(0, 10)) // is allowed on this date
|
||||||
|
)
|
||||||
|
.sort((a, b) => a.t - b.t);
|
||||||
}
|
}
|
||||||
// Set an alarm object based on ID. Leave 'alarm' undefined to remove it
|
// Set an alarm object based on ID. Leave 'alarm' undefined to remove it
|
||||||
exports.setAlarm = function(id, alarm) {
|
exports.setAlarm = function(id, alarm) {
|
||||||
|
@ -66,7 +69,7 @@ exports.newDefaultAlarm = function () {
|
||||||
on: true,
|
on: true,
|
||||||
rp: settings.defaultRepeat,
|
rp: settings.defaultRepeat,
|
||||||
as: settings.defaultAutoSnooze,
|
as: settings.defaultAutoSnooze,
|
||||||
dow: settings.defaultRepeat ? 0b1111111 : 0b0000000,
|
dow: 0b1111111,
|
||||||
last: 0,
|
last: 0,
|
||||||
vibrate: settings.defaultAlarmPattern,
|
vibrate: settings.defaultAlarmPattern,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id": "sched",
|
"id": "sched",
|
||||||
"name": "Scheduler",
|
"name": "Scheduler",
|
||||||
"version": "0.10",
|
"version": "0.11",
|
||||||
"description": "Scheduling library for alarms and timers",
|
"description": "Scheduling library for alarms and timers",
|
||||||
"icon": "app.png",
|
"icon": "app.png",
|
||||||
"type": "scheduler",
|
"type": "scheduler",
|
||||||
|
|
Loading…
Reference in New Issue