From 4ba1e6c6addd9253ef92f52545ed154ad40bb05a Mon Sep 17 00:00:00 2001 From: Hannes Kuchelmeister Date: Tue, 2 Jul 2024 18:54:10 +0200 Subject: [PATCH] add detection of installed tools in host environment --- src/app.rs | 8 +++++-- src/util.rs | 1 + src/util/prerequisit.rs | 51 +++++++++++++++++++++++++++++++++++++++++ src/util/toolbox.rs | 3 ++- 4 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 src/util/prerequisit.rs diff --git a/src/app.rs b/src/app.rs index abbd6a4..ed8bc28 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1,4 +1,7 @@ use crate::gtk::Align; +use crate::util::prerequisit::get_installed_terminals; +use crate::util::prerequisit::is_toolbox_installed; + use crate::util::toolbox::ToolbxContainer; use relm4::adw::prelude::PreferencesGroupExt; use relm4::factory::FactoryHashMap; @@ -181,8 +184,9 @@ impl Component for App { }; sender.spawn_oneshot_command(|| { - // TODO: actually check for compatibility - AppCommandMsg::PrerequisitsInstalled(true) + let terminals = get_installed_terminals().unwrap_or_default(); + let toolbox_installed = is_toolbox_installed().unwrap_or(false); + AppCommandMsg::PrerequisitsInstalled(terminals.len() > 0 && toolbox_installed) }); actions.add_action(shortcuts_action); diff --git a/src/util.rs b/src/util.rs index b763831..ac9dcba 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1 +1,2 @@ +pub mod prerequisit; pub mod toolbox; diff --git a/src/util/prerequisit.rs b/src/util/prerequisit.rs new file mode 100644 index 0000000..5213ce1 --- /dev/null +++ b/src/util/prerequisit.rs @@ -0,0 +1,51 @@ +use crate::util::toolbox::ToolbxError; +use std::process::Command; + +pub enum TerminalType { + GnomeTerminal, +} + +pub fn get_installed_terminals() -> Result, ToolbxError> { + let output = Command::new("flatpak-spawn") + .arg("--host") + .arg("gnome-terminal") + .arg("--version") + .output(); + + if output.is_err() { + return Err(ToolbxError::CommandExecutionError( + output.unwrap_err().to_string(), + )); + } + let output = output.unwrap(); + + if output.status.code() == Some(0) { + Ok(vec![TerminalType::GnomeTerminal]) + } else { + Err(ToolbxError::CommandUnsuccessfulError( + String::from_utf8_lossy(&output.stderr).into_owned(), + )) + } +} + +pub fn is_toolbox_installed() -> Result { + let output = Command::new("flatpak-spawn") + .arg("--host") + .arg("toolbox") + .arg("--version") + .output(); + + if output.is_err() { + return Err(ToolbxError::CommandExecutionError( + output.unwrap_err().to_string(), + )); + } + let output = output.unwrap(); + if output.status.code() == Some(0) { + Ok(true) + } else { + Err(ToolbxError::CommandUnsuccessfulError( + String::from_utf8_lossy(&output.stderr).into_owned(), + )) + } +} diff --git a/src/util/toolbox.rs b/src/util/toolbox.rs index 827c8e1..a4002bc 100644 --- a/src/util/toolbox.rs +++ b/src/util/toolbox.rs @@ -1,4 +1,3 @@ -use serde::{Deserialize, Serialize}; use std::{fmt::Display, process::Command, str::FromStr}; #[derive(Debug, PartialEq)] @@ -138,6 +137,7 @@ pub fn start_toolbox_container(hash: &str) -> Result<(), ToolbxError> { .output(); if output.is_err() { + dbg!(&output); return Err(ToolbxError::CommandExecutionError( output.unwrap_err().to_string(), )); @@ -155,6 +155,7 @@ pub fn start_toolbox_container(hash: &str) -> Result<(), ToolbxError> { if output.status.code() == Some(0) { Ok(()) } else { + dbg!(&output); Err(ToolbxError::CommandUnsuccessfulError( String::from_utf8_lossy(&output.stderr).into_owned(), ))