storageshower 0.27.1

Cyberpunk disk usage TUI
Documentation
use crossterm::event::{KeyCode, KeyEvent, KeyEventKind, KeyEventState, KeyModifiers};
use std::sync::{Arc, Mutex};
use sysinfo::DiskKind;

use crate::app::App;
use crate::prefs::Prefs;
use crate::types::{DiskEntry, SysStats};

pub fn make_key(code: KeyCode) -> KeyEvent {
    KeyEvent {
        code,
        modifiers: KeyModifiers::NONE,
        kind: KeyEventKind::Press,
        state: KeyEventState::NONE,
    }
}

pub fn make_ctrl_key(code: KeyCode) -> KeyEvent {
    KeyEvent {
        code,
        modifiers: KeyModifiers::CONTROL,
        kind: KeyEventKind::Press,
        state: KeyEventState::NONE,
    }
}

pub fn test_disks() -> Vec<DiskEntry> {
    vec![
        DiskEntry {
            mount: "/".into(),
            used: 50_000_000_000,
            total: 100_000_000_000,
            pct: 50.0,
            kind: DiskKind::SSD,
            fs: "apfs".into(),
            latency_ms: None,
            io_read_rate: None,
            io_write_rate: None,
            smart_status: None,
        },
        DiskEntry {
            mount: "/home".into(),
            used: 80_000_000_000,
            total: 200_000_000_000,
            pct: 40.0,
            kind: DiskKind::SSD,
            fs: "ext4".into(),
            latency_ms: None,
            io_read_rate: None,
            io_write_rate: None,
            smart_status: None,
        },
        DiskEntry {
            mount: "/data".into(),
            used: 900_000_000_000,
            total: 1_000_000_000_000,
            pct: 90.0,
            kind: DiskKind::HDD,
            fs: "xfs".into(),
            latency_ms: None,
            io_read_rate: None,
            io_write_rate: None,
            smart_status: None,
        },
        DiskEntry {
            mount: "/tmp".into(),
            used: 100_000,
            total: 500_000_000,
            pct: 0.02,
            kind: DiskKind::Unknown(-1),
            fs: "tmpfs".into(),
            latency_ms: None,
            io_read_rate: None,
            io_write_rate: None,
            smart_status: None,
        },
    ]
}

pub fn test_app() -> App {
    let stats = SysStats::default();
    let disks = test_disks();
    let shared = Arc::new(Mutex::new((stats.clone(), disks.clone())));
    let mut app = App::new_default(shared);
    app.disks = disks;
    app.stats = stats;
    app.prefs = Prefs::default();
    app.test_mode = true;
    app.update_sorted();
    app
}