use color_eyre::eyre::Result;
use ratatui::{backend::CrosstermBackend, Terminal};
use crate::{
app::App,
event::{Event, EventHandler},
tui::Tui,
write_output::{parse_args, write_output_file},
};
pub mod app;
pub mod columns;
pub mod event;
pub mod filter;
pub mod job;
pub mod job_rows;
pub mod joblist;
pub mod menus;
pub mod mouse_input;
pub mod notify;
pub mod scheduler;
pub mod text_field;
pub mod tui;
pub mod update_content;
pub mod user_options;
pub mod write_output;
fn main() -> Result<()> {
let output_file = parse_args();
let mut app = App::new();
app.menus.job_overview.set_index(0);
let backend = CrosstermBackend::new(std::io::stderr());
let terminal = Terminal::new(backend)?;
let tick_rate = app.user_options.refresh_rate as u64;
let events = EventHandler::new(tick_rate);
let mut tui = Tui::new(terminal, events);
tui.enter()?;
while !app.should_quit {
tui.draw(&mut app)?;
match tui.events.next()? {
Event::Tick => {
app.update_jobs();
}
Event::Key(key_event) => app.input(key_event),
Event::Mouse(mouse_event) => app.mouse_input(mouse_event),
Event::Resize(_, _) => {}
};
if app.should_set_frame_rate {
tui.events
.set_tick_rate(app.user_options.refresh_rate as u64);
app.should_set_frame_rate = false;
};
if app.open_vim {
tui.exit()?;
app.open_file_in_editor();
tui.enter()?;
}
if app.should_execute_command {
tui.exit()?;
app.start_salloc();
tui.enter()?;
}
}
tui.exit()?;
if let Some(command) = app.exit_command {
write_output_file(output_file.as_deref(), &command);
}
Ok(())
}