summaryrefslogtreecommitdiff
path: root/src/store/timerStore.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/store/timerStore.ts')
-rw-r--r--src/store/timerStore.ts25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/store/timerStore.ts b/src/store/timerStore.ts
index 6a81e20..79170a4 100644
--- a/src/store/timerStore.ts
+++ b/src/store/timerStore.ts
@@ -1,3 +1,4 @@
+import { invoke } from '@tauri-apps/api/core';
import { create } from 'zustand';
export type TimerPhase = 'work' | 'short_break' | 'long_break';
@@ -10,6 +11,15 @@ export interface TimerTickPayload {
current_task_id: string | null;
}
+export interface TimerStatus {
+ phase: TimerPhase;
+ remaining_secs: number;
+ total_secs: number;
+ running: boolean;
+ session_count: number;
+ current_task_id: string | null;
+}
+
interface TimerState {
phase: TimerPhase;
remainingSecs: number;
@@ -17,8 +27,10 @@ interface TimerState {
running: boolean;
sessionCount: number;
currentTaskId: string | null;
+ syncFromBackend: () => Promise<void>;
setTimerTick: (payload: TimerTickPayload) => void;
setRunning: (running: boolean) => void;
+ setCurrentTaskId: (currentTaskId: string | null) => void;
}
export const useTimerStore = create<TimerState>((set) => ({
@@ -29,6 +41,18 @@ export const useTimerStore = create<TimerState>((set) => ({
sessionCount: 0,
currentTaskId: null,
+ syncFromBackend: async () => {
+ const status = await invoke<TimerStatus>('get_timer_status');
+ set({
+ phase: status.phase,
+ remainingSecs: status.remaining_secs,
+ totalSecs: status.total_secs,
+ running: status.running,
+ sessionCount: status.session_count,
+ currentTaskId: status.current_task_id,
+ });
+ },
+
setTimerTick: (payload) =>
set({
phase: payload.phase,
@@ -39,4 +63,5 @@ export const useTimerStore = create<TimerState>((set) => ({
}),
setRunning: (running) => set({ running }),
+ setCurrentTaskId: (currentTaskId) => set({ currentTaskId }),
}));