mod app;
mod cli;
mod core;
mod event;
mod ui;
fn main() -> anyhow::Result<()> {
if std::env::args().len() == 1 {
run_tui()
} else {
cli::run()?;
Ok(())
}
}
fn run_tui() -> anyhow::Result<()> {
use std::io;
use std::time::Duration;
use crossterm::{
event::{DisableMouseCapture, EnableMouseCapture},
execute,
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use ratatui::backend::CrosstermBackend;
use ratatui::Terminal;
enable_raw_mode()?;
let mut stdout = io::stdout();
execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?;
let backend = CrosstermBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;
let mut app = app::App::new();
app.log(app::LogLevel::Info, "rmpca v0.3.9 started");
app.log(
app::LogLevel::Info,
"Ready — select a workflow step to begin",
);
let tick_rate = Duration::from_millis(100);
while app.running {
terminal.draw(|f| ui::draw(f, &app))?;
if let Some(ev) = event::poll_event(tick_rate)? {
event::handle_event(&mut app, ev)?;
}
}
disable_raw_mode()?;
execute!(
terminal.backend_mut(),
LeaveAlternateScreen,
DisableMouseCapture
)?;
terminal.show_cursor()?;
Ok(())
}