use leptos::*; fn format_bytes(bytes: i64) -> String { const UNITS: [&str; 6] = ["B", "KB", "MB", "GB", "TB", "PB"]; if bytes < 1024 { return format!("{} B", bytes); } let i = (bytes as f64).log2().div_euclid(10.0) as usize; format!( "{:.1} {}", (bytes as f64) / 1024_f64.powi(i as i32), UNITS[i] ) } fn format_speed(bytes_per_sec: i64) -> String { if bytes_per_sec == 0 { return "0 B/s".to_string(); } format!("{}/s", format_bytes(bytes_per_sec)) } #[component] pub fn StatusBar() -> impl IntoView { let store = use_context::().expect("store not provided"); let stats = store.global_stats; let (theme_open, set_theme_open) = create_signal(false); view! {
{move || format_speed(stats.get().down_rate)} 0) fallback=|| ()> {move || format!("(Limit: {})", format_speed(stats.get().down_limit.unwrap_or(0)))}
{move || format_speed(stats.get().up_rate)} 0) fallback=|| ()> {move || format!("(Limit: {})", format_speed(stats.get().up_limit.unwrap_or(0)))}
// Backdrop to close on outside click // iOS Safari requires cursor:pointer inline style for click events on div elements
} }