Skip to content

Commit d787107

Browse files
authored
Merge pull request #4082 from kidneyhex/multitimer-fix
[multitimer] Fixes #3693; Adds support for 12h alarm display
2 parents 7b7c7da + d4f0d45 commit d787107

File tree

3 files changed

+37
-8
lines changed

3 files changed

+37
-8
lines changed

apps/multitimer/ChangeLog

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@
1111
0.10: Handle missing alarm data, e.g. when our reset is fired from
1212
non-multitimer alarms
1313
0.11: Preserve setUI removal callbacks, e.g. those of showMenu
14+
0.12: Fix displaying timers that go to next day; add 12h locale support

apps/multitimer/app.js

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Bangle.loadWidgets();
33
Bangle.drawWidgets();
44

55
const R = Bangle.appRect;
6+
const MS_PER_DAY = 86400000;
67
let layer;
78
let drag;
89
let timerInt1 = [];
@@ -17,6 +18,30 @@ function getCurrentTime() {
1718
);
1819
}
1920

21+
function getTimeRemaining(alarm) {
22+
let rem = require('sched').getTimeToAlarm(alarm);
23+
if (rem === undefined) {
24+
// fallback: compute time difference
25+
const now = getCurrentTime();
26+
if (alarm.t >= now) {
27+
rem = alarm.t - now;
28+
} else {
29+
rem = MS_PER_DAY - (now - alarm.t);
30+
}
31+
}
32+
return rem;
33+
}
34+
35+
function formatAlarmTime(t) {
36+
// t is milliseconds since local midnight
37+
const dt = decodeTime(t);
38+
// Use locale.time so formatting respects 12h/24h user settings
39+
const d = new Date(1999, 1, 1, dt.hrs, dt.mins, 0);
40+
const timeStr = require("locale").time(d, 1);
41+
const mer = require("locale").meridian(d);
42+
return timeStr + mer;
43+
}
44+
2045
function decodeTime(t) {
2146
let hrs = 0 | Math.floor(t / 3600000);
2247
let mins = 0 | Math.floor(t / 60000 % 60);
@@ -100,7 +125,7 @@ function drawTimers() {
100125
}
101126
else if (idx > 0 && idx < timers.length+1) {
102127
if (timers[idx-1].on == true) {
103-
drawMenuItem(formatTime(timers[idx-1].t-getCurrentTime()));
128+
drawMenuItem(formatTime(getTimeRemaining(timers[idx-1])));
104129
updateTimers(idx-1);
105130
}
106131
else drawMenuItem(formatTime(timers[idx-1].timer));
@@ -156,7 +181,7 @@ function timerMenu(idx) {
156181
let msg = "";
157182
if (a.msg) msg = "\n"+(a.msg.length > 10 ? a.msg.substring(0, 10)+"..." : a.msg);
158183
if (a.on == true) {
159-
drawMenuItem(formatTime(a.t-getCurrentTime())+msg);
184+
drawMenuItem(formatTime(getTimeRemaining(a))+msg);
160185
updateTimer();
161186
}
162187
else {
@@ -184,7 +209,7 @@ function timerMenu(idx) {
184209
if (i == 1) {
185210
if (a.on == true) {
186211
clearInt();
187-
a.timer = a.t-getCurrentTime();
212+
a.timer = getTimeRemaining(a);
188213
a.on = false;
189214
timers[timerIdx[idx]] = a;
190215
saveAndReload();
@@ -546,8 +571,7 @@ function drawAlarms() {
546571
.setColor(g.theme.fg).setFont("6x8:2").setFontAlign(0,0).drawString("< Swipe >",r.x+(r.w/2),r.y+(r.h/2));
547572
}
548573
else if (idx > 0 && idx < alarms.length+1){
549-
const str = formatTime(alarms[idx-1].t);
550-
drawMenuItem(str.slice(0, -3));
574+
drawMenuItem(formatAlarmTime(alarms[idx-1].t));
551575
}
552576
},
553577
select : (idx) => {
@@ -631,6 +655,11 @@ function editAlarm(idx, a) {
631655
},
632656
"Hours": {
633657
value: t.hrs, min: 0, max: 23, wrap: true,
658+
format: v => {
659+
// Show 12h or 24h based on locale settings
660+
const mer = require("locale").meridian(new Date(1999,1,1,v,0,0));
661+
return mer ? (v%12||12) + mer : v;
662+
},
634663
onchange: v => {
635664
t.hrs = v;
636665
a.t = encodeTime(t);
@@ -694,8 +723,7 @@ function setUI() {
694723
const origRemove = Bangle.uiRemove;
695724
Bangle.uiRemove = () => {
696725
Bangle.removeListener("drag", onDrag);
697-
Object.values(timerInt1).forEach(clearTimeout);
698-
Object.values(timerInt2).forEach(clearTimeout);
726+
clearInt();
699727
if (origRemove) origRemove();
700728
};
701729
}

apps/multitimer/metadata.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "multitimer",
33
"name": "Multi Timer",
4-
"version": "0.11",
4+
"version": "0.12",
55
"description": "Set timers and chronographs (stopwatches) and watch them count down in real time. Pause, create, edit, and delete timers and chronos, and add custom labels/messages. Also sets alarms.",
66
"icon": "app.png",
77
"screenshots": [

0 commit comments

Comments
 (0)