From a036e7eb46886ff7fe88255ae26c327f63ec4bfa Mon Sep 17 00:00:00 2001 From: salmonik Date: Sun, 1 Nov 2026 16:26:21 +0100 Subject: v3.3.0: keep client.db in the XDG data dir, add -d/--data-dir --- src/bin/client/main.rs | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) (limited to 'src/bin/client/main.rs') diff --git a/src/bin/client/main.rs b/src/bin/client/main.rs index 9018026..3407380 100644 --- a/src/bin/client/main.rs +++ b/src/bin/client/main.rs @@ -5,10 +5,21 @@ mod repl; mod tls; use repl::ClientState; +use zagan_bet::client::paths::{database_path, default_data_dir, parse_args, USAGE}; fn main() { - let args: Vec = std::env::args().collect(); - let unsafe_mode = args.iter().any(|arg| arg == "--unsafe"); + 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}"); + return; + } // Every game board is drawn in place, so refuse a terminal that cannot fit // them before touching the network or the terminal mode. @@ -25,19 +36,33 @@ fn main() { std::process::exit(1); } - if unsafe_mode { + if args.unsafe_mode { println!("WARNING: Running in UNSAFE mode - certificate verification disabled!"); } - connection::set_unsafe_mode(unsafe_mode); + connection::set_unsafe_mode(args.unsafe_mode); - let mut state = ClientState::new(); + 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 db_path = database_path(&data_dir); + + let mut state = match ClientState::new(&db_path) { + Ok(state) => state, + Err(error) => { + eprintln!("{error}"); + std::process::exit(1); + } + }; if let Some(host) = state.addr.clone() { state.connect_to(&host); } println!("Welcome to Zagan-Bet Client!"); println!("Type 'help' for available commands."); + println!("Data: {}", db_path.display()); state.run(); } -- cgit v1.2.3