From 8f3f9b8759eecca4768f4860cbf6dc878337fb82 Mon Sep 17 00:00:00 2001 From: Gabriele Musco Date: Sat, 14 Jun 2025 17:53:05 +0200 Subject: [PATCH] feat: add some messages related to setcap output to build window; add build completed message to build window --- src/ui/app.rs | 24 ++++++++++++++++++++++++ src/ui/build_window.rs | 16 ++++++++++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/ui/app.rs b/src/ui/app.rs index 4cc6520..6201648 100644 --- a/src/ui/app.rs +++ b/src/ui/app.rs @@ -43,6 +43,7 @@ use crate::{ steam_linux_runtime_injector::{ restore_runtime_entrypoint, set_runtime_entrypoint_launch_opts_from_profile, }, + termcolor::TermColor, util::file_utils::{ setcap_cap_sys_nice_eip, setcap_cap_sys_nice_eip_cmd, verify_cap_sys_nice_eip, }, @@ -653,6 +654,10 @@ impl AsyncComponent for App { if dep_pkexec().check() { self.setcap_confirm_dialog.present(Some(&self.app_win)); } else { + self.build_window + .sender() + .emit(BuildWindowMsg::UpdateContent(vec![TermColor::Red + .colorize("pkexec not found, cannot set capabilities\n")])); alert_w_widget( "pkexec not found", Some(&format!( @@ -734,6 +739,7 @@ impl AsyncComponent for App { } Msg::RunSetCap => { if !dep_pkexec().check() { + // there's a precheck ahead of this, this should likely never happen error!("pkexec not found, skipping setcap"); } else { let profile = self.get_selected_profile(); @@ -751,8 +757,26 @@ impl AsyncComponent for App { if let Err(e) = setcap_cap_sys_nice_eip(&profile).await { setcap_failed_dialog(); error!("failed running setcap: {e}"); + self.build_window + .sender() + .emit(BuildWindowMsg::UpdateContent(vec![ + TermColor::Red.colorize("Setting capabilities failed\n") + ])); } else if !verify_cap_sys_nice_eip(&profile).await { setcap_failed_dialog(); + error!("setcap succeeded but capabilities were reset"); + self.build_window + .sender() + .emit(BuildWindowMsg::UpdateContent(vec![TermColor::Red + .colorize( + "Setting capabilities succeeded, but capabilities have been reset\n", + )])); + } else { + self.build_window + .sender() + .emit(BuildWindowMsg::UpdateContent(vec![ + TermColor::Green.colorize("Capabilities set correctly\n") + ])); } } } diff --git a/src/ui/build_window.rs b/src/ui/build_window.rs index 7b0ac69..f6f8b21 100644 --- a/src/ui/build_window.rs +++ b/src/ui/build_window.rs @@ -1,3 +1,5 @@ +use crate::termcolor::TermColor; + use super::{term_widget::TermWidget, SENDER_IO_ERR_MSG}; use adw::prelude::*; use relm4::prelude::*; @@ -164,8 +166,18 @@ impl SimpleComponent for BuildWindow { label.remove_css_class("success"); label.remove_css_class("error"); match status { - BuildStatus::Done => label.add_css_class("success"), - BuildStatus::Error(_) => label.add_css_class("error"), + BuildStatus::Done => { + label.add_css_class("success"); + sender.input(BuildWindowMsg::UpdateContent(vec![ + TermColor::Blue.colorize("Build completed!\n") + ])); + } + BuildStatus::Error(_) => { + label.add_css_class("error"); + sender.input(BuildWindowMsg::UpdateContent(vec![ + TermColor::Blue.colorize("Build failed!\n") + ])); + } _ => {} } if status != BuildStatus::Building {