47 lines
1.8 KiB
Rust
47 lines
1.8 KiB
Rust
use ratatui::{
|
|
layout::Rect,
|
|
style::{Color, Style},
|
|
widgets::Paragraph,
|
|
Frame,
|
|
};
|
|
use crate::app::App;
|
|
use crate::tdlib::NetworkState;
|
|
|
|
pub fn render(f: &mut Frame, area: Rect, app: &App) {
|
|
// Индикатор состояния сети
|
|
let network_indicator = match app.td_client.network_state {
|
|
NetworkState::Ready => "",
|
|
NetworkState::WaitingForNetwork => "⚠ Нет сети | ",
|
|
NetworkState::ConnectingToProxy => "⏳ Прокси... | ",
|
|
NetworkState::Connecting => "⏳ Подключение... | ",
|
|
NetworkState::Updating => "⏳ Обновление... | ",
|
|
};
|
|
|
|
let status = if let Some(msg) = &app.status_message {
|
|
format!(" {}{} ", network_indicator, msg)
|
|
} else if let Some(err) = &app.error_message {
|
|
format!(" {}Error: {} ", network_indicator, err)
|
|
} else if app.is_searching {
|
|
format!(" {}↑/↓: Navigate | Enter: Select | Esc: Cancel ", network_indicator)
|
|
} else if app.selected_chat_id.is_some() {
|
|
format!(" {}↑/↓: Scroll | Ctrl+U: Profile | Enter: Send | Esc: Close | Ctrl+R: Refresh | Ctrl+C: Quit ", network_indicator)
|
|
} else {
|
|
format!(" {}↑/↓: Navigate | Enter: Open | Ctrl+S: Search | Ctrl+R: Refresh | Ctrl+C: Quit ", network_indicator)
|
|
};
|
|
|
|
let style = if matches!(app.td_client.network_state, NetworkState::WaitingForNetwork) {
|
|
Style::default().fg(Color::Red)
|
|
} else if !matches!(app.td_client.network_state, NetworkState::Ready) {
|
|
Style::default().fg(Color::Cyan)
|
|
} else if app.error_message.is_some() {
|
|
Style::default().fg(Color::Red)
|
|
} else if app.status_message.is_some() {
|
|
Style::default().fg(Color::Yellow)
|
|
} else {
|
|
Style::default().fg(Color::DarkGray)
|
|
};
|
|
|
|
let footer = Paragraph::new(status).style(style);
|
|
f.render_widget(footer, area);
|
|
}
|