add quiet time and intervals

master
Weiming 2021-03-29 16:59:00 -04:00
parent 4574726f5d
commit 314ea623a7
6 changed files with 50 additions and 51 deletions

View File

@ -3065,13 +3065,14 @@
"name": "Hour Strike",
"shortName": "Hour Strike",
"icon": "app-icon.png",
"version": "0.01",
"version": "0.02",
"description": "Strike the clock on the hour. A great tool to remind you an hour has passed!",
"tags": "tool,alarm",
"readme": "README.md",
"storage": [
{"name":"hourstrike.app.js","url":"app.js"},
{"name":"hourstrike.boot.js","url":"boot.js"},
{"name":"hourstrike.js","url":"hourstrike.js"},
{"name":"hourstrike.img","url":"app-icon.js","evaluate":true}
]
}

View File

@ -1 +1,2 @@
0.01: New App!
0.01: New App
0.02: Add different strike intervals and support for quiet time

View File

@ -10,12 +10,12 @@ This app is slightly different from [Hour Chime](https://github.com/espruino/Ban
## Features
- Strikes the hour or the half hour
- Set up a quiet time
- Strike the hour, the half hour, or the quarter hour
- Set up a range of hours that clock will strike
## Known Issues
1. This app does not know or check whether your clock already chimes on the hour.
- This app does not know or check whether your clock already chimes on the hour.
## Creator

View File

@ -7,10 +7,9 @@ function updateSettings() {
function resetSettings() {
settings = {
on_hour: true,
on_half_hour: true,
start_hour: 9,
end_hour: 21,
interval: 3600,
start: 9,
end: 21,
};
updateSettings();
}
@ -19,28 +18,22 @@ settings = storage.readJSON('hourstrike.json', 1);
if (!settings) resetSettings();
function showMainMenu() {
var mode = ['off', 'v', 'b', 'vb', 'bv'];
var mode_txt = ['Off', 'Hour', 'Half', 'Quarter'];
var mode_interval = [-1, 3600, 1800, 900];
const mainmenu = {
'': { 'title': 'Time Passed' },
'On hour': {
value: settings.on_hour,
format: v => v?"ON":"OFF",
'': { 'title': 'Hour Strike' },
'Mode': {
value: mode_interval.indexOf(settings.mode),
format: v => mode_txt[v],
onchange: v => {
settings.on_hour = v;
settings.interval = mode_interval[v];
updateSettings();
}
},
'On half hour': {
value: settings.on_half_hour,
format: v => v?"ON":"OFF",
onchange: v => {
settings.on_half_hour = v;
updateSettings();
}
},
'Start hour': {
'Start': {
value: settings.start_hour,
min: 0, max: 23,
format: v => v+':00',
onchange: v=> {
settings.start_hour = v;
updateSettings();
@ -49,6 +42,7 @@ function showMainMenu() {
'End hour': {
value: settings.end_hour,
min: 0, max: 23,
format: v => v+':59',
onchange: v=> {
settings.end_hour = v;
updateSettings();
@ -59,4 +53,4 @@ function showMainMenu() {
return E.showMenu(mainmenu);
}
showMainMenu();
showMainMenu();

View File

@ -1,29 +1,7 @@
(function() {
var setting = require('Storage').readJSON('hourstrike.json',1)||[];
var notify_on = [];
if (setting.on_hour || setting.on_harlf_hour) {
var cur = new Date();
var cur_hour = cur.getHours(), cur_sec = cur.getMinutes()*60+cur.getSeconds();
var notify_on = [1800, 3600];
var notify_func = function() {
Bangle.buzz(200, 0.5)
.then(() => new Promise(resolve => setTimeout(resolve,200)))
.then(() => Bangle.buzz(200, 0.5));
};
var wait_sec = -1, notify_hour = cur_hour;
if (cur_sec<notify_on[0]) {
wait_sec = notify_on[0]-cur_sec;
} else if (cur_sec<notify_on[1]) {
wait_sec = notify_on[1]-cur_sec;
notify_hour += 1;
}
if (wait_sec>0) {
if (setting.start_hour<=notify_hour&&notify_hour<=setting.end_hour) {
setTimeout(notify_func, wait_sec*1000);
setTimeout(load, wait_sec*1000 + 800);
} else {
setTimeout(load, t*1000 + 800);
}
}
var cur = new Date();
var cur_sec = cur.getMinutes()*60+cur.getSeconds();
var notify_sec = setting.interval>0?setting.interval-setting.interval%cur_sec:-1;
if (notify_sec>0) setTimeout(load('hourstrike.js'), notify_sec*1000);
})();

View File

@ -0,0 +1,25 @@
clearInterval();
var setting = require('Storage').readJSON('hourstrike.json',1)||[];
var cur = new Date();
var cur_hour = cur.getHours();
var cur_min = cur.getMinutes();
var cur_sec = cur.getSeconds();
var wait_sec;
if (cur_hour<setting.start) {
wait_sec = ((setting.start-1-cur_hour)*60+59-cur_min)*60+60-cur_sec;
} else if (cur_hour>setting.end) {
wait_sec = ((23-cur_hour+setting.start)*60+59-cur_min)*60+60-cur_sec;
} else {
wait_sec = 0;
}
var notify_func = function () {
Bangle.buzz(200, 0.5)
.then(() => new Promise(resolve => setTimeout(resolve,200)))
.then(() => Bangle.buzz(200, 0.5));
};
setTimeout(notify_func, wait_sec*1000);
setTimeout(load, wait_sec*1000+800);