use dotenv::dotenv;
use env_logger::Builder;
use env_logger::Target;
use log::LevelFilter;
use std::env;
use std::fs::File;
use std::io;
use ratatui::{backend::CrosstermBackend, Terminal};
use reedy::{
app::{App, AppResult},
event::{Event, EventHandler},
handler::{handle_key_events, handle_mouse_events},
tui::Tui,
};
#[tokio::main]
async fn main() -> AppResult<()> {
dotenv().ok();
if env::var("REEDY_ENV").unwrap_or_default() == "DEBUG" {
let log_path = App::get_log_path();
println!("Log file location: {}", log_path.display());
let file = File::create(log_path).unwrap();
Builder::new()
.target(Target::Pipe(Box::new(file)))
.filter_level(LevelFilter::Debug)
.init();
}
let mut app = App::new().await;
let backend = CrosstermBackend::new(io::stdout());
let terminal = Terminal::new(backend)?;
let events = EventHandler::new(250);
let mut tui = Tui::new(terminal, events);
tui.init()?;
while app.running {
tui.draw(&mut app)?;
match tui.events.next().await? {
Event::Tick => {
app.tick();
app.perform_auto_refresh().await;
}
Event::Key(key_event) => handle_key_events(key_event, &mut app).await?,
Event::Mouse(mouse_event) => handle_mouse_events(mouse_event, &mut app).await?,
Event::Resize(width, height) => {
app.terminal_width = width;
app.terminal_height = height;
}
}
}
tui.exit()?;
Ok(())
}