summaryrefslogtreecommitdiff
path: root/src-tauri/src
diff options
context:
space:
mode:
authorTyler Hoang <tyler@tylerhoang.xyz>2026-06-10 23:39:24 -0700
committerTyler Hoang <tyler@tylerhoang.xyz>2026-06-10 23:39:24 -0700
commit0fb6d49be075597fa0812325c7419789d19bcbe8 (patch)
treef65a40a30f2f19a27ffd2f9e27e201499ee72b3e /src-tauri/src
parentbe38ca61ed85e4493e645c97d69251cdcc02b80b (diff)
fix: restore timer controls visibilityHEADmaster
Diffstat (limited to 'src-tauri/src')
-rw-r--r--src-tauri/src/lib.rs40
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"));
+ }
}