String Optizations

This commit is contained in:
Marco De Araujo 2026-01-12 12:37:28 -04:00
parent 3929a4a277
commit 3d69f530d4
2 changed files with 22 additions and 12 deletions

View file

@ -1,5 +1,7 @@
use std::borrow::Cow;
use std::cmp::min;
use std::collections::HashMap;
use std::sync::OnceLock;
use crate::i18n::t;
use crate::ui::dashboard::{
@ -17,6 +19,8 @@ use ratatui::{
const STATUS_LINE_LENGTH: usize = 100;
const MAX_NAME_LENGTH: usize = 30;
static STATUS_CHARS: OnceLock<HashMap<MonitorStatus, Cow<'static, str>>> = OnceLock::new();
pub fn render_monitor_list(main_frame: &mut Frame, area: Rect, state: &mut DashboardViewState) {
let available_height = area.height as usize;
let max_scroll = state.get_total_lenght().saturating_sub(available_height);
@ -31,7 +35,7 @@ pub fn render_monitor_list(main_frame: &mut Frame, area: Rect, state: &mut Dashb
let mut lines_skipped = 0;
let half = state.get_total_lenght().saturating_div(2);
for (i, group) in state.groups.iter().enumerate() {
for (_i, group) in state.groups.iter().enumerate() {
let group_height = group.monitors.len() + BORDER_LINES_VIEW;
if lines_skipped + group_height <= scroll_pos {
@ -146,12 +150,15 @@ fn render_monitor_table(
frame.render_widget(table, area);
}
pub fn get_status_char(status: &MonitorStatus) -> char {
match status {
MonitorStatus::Up => '■',
MonitorStatus::Down => '■',
MonitorStatus::Unknown => '■',
}
fn get_status_char(status: &MonitorStatus) -> Cow<'static, str> {
let map = STATUS_CHARS.get_or_init(|| {
let mut m = HashMap::new();
m.insert(MonitorStatus::Up, Cow::Borrowed(""));
m.insert(MonitorStatus::Down, Cow::Borrowed(""));
m.insert(MonitorStatus::Unknown, Cow::Borrowed(""));
m
});
map.get(status).cloned().unwrap_or(Cow::Borrowed("?"))
}
pub fn get_status_color(status: &MonitorStatus) -> Color {
@ -162,11 +169,14 @@ pub fn get_status_color(status: &MonitorStatus) -> Color {
}
}
pub fn get_status_emoji(status: &MonitorStatus) -> &str {
pub fn get_status_emoji(status: &MonitorStatus) -> Cow<'static, str> {
static UP_ICON: &str ="";
static DOWN_ICON: &str ="";
static UNKNOWN_ICON: &str = "";
match status {
MonitorStatus::Up => "",
MonitorStatus::Down => "",
MonitorStatus::Unknown => "",
MonitorStatus::Up => Cow::Borrowed(UP_ICON),
MonitorStatus::Down => Cow::Borrowed(DOWN_ICON),
MonitorStatus::Unknown => Cow::Borrowed(UNKNOWN_ICON),
}
}

View file

@ -6,7 +6,7 @@ use rayon::prelude::*;
use std::borrow::Cow;
pub const BORDER_LINES_VIEW: usize = 3;
#[derive(Debug, Clone, PartialEq)]
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum MonitorStatus {
Up,
Down,