From cd5c0f146cf010c9bf58e2960030bd6669a2d672 Mon Sep 17 00:00:00 2001 From: LDprg Date: Sun, 10 Sep 2023 20:07:03 +0200 Subject: [PATCH] Add freerdp detection --- winapps-cli/src/main.rs | 10 +++++++++- winapps/Cargo.toml | 1 - winapps/src/freerdp.rs | 23 ++++++++++++++--------- winapps/src/lib.rs | 14 ++++++-------- 4 files changed, 29 insertions(+), 19 deletions(-) diff --git a/winapps-cli/src/main.rs b/winapps-cli/src/main.rs index a7af7dd..b82f71d 100644 --- a/winapps-cli/src/main.rs +++ b/winapps-cli/src/main.rs @@ -1,4 +1,6 @@ use clap::Command; +use winapps::RemoteClient; +use winapps::freerdp::freerdp_back::Freerdp; fn cli() -> Command { Command::new("winapps-cli") @@ -14,14 +16,20 @@ fn main() { let cli = cli(); let matches = cli.clone().get_matches(); + let client: &dyn RemoteClient = &Freerdp{}; + match matches.subcommand() { Some(("check", _)) => { println!("Checking remote connection"); - let _config = winapps::load_config(None); + let config = winapps::load_config(None); + client.check_depends(config); } Some(("connect", _)) => { println!("Connecting to remote"); + + let config = winapps::load_config(None); + client.run_app(config, "explorer"); } Some((_, _)) => { cli.about("Command not found, try existing ones!") diff --git a/winapps/Cargo.toml b/winapps/Cargo.toml index abd213a..629eb36 100644 --- a/winapps/Cargo.toml +++ b/winapps/Cargo.toml @@ -7,6 +7,5 @@ edition = "2021" [dependencies] derive-new = "0.5.9" -home = "0.5.5" serde = { version = "1.0.171", features = ["derive"] } toml = "0.7.6" diff --git a/winapps/src/freerdp.rs b/winapps/src/freerdp.rs index 8ad0c5f..1150320 100644 --- a/winapps/src/freerdp.rs +++ b/winapps/src/freerdp.rs @@ -1,18 +1,23 @@ pub mod freerdp_back { - use crate::RemoteClient; + use std::process::{Command, Stdio}; - struct Freerdp {} + use crate::{RemoteClient, Config}; + + pub struct Freerdp {} impl RemoteClient for Freerdp { - fn check_depends(&self) { - todo!() + fn check_depends(&self, _config: Config) { + + let mut xfreerdp = Command::new("xfreerdp"); + xfreerdp.stdout(Stdio::null()); + xfreerdp.args(["-h"]); + xfreerdp.spawn().expect("Freerdp execution failed! It needs to be installed!"); + println!("Freerdp found!"); + + println!("Checks success!"); } - fn load_config(&self, _path: &str) { - todo!() - } - - fn run_app(&self, _app: &str) { + fn run_app(&self, config: Config, _app: &str) { todo!() } } diff --git a/winapps/src/lib.rs b/winapps/src/lib.rs index e178c9d..9d17961 100644 --- a/winapps/src/lib.rs +++ b/winapps/src/lib.rs @@ -1,20 +1,18 @@ use derive_new::new; -use home::home_dir; use serde::{Deserialize, Serialize}; use std::io::Write; use std::{ + env, fs::{self, File}, path::Path, }; -mod freerdp; +pub mod freerdp; pub trait RemoteClient { - fn check_depends(&self); + fn check_depends(&self, config: Config); - fn load_config(&self, path: &str); - - fn run_app(&self, app: &str); + fn run_app(&self, config: Config, app: &str); } #[derive(new, Debug, Deserialize, Serialize)] @@ -44,8 +42,8 @@ pub struct RemoteConfig { } pub fn load_config(path: Option<&str>) -> Config { - let home = home_dir().expect("Could not find the home path!"); - let default = &format!("{}{}", home.to_str().unwrap(), "/.config/winapps/"); + let config = env::var("XDG_CONFIG_HOME").expect("Could not find the home path!"); + let default = &format!("{}{}", config, "/winapps/"); let path = Path::new(path.unwrap_or(default)); let config = Config::new();