fix(timer): dismiss actually cancels on server + shorter retention
All checks were successful
Deploy / deploy (push) Successful in 3m10s
All checks were successful
Deploy / deploy (push) Successful in 3m10s
Bug: после перезагрузки страницы оверлей «Таймер прозвенел» открывался
снова и снова. Две причины:
- dismissTimer в TimerWidget удалял таймер только из локального
useState, но /data/tablet-timers.json оставался нетронутым. После
reload таймер возвращался в список и firedRef (которая пустая после
reload) снова триггерила alarm.
- lib/timers.ts держал просроченные таймеры 30 минут, давая им шанс
повторно сработать при каждом reload в этом окне.
Фикс:
- dismissTimer теперь POST /api/voice/timer {action:cancel, id} через
cookie auth (endpoint с прошлого коммита принимает и cookie, и bearer).
- Retention в listActive снижена до 30 секунд — этого хватает чтобы
клиент увидел свежий звонок; старше = самоудаление.
- TimerWidget клиентский фильтр тоже 30 секунд.
This commit is contained in:
@@ -28,8 +28,10 @@ function save(list: Timer[]) {
|
||||
}
|
||||
|
||||
function cleanup(list: Timer[]): Timer[] {
|
||||
// Drop items expired more than 30 min ago
|
||||
const cutoff = Date.now() - 30 * 60 * 1000
|
||||
// Drop items expired more than 30 seconds ago. Достаточно чтобы показать
|
||||
// «звенит» при активной странице, но не воскрешать alarm после перезагрузки
|
||||
// через час.
|
||||
const cutoff = Date.now() - 30 * 1000
|
||||
return list.filter(t => new Date(t.endsAt).getTime() > cutoff)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user