diff options
| author | Tyler Hoang <tyler@tylerhoang.xyz> | 2026-06-10 23:39:24 -0700 |
|---|---|---|
| committer | Tyler Hoang <tyler@tylerhoang.xyz> | 2026-06-10 23:39:24 -0700 |
| commit | 0fb6d49be075597fa0812325c7419789d19bcbe8 (patch) | |
| tree | f65a40a30f2f19a27ffd2f9e27e201499ee72b3e /src-tauri | |
| parent | be38ca61ed85e4493e645c97d69251cdcc02b80b (diff) | |
Diffstat (limited to 'src-tauri')
| -rw-r--r-- | src-tauri/src/lib.rs | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index aaa9cd2..ae8ad13 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -55,6 +55,10 @@ fn sync_audio_ducking(audio: &AudioState, phase: TimerPhase) { } } +fn clear_session_count_only(timer: &mut TimerState) { + timer.session_count = 0; +} + // ── Timer commands ────────────────────────────────────────────────────────── #[tauri::command] @@ -114,6 +118,17 @@ fn reset_timer( } #[tauri::command] +fn clear_session_count( + timer: State<'_, TimerStateWrapper>, + data: State<'_, AppDataWrapper>, + app: AppHandle, +) -> Result<(), String> { + let mut ts = timer.0.lock().unwrap(); + clear_session_count_only(&mut ts); + persist_timer_snapshot(&ts, &data, &app) +} + +#[tauri::command] fn skip_phase( timer: State<'_, TimerStateWrapper>, data: State<'_, AppDataWrapper>, @@ -455,6 +470,7 @@ pub fn run() { start_timer, pause_timer, reset_timer, + clear_session_count, skip_phase, set_current_task, get_settings, @@ -474,10 +490,32 @@ pub fn run() { #[cfg(test)] mod tests { - use super::fallback_bundled_audio_root; + use super::{clear_session_count_only, fallback_bundled_audio_root}; + use crate::state::{TimerPhase, TimerState}; #[test] fn dev_audio_fallback_points_at_src_tauri() { assert_eq!(fallback_bundled_audio_root(), std::path::PathBuf::from("src-tauri")); } + + #[test] + fn clear_session_count_preserves_phase_and_duration() { + let mut state = TimerState { + phase: TimerPhase::ShortBreak, + remaining_secs: 120, + total_secs: 300, + running: false, + session_count: 4, + current_task_id: Some("task-1".to_string()), + }; + + clear_session_count_only(&mut state); + + assert_eq!(state.phase, TimerPhase::ShortBreak); + assert_eq!(state.remaining_secs, 120); + assert_eq!(state.total_secs, 300); + assert!(!state.running); + assert_eq!(state.session_count, 0); + assert_eq!(state.current_task_id.as_deref(), Some("task-1")); + } } |
