Render time remaining countdown
This commit is contained in:
parent
252ee4dd8d
commit
1bc8b0c790
2 changed files with 19 additions and 7 deletions
|
|
@ -296,25 +296,35 @@ fn build_hud_content(state: SharedState) -> gtk4::Box {
|
|||
}
|
||||
SessionState::Active {
|
||||
entry_name,
|
||||
time_remaining_secs,
|
||||
started_at,
|
||||
time_limit_secs,
|
||||
paused,
|
||||
..
|
||||
} => {
|
||||
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);
|
||||
warning_box_clone.set_visible(false);
|
||||
}
|
||||
SessionState::Warning {
|
||||
entry_name,
|
||||
time_remaining_secs,
|
||||
warning_issued_at,
|
||||
time_remaining_at_warning,
|
||||
..
|
||||
} => {
|
||||
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!(
|
||||
"Only {} seconds remaining!",
|
||||
time_remaining_secs
|
||||
remaining
|
||||
));
|
||||
warning_box_clone.set_visible(true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,8 @@ pub enum SessionState {
|
|||
session_id: SessionId,
|
||||
entry_id: EntryId,
|
||||
entry_name: String,
|
||||
time_remaining_secs: u64,
|
||||
warning_issued_at: std::time::Instant,
|
||||
time_remaining_at_warning: u64,
|
||||
},
|
||||
|
||||
/// Session is ending
|
||||
|
|
@ -187,7 +188,8 @@ impl SharedState {
|
|||
session_id: session_id.clone(),
|
||||
entry_id: entry_id.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(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue