#[macro_use] extern crate anyhow; #[macro_use] extern crate log; use anyhow::Result; use cursive::Cursive; use cursive::CursiveExt; use cursive::event::{Event, EventTrigger}; use cursive_flexi_logger_view::FlexiLoggerView; use flexi_logger::{Logger, LogTarget}; mod bindings; mod main_view; mod mail_view; mod maillist_view; mod configuration; mod mailview; mod util; use configuration::Configuration; fn main() -> Result<()> { let mut siv = cursive::Cursive::default(); Logger::with_env_or_str("debug") .log_target(LogTarget::FileAndWriter( cursive_flexi_logger_view::cursive_flexi_logger(&siv), )) .directory("logs") .suppress_timestamp() .format(flexi_logger::colored_with_thread) .start() .expect("failed to initialize logger!"); debug!("Loading configuration"); let mut config = config::Config::default(); config .merge(config::File::with_name("config"))? .merge(config::Environment::with_prefix("MUAR"))?; let config = config.try_into::()?; debug!("Setting triggers"); let trigger: EventTrigger = Event::Char('q').into(); siv.set_on_post_event(trigger, |s| s.quit()); debug!("Adding mainview"); siv.add_fullscreen_layer(main_view::MainView::new(config)?); siv.add_global_callback('~', |siv: &mut Cursive| siv.add_layer(FlexiLoggerView::scrollable())); debug!("Starting cursive"); siv.run(); Ok(()) }