diff --git a/src/paths.rs b/src/paths.rs index cfbdfb9..779d9c1 100644 --- a/src/paths.rs +++ b/src/paths.rs @@ -1,4 +1,4 @@ -use crate::constants::CMD_NAME; +use crate::{constants::CMD_NAME, profile::XRServiceType}; use std::{env, fs::create_dir_all, path::Path}; pub fn data_opencomposite_path() -> String { @@ -106,3 +106,14 @@ pub fn get_exec_prefix() -> String { .unwrap() .to_string() } + +pub fn get_ipc_file_path(xrservice_type: &XRServiceType) -> String { + format!( + "{runtime}/{xrservice}_comp_ipc", + runtime=get_xdg_runtime_dir(), + xrservice = match xrservice_type { + XRServiceType::Monado => "monado", + XRServiceType::Wivrn => "wivrn", + } + ) +} diff --git a/src/profile.rs b/src/profile.rs index 7095d8e..2ba9db4 100644 --- a/src/profile.rs +++ b/src/profile.rs @@ -1,7 +1,7 @@ use crate::{ file_utils::get_writer, paths::{ - data_monado_path, data_opencomposite_path, get_data_dir, BWRAP_SYSTEM_PREFIX, SYSTEM_PREFIX, + data_monado_path, data_opencomposite_path, get_data_dir, BWRAP_SYSTEM_PREFIX, SYSTEM_PREFIX, get_ipc_file_path, }, }; use serde::{Deserialize, Serialize}; @@ -259,13 +259,7 @@ impl Profile { XRServiceType::Wivrn => "wivrn", } ), - format!( - "PRESSURE_VESSEL_FILESYSTEMS_RW=$XDG_RUNTIME_DIR/{xrservice}_comp_ipc", - xrservice = match self.xrservice_type { - XRServiceType::Monado => "monado", - XRServiceType::Wivrn => "wivrn", - } - ), + get_ipc_file_path(&self.xrservice_type), "%command%".into(), ] .join(" ") diff --git a/src/ui/app.rs b/src/ui/app.rs index 8e55960..8371b4a 100644 --- a/src/ui/app.rs +++ b/src/ui/app.rs @@ -28,6 +28,7 @@ use crate::file_builders::openvrpaths_vrpath::{ }; use crate::file_utils::setcap_cap_sys_nice_eip; use crate::log_parser::MonadoLog; +use crate::paths::get_ipc_file_path; use crate::profile::{Profile, XRServiceType}; use crate::profiles::lighthouse::lighthouse_profile; use crate::profiles::system_valve_index::system_valve_index_profile; @@ -48,6 +49,7 @@ use relm4::adw::ResponseAppearance; use relm4::gtk::glib; use relm4::{new_action_group, new_stateful_action, new_stateless_action, prelude::*}; use relm4::{ComponentParts, ComponentSender, SimpleComponent}; +use std::fs::remove_file; use std::time::Duration; #[tracker::track] @@ -147,6 +149,9 @@ impl App { }; self.debug_view.sender().emit(DebugViewMsg::ClearLog); self.xr_devices = XRDevices::default(); + remove_file(&get_ipc_file_path(&prof.xrservice_type)) + .is_err() + .then(|| println!("Failed to remove xrservice IPC file")); let mut runner = CmdRunner::xrservice_runner_from_profile(&prof); match runner.try_start() { Ok(_) => { @@ -342,9 +347,9 @@ impl SimpleComponent for App { None => {} Some(devices) => { self.xr_devices.merge(devices.clone()); - self.main_view - .sender() - .emit(MainViewMsg::UpdateDevices(Some(self.xr_devices.clone()))); + self.main_view.sender().emit(MainViewMsg::UpdateDevices( + Some(self.xr_devices.clone()), + )); break; } };