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 {
|
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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue