Resolve some conceptual conflicts between chained timers and snoozing

1. Make snoozing only available for non-chained timers (or the last
   timer in a chain)

2. Don't let dismissing a snoozed timer restart the chained timer if
   it was paused (though 1. should preclude this from happening
   anyway)
master
Travis Evans 2025-04-26 18:14:09 -05:00
parent fe04af7cc2
commit 931b1f6cef
1 changed files with 28 additions and 8 deletions

View File

@ -16,13 +16,16 @@ function showAlarm(alarm) {
}
let message = timer.display_name() + '\n' + alarm.msg;
// If there's a timer chained from this one, start it
if (timer.chain_id !== null) {
const chainTimer = tt.TIMERS[tt.find_timer_by_id(timer.chain_id)];
// If there's a timer chained from this one, start it (only for
// alarms not in snoozed status)
var isChainedTimer = false;
if (timer.chain_id !== null && alarm.ot === undefined) {
var chainTimer = tt.TIMERS[tt.find_timer_by_id(timer.chain_id)];
if (chainTimer !== undefined) {
chainTimer.reset();
chainTimer.start();
tt.set_last_viewed_timer(chainTimer);
isChainedTimer = true;
} else {
console.warn("tevtimer: unable to find chained timer with ID " + timer.chain_id);
}
@ -43,13 +46,20 @@ function showAlarm(alarm) {
// buzzCount should really be called buzzRepeat, so subtract 1
let buzzCount = timer.buzz_count - 1;
// Alarm options for non-chained timer are OK (dismiss the alarm) and
// Snooze (retrigger the alarm after a delay).
// Alarm options for chained timer are OK (dismiss) and Halt (dismiss
// and pause the triggering timer).
let promptButtons = isChainedTimer
? { "Halt": 'halt', "OK": 'ok' }
: { "Snooze": 'snooze', "OK": 'ok' };
E.showPrompt(message, {
title: 'tev timer',
buttons: { "Snooze": true, "Stop": false } // default is sleep so it'll come back in some mins
}).then(function (sleep) {
buttons: promptButtons,
}).then(function (action) {
buzzCount = 0;
if (sleep) {
if (action === 'snooze') {
if (alarm.ot === undefined) {
alarm.ot = alarm.t;
}
@ -58,7 +68,8 @@ function showAlarm(alarm) {
alarm.t = currentTime + settings.defaultSnoozeMillis;
alarm.t %= 86400000;
Bangle.emit("alarmSnooze", alarm);
} else {
}
if (action === 'ok' || action === 'halt') {
// Don't do timer deletions here; this is handled by the
// tevtimer library code (and it may rearrange the alarm indeces
// in the process)
@ -76,6 +87,10 @@ function showAlarm(alarm) {
alarm.on = false;
}
}
if (action === 'halt') {
timer.pause();
chainTimer.pause();
}
Bangle.emit("alarmDismiss", alarm);
// The updated alarm is still a member of 'alarms'
@ -85,7 +100,12 @@ function showAlarm(alarm) {
// Update system alarms for any changed timers just before we finish
tt.update_system_alarms();
load();
// Load `tevtimer` app upon halt, else the default (clock) app
if (action === 'halt') {
load('tevtimer.app.js');
} else {
load();
}
});
function buzz() {