mirror of
https://gitlab.com/fabinfra/fabaccess/sute.git
synced 2025-03-12 14:41:52 +01:00
80 lines
2.0 KiB
Rust
80 lines
2.0 KiB
Rust
use std::io;
|
|
use std::sync::{Arc, Mutex};
|
|
|
|
use tui::backend::{Backend, TermionBackend};
|
|
use tui::Terminal;
|
|
use termion::raw::IntoRawMode;
|
|
use termion::input::TermRead;
|
|
use termion::event::Key;
|
|
|
|
use futures::StreamExt;
|
|
use futures_signals::signal::SignalExt;
|
|
|
|
use clap::{App, Arg};
|
|
|
|
mod banner;
|
|
mod config;
|
|
mod app;
|
|
mod input;
|
|
mod util;
|
|
mod ui;
|
|
mod schema;
|
|
|
|
use banner::BANNER;
|
|
|
|
fn main() -> Result<(), io::Error> {
|
|
|
|
let matches = App::new("sute 🌸")
|
|
.version(env!("CARGO_PKG_VERSION"))
|
|
.author(env!("CARGO_PKG_AUTHORS"))
|
|
.about(env!("CARGO_PKG_DESCRIPTION"))
|
|
.usage("Press `?` in the GUI to see keybindings")
|
|
.before_help(BANNER)
|
|
.arg(Arg::with_name("config")
|
|
.short("c")
|
|
.long("config")
|
|
.help("Specify configuration file path")
|
|
.takes_value(true))
|
|
.arg(Arg::with_name("server")
|
|
.short("s")
|
|
.long("server")
|
|
.help("Connect to the specified address[:port] as server")
|
|
.takes_value(true))
|
|
.get_matches();
|
|
|
|
let server = matches.value_of("server").unwrap_or("localhost");
|
|
|
|
let stdout = io::stdout().into_raw_mode()?;
|
|
let backend = TermionBackend::new(stdout);
|
|
let mut terminal = Terminal::new(backend)?;
|
|
terminal.hide_cursor()?;
|
|
|
|
// Refresh the screen once by resizing the terminal
|
|
if let Ok((x,y)) = termion::terminal_size() {
|
|
terminal.resize(tui::layout::Rect::new(0, 0, x,y)).unwrap();
|
|
}
|
|
|
|
let resize = util::Resize::new()?;
|
|
let api = schema::Api::connect(server);
|
|
let app = app::Sute::new(resize, Box::pin(api));
|
|
|
|
let mut state = app.get_state();
|
|
terminal.draw(|f| ui::draw_ui(f, &mut state))?;
|
|
|
|
let mut stream = app.to_stream();
|
|
loop {
|
|
if let Some(mut state) = smol::block_on(stream.next()) {
|
|
if !state.running {
|
|
break;
|
|
}
|
|
|
|
terminal.draw(|f| ui::draw_ui(f, &mut state))?; } else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
terminal.show_cursor()?;
|
|
|
|
Ok(())
|
|
}
|