Render time remaining countdown

This commit is contained in:
Albert Armea 2025-12-27 18:55:34 -05:00
parent 252ee4dd8d
commit 1bc8b0c790
2 changed files with 19 additions and 7 deletions

View file

@ -296,25 +296,35 @@ fn build_hud_content(state: SharedState) -> gtk4::Box {
} }
SessionState::Active { SessionState::Active {
entry_name, entry_name,
time_remaining_secs, started_at,
time_limit_secs,
paused, paused,
.. ..
} => { } => {
app_label_clone.set_text(entry_name); app_label_clone.set_text(entry_name);
time_display_clone.set_remaining(*time_remaining_secs); // Calculate remaining time based on elapsed time since session start
let remaining = time_limit_secs.map(|limit| {
let elapsed = started_at.elapsed().as_secs();
limit.saturating_sub(elapsed)
});
time_display_clone.set_remaining(remaining);
time_display_clone.set_paused(*paused); time_display_clone.set_paused(*paused);
warning_box_clone.set_visible(false); warning_box_clone.set_visible(false);
} }
SessionState::Warning { SessionState::Warning {
entry_name, entry_name,
time_remaining_secs, warning_issued_at,
time_remaining_at_warning,
.. ..
} => { } => {
app_label_clone.set_text(entry_name); app_label_clone.set_text(entry_name);
time_display_clone.set_remaining(Some(*time_remaining_secs)); // Calculate remaining time based on elapsed time since warning was issued
let elapsed = warning_issued_at.elapsed().as_secs();
let remaining = time_remaining_at_warning.saturating_sub(elapsed);
time_display_clone.set_remaining(Some(remaining));
warning_label_clone.set_text(&format!( warning_label_clone.set_text(&format!(
"Only {} seconds remaining!", "Only {} seconds remaining!",
time_remaining_secs remaining
)); ));
warning_box_clone.set_visible(true); warning_box_clone.set_visible(true);
} }

View file

@ -30,7 +30,8 @@ pub enum SessionState {
session_id: SessionId, session_id: SessionId,
entry_id: EntryId, entry_id: EntryId,
entry_name: String, entry_name: String,
time_remaining_secs: u64, warning_issued_at: std::time::Instant,
time_remaining_at_warning: u64,
}, },
/// Session is ending /// Session is ending
@ -187,7 +188,8 @@ impl SharedState {
session_id: session_id.clone(), session_id: session_id.clone(),
entry_id: entry_id.clone(), entry_id: entry_id.clone(),
entry_name: entry_name.clone(), entry_name: entry_name.clone(),
time_remaining_secs: time_remaining.as_secs(), warning_issued_at: std::time::Instant::now(),
time_remaining_at_warning: time_remaining.as_secs(),
}; };
} }
} }