Skip to main content

mobius_cli/frontend/
dashboard.rs

1//! Live gateway dashboard and gateway-scoped setup entrypoints.
2
3mod runtime;
4mod state;
5mod view;
6
7use std::io;
8use std::path::PathBuf;
9use std::time::Duration;
10
11use mobius::Result;
12use ratatui::Terminal;
13use ratatui::backend::CrosstermBackend;
14
15use super::setup::{self, SetupMode};
16use super::terminal::TerminalGuard;
17
18pub(in crate::frontend) use self::runtime::{
19    activate_overlay, handle_action_input_key, insert_overlay_input, move_overlay_action,
20    move_overlay_selection, prepare_overlay_operation, select_overlay_edge,
21};
22use self::runtime::{connect, dashboard_loop};
23pub(in crate::frontend) use self::state::CapabilityOverlay;
24pub(in crate::frontend) use self::view::{centered_area, render_capability_overlay};
25
26const REFRESH_INTERVAL: Duration = Duration::from_secs(1);
27
28/// Runs the gateway dashboard.
29/// # Errors
30///
31/// Returns an error if validation or an operation required to complete the request fails.
32pub async fn run(state_dir: PathBuf) -> Result<()> {
33    let (sender, mut events, mut state) = connect(state_dir).await?;
34    let _guard = TerminalGuard::alternate()?;
35    let mut terminal = Terminal::new(CrosstermBackend::new(io::stdout()))?;
36    terminal.clear()?;
37    dashboard_loop(&mut terminal, sender, &mut events, &mut state).await
38}
39
40/// Runs provider setup from the gateway dashboard.
41/// # Errors
42///
43/// Returns an error if validation or an operation required to complete the request fails.
44pub async fn run_provider(state_dir: PathBuf) -> Result<()> {
45    let (sender, mut events, mut state) = connect(state_dir).await?;
46    let mut guard = TerminalGuard::alternate()?;
47    guard.set_mouse_capture(false)?;
48    let mut terminal = Terminal::new(CrosstermBackend::new(io::stdout()))?;
49    setup::run_gateway(
50        &mut terminal,
51        SetupMode::Login,
52        None,
53        &sender,
54        &mut events,
55        &mut state.gateway,
56    )
57    .await
58}
59
60#[cfg(test)]
61mod tests;