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)))),
)
}
|