2024-06-05 00:54:43 +02:00
|
|
|
use clap::Parser;
|
|
|
|
|
|
|
|
mod app;
|
|
|
|
mod chat;
|
|
|
|
mod proto;
|
|
|
|
|
|
|
|
#[derive(Parser)]
|
|
|
|
/// simple owncast chat client to never leave your terminal
|
|
|
|
struct Args {
|
|
|
|
/// owncast server to connect to
|
|
|
|
server: String,
|
2024-06-05 03:32:18 +02:00
|
|
|
|
|
|
|
/// access token to use for login
|
|
|
|
#[arg(long)]
|
|
|
|
token: Option<String>,
|
2024-06-05 00:54:43 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
#[tokio::main(flavor = "current_thread")]
|
|
|
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
|
|
let args = Args::parse();
|
|
|
|
|
|
|
|
// setup terminal
|
|
|
|
crossterm::terminal::enable_raw_mode()?;
|
|
|
|
let mut stdout = std::io::stdout();
|
|
|
|
crossterm::execute!(
|
|
|
|
stdout,
|
|
|
|
crossterm::terminal::EnterAlternateScreen
|
|
|
|
)?;
|
|
|
|
let backend = ratatui::backend::CrosstermBackend::new(stdout);
|
|
|
|
let mut terminal = ratatui::Terminal::new(backend)?;
|
|
|
|
terminal.hide_cursor()?;
|
|
|
|
|
2024-06-05 03:21:15 +02:00
|
|
|
let res = app::run(&mut terminal, args).await;
|
2024-06-05 00:54:43 +02:00
|
|
|
|
|
|
|
// restore terminal
|
|
|
|
crossterm::terminal::disable_raw_mode()?;
|
|
|
|
crossterm::execute!(
|
|
|
|
terminal.backend_mut(),
|
|
|
|
crossterm::terminal::LeaveAlternateScreen,
|
|
|
|
)?;
|
|
|
|
terminal.show_cursor()?;
|
|
|
|
|
|
|
|
if let Err(e) = res {
|
|
|
|
eprintln!("[!] Error executing app: {:?}", e);
|
|
|
|
}
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|