From 8a693d74a8550130685e2d089f15158b2d04ecd8 Mon Sep 17 00:00:00 2001 From: bigfoot547 Date: Thu, 13 Feb 2025 23:54:43 -0600 Subject: wip: launch game with auth --- ozone-cli/src/main.rs | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) (limited to 'ozone-cli') diff --git a/ozone-cli/src/main.rs b/ozone-cli/src/main.rs index f033a19..d383cb7 100644 --- a/ozone-cli/src/main.rs +++ b/ozone-cli/src/main.rs @@ -12,6 +12,8 @@ use ozone::auth::{Account, AccountStorage, MsaAccount}; use ozone::auth::error::AuthErrorKind; use crate::cli::{AccountCommand, Cli, InstanceCommand, ProfileSelectArgs, RootCommand}; +const ACCOUNT_DB_PATH: &str = "ozone_accounts.json"; + fn find_account<'a>(auth: &'a AccountStorage, input: &ProfileSelectArgs) -> Result, ()> { if let Some(uuid) = input.uuid { Ok(auth.iter_accounts().filter(|(_, a)| match *a { @@ -260,7 +262,7 @@ async fn main_inner(cli: Cli) -> Result> { } }, RootCommand::Account(account_args) => { - let accounts_path = home.join("ozone_accounts.json"); + let accounts_path = home.join(ACCOUNT_DB_PATH); let mut accounts = AccountStorage::load(&accounts_path).await?; match &account_args.command { @@ -388,9 +390,9 @@ async fn main_inner(cli: Cli) -> Result> { eprintln!("No account selected."); return Ok(ExitCode::FAILURE); }; - + let client = MsaAccount::create_client(); - + match account { Account::MSA(msa_acct) => { msa_acct.log_in_silent(&client).await?; @@ -401,7 +403,7 @@ async fn main_inner(cli: Cli) -> Result> { return Ok(ExitCode::FAILURE); } } - + accounts.save(&accounts_path).await?; } } @@ -413,9 +415,39 @@ async fn main_inner(cli: Cli) -> Result> { }; let inst = settings.instances.get(&selection).expect("settings inconsistency"); - settings.save().await?; + let accounts_path = home.join(ACCOUNT_DB_PATH); + let mut accounts = AccountStorage::load(&accounts_path).await?; + let Some(account) = accounts.get_selected_account_mut() else { + eprintln!("No account selected."); + return Ok(ExitCode::FAILURE); + }; + + match account { + Account::MSA(msa_acct) => { + let client = MsaAccount::create_client(); + + println!("Looking up account information..."); + match msa_acct.log_in_silent(&client).await { + Ok(_) => (), + Err(e) if e.kind() == AuthErrorKind::InteractionRequired => { + eprintln!("This account requires interactive authentication: {}", account); + eprintln!("Details: {e}"); + return Ok(ExitCode::FAILURE); + }, + Err(e) => { + eprintln!("Error refreshing account: {e}"); + return Ok(ExitCode::FAILURE); + } + } + + accounts.save(&accounts_path).await?; + } + _ => () // nothing to be done + } + + println!("Preparing the game files..."); let launcher = Launcher::new(&home, !cli.offline).await?; let launch = launcher.prepare_launch(inst, Settings::get_instance_path(selection), settings.client_id).await.map_err(|e| { @@ -424,7 +456,9 @@ async fn main_inner(cli: Cli) -> Result> { })?; dbg!(&launch); - info!("ok"); + info!("ok!"); + + println!("Launching the game!"); ozone::launcher::run_the_game(&launch)?; } @@ -436,7 +470,7 @@ async fn main_inner(cli: Cli) -> Result> { #[tokio::main] async fn main() -> ExitCode { // use Warn as the default level to minimize noise on the command line - simple_logger::SimpleLogger::new().with_level(LevelFilter::Warn).env().init().unwrap(); + simple_logger::SimpleLogger::new().env().init().unwrap(); let arg = Cli::parse(); -- cgit v1.2.3-70-g09d2