//! Desktop frontend for zagan-bet. //! //! Phase 4: the egui shell over the shared `ClientCore`, with the transport on //! a worker thread. The same data directory and flags as the terminal client. use zagan_bet::client::paths::{default_data_dir, parse_args}; use zagan_bet_gui::app::{Startup, ZaganApp}; fn main() -> eframe::Result { let args = match parse_args(std::env::args().skip(1)) { Ok(args) => args, Err(message) => { eprintln!("{message}"); std::process::exit(2); } }; if args.help { println!( "usage: zagan-bet-gui [-d ] [--unsafe] -d, --data-dir where to keep client.db (default: XDG data dir) --unsafe skip certificate verification -h, --help show this message" ); return Ok(()); } let data_dir = args.data_dir.unwrap_or_else(default_data_dir); if let Err(error) = std::fs::create_dir_all(&data_dir) { eprintln!("Cannot create {}: {error}", data_dir.display()); std::process::exit(1); } let options = eframe::NativeOptions { viewport: eframe::egui::ViewportBuilder::default() .with_title("Zagan-Bet") .with_app_id("zagan-bet") .with_inner_size([1440.0, 900.0]) .with_min_inner_size([1100.0, 720.0]), renderer: eframe::Renderer::Glow, ..Default::default() }; let startup = Startup { data_dir, unsafe_mode: args.unsafe_mode, }; eframe::run_native( "Zagan-Bet", options, Box::new(move |cc| Ok(Box::new(ZaganApp::new(cc, startup)))), ) }