From 887c0bc6f968f80ac90220f24bb578438e05708a Mon Sep 17 00:00:00 2001 From: Solstice Date: Tue, 9 Jun 2026 01:10:46 -0700 Subject: fix: resolve final release blockers --- src/hooks/useTimerEvents.ts | 44 +++++++++++++------------------------------- 1 file changed, 13 insertions(+), 31 deletions(-) (limited to 'src/hooks/useTimerEvents.ts') diff --git a/src/hooks/useTimerEvents.ts b/src/hooks/useTimerEvents.ts index aebc780..a0d5154 100644 --- a/src/hooks/useTimerEvents.ts +++ b/src/hooks/useTimerEvents.ts @@ -1,6 +1,5 @@ import { useEffect, useRef } from 'react'; import { listen } from '@tauri-apps/api/event'; -import { invoke } from '@tauri-apps/api/core'; import { useTimerStore, TimerTickPayload } from '../store/timerStore'; import { useTaskStore } from '../store/taskStore'; @@ -9,15 +8,6 @@ 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; } @@ -25,7 +15,7 @@ interface CompletedPayload { export function useTimerEvents( onCompleted: (taskId: string | null) => void, ) { - const setTimerTick = useTimerStore((s) => s.setTimerTick); + const syncFromBackend = useTimerStore((s) => s.syncFromBackend); const setRunning = useTimerStore((s) => s.setRunning); const fetchTasks = useTaskStore((s) => s.fetchTasks); @@ -41,16 +31,8 @@ export function useTimerEvents( async function setup() { // Bootstrap initial state from backend try { - const status = await invoke('get_timer_status'); + await syncFromBackend(); if (cancelled) return; - 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, - }); - setRunning(status.running); } catch (e) { console.error('Failed to get timer status:', e); } @@ -61,24 +43,24 @@ export function useTimerEvents( try { const [unlistenTick, unlistenCompleted, unlistenPhaseChanged] = await Promise.all([ listen('timer-tick', (event) => { - setTimerTick(event.payload); - setRunning(true); + useTimerStore.setState({ + phase: event.payload.phase, + remainingSecs: event.payload.remaining_secs, + totalSecs: event.payload.total_secs, + running: true, + sessionCount: event.payload.session_count, + currentTaskId: event.payload.current_task_id, + }); }), listen('timer-completed', async (event) => { setRunning(false); onCompletedRef.current(event.payload.task_id ?? null); await fetchTasks(); + await syncFromBackend(); }), listen('timer-phase-changed', async (_event) => { try { - const status = await invoke('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, - }); + await syncFromBackend(); } catch (e) { console.error('Failed to re-sync timer status:', e); } @@ -104,5 +86,5 @@ export function useTimerEvents( cancelled = true; unlisteners.forEach((fn) => fn()); }; - }, [setTimerTick, setRunning, fetchTasks]); // onCompleted excluded — updated via ref + }, [syncFromBackend, setRunning, fetchTasks]); // onCompleted excluded — updated via ref } -- cgit v1.3-2-g0d8e