summaryrefslogtreecommitdiff
path: root/src/hooks/useTimerEvents.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/hooks/useTimerEvents.ts')
-rw-r--r--src/hooks/useTimerEvents.ts37
1 files changed, 29 insertions, 8 deletions
diff --git a/src/hooks/useTimerEvents.ts b/src/hooks/useTimerEvents.ts
index 2bc502d..c1f289a 100644
--- a/src/hooks/useTimerEvents.ts
+++ b/src/hooks/useTimerEvents.ts
@@ -9,6 +9,15 @@ interface PhaseChangedPayload {
session_count: number;
}
+interface TimerStatus {
+ phase: 'work' | 'short_break' | 'long_break';
+ remaining_secs: number;
+ total_secs: number;
+ running: boolean;
+ session_count: number;
+ current_task_id: string | null;
+}
+
interface CompletedPayload {
task_id: string | null;
}
@@ -58,15 +67,27 @@ export function useTimerEvents(
fetchTasks();
}).then((fn) => { unlistenCompleted = fn; });
- listen<PhaseChangedPayload>('timer-phase-changed', (event) => {
+ listen<PhaseChangedPayload>('timer-phase-changed', async (event) => {
setRunning(false);
- setTimerTick({
- phase: event.payload.phase,
- remaining_secs: useTimerStore.getState().remainingSecs,
- total_secs: useTimerStore.getState().totalSecs,
- session_count: event.payload.session_count,
- current_task_id: useTimerStore.getState().currentTaskId,
- });
+ try {
+ const status = await invoke<TimerStatus>('get_timer_status');
+ setTimerTick({
+ phase: status.phase,
+ remaining_secs: status.remaining_secs,
+ total_secs: status.total_secs,
+ session_count: status.session_count,
+ current_task_id: status.current_task_id,
+ });
+ } catch (e) {
+ // Fallback: at least update the phase from the event payload
+ setTimerTick({
+ phase: event.payload.phase,
+ remaining_secs: useTimerStore.getState().remainingSecs,
+ total_secs: useTimerStore.getState().totalSecs,
+ session_count: event.payload.session_count,
+ current_task_id: useTimerStore.getState().currentTaskId,
+ });
+ }
}).then((fn) => { unlistenPhaseChanged = fn; });
return () => {