Upgrading footer

This commit is contained in:
Marco De Araujo 2025-12-29 06:50:18 -04:00
parent 63496cfc93
commit f4dca93598
5 changed files with 47 additions and 22 deletions

View file

@ -2,9 +2,8 @@ use crate::api::{UptimeKumaClient, UptimeKumaEndpoints};
use crate::core;
use crate::data::{heartbeat::HeartbeatResponse, status_page::model::StatusPageResponse};
use crate::i18n::{t, t_with_args};
use crate::ui::components::render_footer;
use crate::ui::{
components::{render_header, render_monitor_list},
components::{render_footer, render_header, render_monitor_list},
dashboard::model::DashboardViewState,
};
use anyhow::Result;
@ -23,10 +22,10 @@ use ratatui::{
};
use std::{
io,
thread,
sync::mpsc,
collections::HashMap,
io,
sync::mpsc,
thread,
time::{Duration, Instant},
};
@ -138,12 +137,21 @@ impl App {
} else {
render_monitor_list(frame, chunks[1], &self.state);
}
render_footer(frame, chunks[2]);
let seconds_until_update = self
.update_interval
.checked_sub(self.last_update.elapsed())
.map(|d| d.as_secs() as u64)
.unwrap_or(30);
render_footer(frame, chunks[2], seconds_until_update);
});
}
fn handle_events(&mut self) -> io::Result<()> {
if event::poll(Duration::from_millis(50))? {
let timeout = Duration::from_secs(1);
if event::poll(timeout)? {
if let Event::Key(key) = event::read()? {
if key.kind == KeyEventKind::Release {
return Ok(());

View file

@ -2,28 +2,43 @@ use ratatui::{
Frame,
layout::{Alignment, Rect},
style::{Color, Modifier, Style},
text::Span,
text::{Line, Span},
widgets::{Block, Borders, Paragraph},
};
use crate::i18n::t;
use chrono::Local;
pub fn render_footer(frame: &mut Frame, area: Rect) {
pub fn render_footer(frame: &mut Frame, area: Rect, seconds_until_update: u64) {
let now = Local::now();
let datatime_str = now.format("%Y-%m-%d %H:%M:%S").to_string();
let countdown_str = format!("{}s", seconds_until_update);
let footer = Paragraph::new(Span::styled(
datatime_str,
Style::default()
.fg(Color::Gray)
.add_modifier(Modifier::BOLD),
))
.block(
Block::default()
.borders(Borders::ALL)
.border_style(Style::default().fg(Color::Blue)),
)
.alignment(Alignment::Center);
let text = Line::from(vec![
Span::styled(
datatime_str,
Style::default()
.fg(Color::Gray)
.add_modifier(Modifier::BOLD),
),
Span::raw(" | "),
Span::styled(
countdown_str,
Style::default()
.fg(Color::Yellow)
.add_modifier(Modifier::BOLD),
),
Span::raw(" | "),
Span::styled(t("key-to-exit"), Style::default().fg(Color::Gray)),
]);
let footer = Paragraph::new(text)
.block(
Block::default()
.borders(Borders::ALL)
.border_style(Style::default().fg(Color::Blue)),
)
.alignment(Alignment::Center);
frame.render_widget(footer, area);
}

View file

@ -3,7 +3,7 @@ use crate::ui::dashboard::model::DashboardViewState;
use ratatui::{
Frame,
layout::{Alignment, Rect},
style::{Color, Style, Stylize},
style::{Color, Style},
text::{Line, Span},
widgets::{Block, Borders, Paragraph},
};