2026-07-11 13:16:10 +07:00
|
|
|
use ratatui::layout::Rect;
|
|
|
|
|
use ratatui::style::{Style, Modifier};
|
|
|
|
|
use ratatui::text::{Line, Span};
|
|
|
|
|
use ratatui::widgets::Block;
|
|
|
|
|
use ratatui::Frame;
|
|
|
|
|
use super::theme::Theme;
|
|
|
|
|
|
|
|
|
|
pub fn draw_status_bar(frame: &mut Frame, area: Rect, state: &crate::app::state::rest::AppStateRest) {
|
|
|
|
|
let left_text = Span::styled(
|
|
|
|
|
" [zesdex] ",
|
|
|
|
|
Style::default()
|
|
|
|
|
.fg(Theme::TEXT)
|
|
|
|
|
.add_modifier(Modifier::BOLD),
|
|
|
|
|
);
|
|
|
|
|
|
2026-07-11 22:10:17 +07:00
|
|
|
let agent_status = if state.turn_in_flight() {
|
|
|
|
|
"PROCESSING"
|
2026-07-12 02:26:53 +07:00
|
|
|
} else if state.misc.api_connected {
|
2026-07-11 22:10:17 +07:00
|
|
|
"READY"
|
2026-07-12 02:26:53 +07:00
|
|
|
} else {
|
|
|
|
|
"NO API"
|
|
|
|
|
};
|
|
|
|
|
let status_color = if state.misc.api_connected {
|
|
|
|
|
Theme::MODE_AUTO
|
|
|
|
|
} else if state.turn_in_flight() {
|
|
|
|
|
Theme::MODE_YOLO
|
|
|
|
|
} else {
|
|
|
|
|
Theme::DIM
|
2026-07-11 22:10:17 +07:00
|
|
|
};
|
2026-07-11 13:16:10 +07:00
|
|
|
let center_text = Span::styled(
|
2026-07-12 02:26:53 +07:00
|
|
|
format!(" | {} | {} ", state.settings.provider, agent_status),
|
|
|
|
|
Style::default().fg(status_color),
|
2026-07-11 13:16:10 +07:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
let right_text = Span::styled(
|
2026-07-12 02:26:53 +07:00
|
|
|
format!(" | {} ", state.settings.model),
|
2026-07-11 13:16:10 +07:00
|
|
|
Style::default().fg(Theme::DIM),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
let line = Line::from(vec![left_text, center_text, right_text]);
|
|
|
|
|
|
|
|
|
|
let block = Block::default()
|
|
|
|
|
.style(
|
|
|
|
|
Style::default()
|
|
|
|
|
.bg(Theme::STATUS_BAR_BG)
|
|
|
|
|
.fg(Theme::TEXT),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
let paragraph = ratatui::widgets::Paragraph::new(line).block(block);
|
|
|
|
|
frame.render_widget(paragraph, area);
|
|
|
|
|
}
|