summaryrefslogtreecommitdiffstats
path: root/gui/src/main.rs
blob: 82babb60540081cc49da7006c40bed74bc822e14 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//! 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 <dir>] [--unsafe]

  -d, --data-dir <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)))),
    )
}