diff --git a/winapps-cli/src/main.rs b/winapps-cli/src/main.rs index a1b6a72..c3dee4b 100644 --- a/winapps-cli/src/main.rs +++ b/winapps-cli/src/main.rs @@ -1,4 +1,4 @@ -pub(crate) use clap::Command; +use clap::{arg, Command}; use winapps::freerdp::freerdp_back::Freerdp; use winapps::RemoteClient; @@ -10,6 +10,11 @@ fn cli() -> Command { .allow_external_subcommands(true) .subcommand(Command::new("check").about("Checks remote connection")) .subcommand(Command::new("connect").about("Connects to remote")) + .subcommand( + Command::new("app") + .about("Connects to app on remote") + .arg(arg!( "App to open")), + ) } fn main() { @@ -29,7 +34,13 @@ fn main() { println!("Connecting to remote"); let config = winapps::load_config(None); - client.run_app(config, "explorer.exe"); + client.run_app(config, None); + } + Some(("app", sub_matches)) => { + println!("Connecting to app on remote"); + + let config = winapps::load_config(None); + client.run_app(config, sub_matches.get_one::("APP")); } Some((_, _)) => { cli.about("Command not found, try existing ones!") diff --git a/winapps/src/freerdp.rs b/winapps/src/freerdp.rs index d9378da..77646e1 100644 --- a/winapps/src/freerdp.rs +++ b/winapps/src/freerdp.rs @@ -19,25 +19,41 @@ pub mod freerdp_back { println!("All dependencies found!"); println!("Running explorer as test!"); - self.run_app(config, "explorer.exe"); + self.run_app(config, Some(&"explorer.exe".to_string())); println!("Test finished!"); } - fn run_app(&self, config: Config, app: &str) { + fn run_app(&self, config: Config, app: Option<&String>) { let mut xfreerdp = Command::new("xfreerdp"); - xfreerdp.args([ - "/app:".to_owned() + app, - "/d:".to_owned() + &config.rdp.domain, - "/u:".to_owned() + &config.rdp.username, - "/p:".to_owned() + &config.rdp.password, - "/v:".to_owned() + &config.rdp.host, - "/dynamic-resolution".to_owned(), - "+auto-reconnect".to_owned(), - "+clipboard".to_owned(), - "+home-drive".to_owned(), - "-wallpaper".to_owned(), - ]); + match app { + Some(exe) => { + xfreerdp.args([ + "/app:".to_owned() + exe, + "-wallpaper".to_owned(), + "/d:".to_owned() + &config.rdp.domain, + "/u:".to_owned() + &config.rdp.username, + "/p:".to_owned() + &config.rdp.password, + "/v:".to_owned() + &config.rdp.host, + "/dynamic-resolution".to_owned(), + "+auto-reconnect".to_owned(), + "+clipboard".to_owned(), + "+home-drive".to_owned(), + ]); + } + None => { + xfreerdp.args([ + "/d:".to_owned() + &config.rdp.domain, + "/u:".to_owned() + &config.rdp.username, + "/p:".to_owned() + &config.rdp.password, + "/v:".to_owned() + &config.rdp.host, + "/dynamic-resolution".to_owned(), + "+auto-reconnect".to_owned(), + "+clipboard".to_owned(), + "+home-drive".to_owned(), + ]); + } + } xfreerdp.spawn().expect("Freerdp execution failed!"); } } diff --git a/winapps/src/lib.rs b/winapps/src/lib.rs index b3d268b..83b5d7c 100644 --- a/winapps/src/lib.rs +++ b/winapps/src/lib.rs @@ -12,7 +12,7 @@ pub mod freerdp; pub trait RemoteClient { fn check_depends(&self, config: Config); - fn run_app(&self, config: Config, app: &str); + fn run_app(&self, config: Config, app: Option<&String>); } #[derive(new, Debug, Deserialize, Serialize)]