From 7960fdcbff44b4cd858203562a8f613efe39eb8d Mon Sep 17 00:00:00 2001 From: bigfoot547 Date: Tue, 4 Feb 2025 22:14:54 -0600 Subject: get started on cli --- ozone-cli/src/cli.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ ozone-cli/src/main.rs | 47 +++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 85 insertions(+), 8 deletions(-) create mode 100644 ozone-cli/src/cli.rs (limited to 'ozone-cli/src') diff --git a/ozone-cli/src/cli.rs b/ozone-cli/src/cli.rs new file mode 100644 index 0000000..d288e3c --- /dev/null +++ b/ozone-cli/src/cli.rs @@ -0,0 +1,46 @@ +use std::path::PathBuf; +use clap::{Args, Parser, Subcommand}; + +#[derive(Subcommand, Debug)] +pub enum ProfileCommand { + Select, + Create, + List +} + +#[derive(Args, Debug)] +pub struct ProfileArgs { + #[command(subcommand)] + subcmd: Option +} + +impl ProfileArgs { + pub fn take_command(&mut self) -> ProfileCommand { + self.subcmd.take().unwrap_or(ProfileCommand::List) + } +} + +#[derive(Subcommand, Debug)] +pub enum RootCommand { + Profile(ProfileArgs), + Instance, + +} + +#[derive(Parser, Debug)] +#[clap(version)] +pub struct Cli { + /// Run the launcher in offline mode. The launcher will not attempt to make any requests using + /// the network. The launcher _will_ verify the integrity of files required to launch the game, + /// and refuse to launch the game with an error if it must download a file. + #[arg(long, global = true)] + pub offline: bool, + + /// Directory which the launcher will perform its work in. Defaults to an application-specific + /// directory based on your OS. + #[arg(long, global = true, value_hint = clap::ValueHint::DirPath)] + pub home: Option, + + #[command(subcommand)] + pub subcmd: RootCommand +} diff --git a/ozone-cli/src/main.rs b/ozone-cli/src/main.rs index a17979e..b449209 100644 --- a/ozone-cli/src/main.rs +++ b/ozone-cli/src/main.rs @@ -1,16 +1,49 @@ +mod cli; + use std::error::Error; +use std::path::PathBuf; +use std::process::{ExitCode, ExitStatus}; use log::{error, info}; +use clap::{Args, Parser, Subcommand}; use ozone::launcher::{Launcher, Settings}; +use crate::cli::{Cli, ProfileCommand, RootCommand}; + +async fn main_inner(cli: Cli) -> Result> { + let Some(home) = cli.home.or_else(|| Launcher::sensible_home()) else { + error!("Could not choose a launcher home directory. Please choose one with `--home'."); + Ok(ExitCode::FAILURE) // we print our own error message + }; + + info!("Sensible home could be {home:?}"); + let settings = Settings::load(home.join("ozone.json")).await?; + settings.save().await?; + + match cli.subcmd { + RootCommand::Profile(mut p) => match p.take_command() { + ProfileCommand::List => { + + } + } + } + + Ok(ExitCode::SUCCESS) +} + #[tokio::main] -async fn main() -> Result<(), Box> { +async fn main() -> ExitCode { simple_logger::SimpleLogger::new().env().init().unwrap(); - info!("Sensible home could be {:?}", Launcher::sensible_home()); - let settings = Settings::load("./work/ozone.json").await?; - settings.save().await?; + let arg = dbg!(Cli::parse()); - let launcher = Launcher::new("./work", true).await?; + main_inner(arg).await.unwrap_or_else(|e| { + error!("Launcher initialization error:"); + error!("{e}"); + + ExitCode::FAILURE + }) + + /*let launcher = Launcher::new("./work", true).await?; let profile = settings.get_profile("default").unwrap(); @@ -22,7 +55,5 @@ async fn main() -> Result<(), Box> { dbg!(&launch); info!("ok"); - ozone::launcher::run_the_game(&launch)?; - - Ok(()) + ozone::launcher::run_the_game(&launch)?;*/ } -- cgit v1.2.3-70-g09d2