diff --git a/Cargo.lock b/Cargo.lock index 70871d2..61af5f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -289,6 +289,7 @@ dependencies = [ "gettext-rs", "git2", "gtk4", + "lazy_static", "libadwaita", "libmonado-rs", "libusb", diff --git a/Cargo.toml b/Cargo.toml index 8aa9db4..066524d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ git2 = "0.17.2" gtk4 = { version = "0.7.2", features = [ "v4_10", ] } +lazy_static = "1.4.0" libadwaita = { version = "0.5.2", features = [ "v1_3" ] } diff --git a/README.md b/README.md index cabdb33..b87fb1f 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,12 @@ cd envision ./dist/appimage/build_appimage.sh ``` +# Feature flags + +|Env var|Values|Default| +|---|---|---| +|`ENVISION_FF_USE_LIBMONADO`|`1`: enabled; `0`: disabled|`0`| + # Common issues ## NOSUID with systemd-homed diff --git a/src/ui/app.rs b/src/ui/app.rs index 565ab1b..c4ae23c 100644 --- a/src/ui/app.rs +++ b/src/ui/app.rs @@ -3,6 +3,7 @@ use super::alert::alert; use super::build_window::{BuildStatus, BuildWindow}; use super::debug_view::{DebugView, DebugViewMsg}; use super::fbt_config_editor::{FbtConfigEditor, FbtConfigEditorInit, FbtConfigEditorMsg}; +use super::feature_flags::FF_LIBMONADO_DEVICE_ENUMERATION_ENABLED; use super::job_worker::internal_worker::JobWorkerOut; use super::job_worker::job::WorkerJob; use super::job_worker::JobWorker; @@ -312,24 +313,26 @@ impl SimpleComponent for App { } Msg::ClockTicking => { self.main_view.sender().emit(MainViewMsg::ClockTicking); - if let Some(w) = self.xrservice_worker.as_ref() { - if { - let state = w.state.lock().unwrap(); - state.exit_status.is_none() && !state.stop_requested - } { - if let Some(monado) = self.libmonado.as_ref() { - self.xr_devices = XRDevice::merge( - &self.xr_devices, - &XRDevice::from_libmonado(monado), - ); - self.main_view - .sender() - .emit(MainViewMsg::UpdateDevices(self.xr_devices.clone())); - } else { - if let Some(so) = self.get_selected_profile().libmonado_so() { - self.libmonado = libmonado_rs::Monado::create(so).ok(); - if self.libmonado.is_some() { - sender.input(Msg::ClockTicking); + if *FF_LIBMONADO_DEVICE_ENUMERATION_ENABLED { + if let Some(w) = self.xrservice_worker.as_ref() { + if { + let state = w.state.lock().unwrap(); + state.exit_status.is_none() && !state.stop_requested + } { + if let Some(monado) = self.libmonado.as_ref() { + self.xr_devices = XRDevice::merge( + &self.xr_devices, + &XRDevice::from_libmonado(monado), + ); + self.main_view + .sender() + .emit(MainViewMsg::UpdateDevices(self.xr_devices.clone())); + } else { + if let Some(so) = self.get_selected_profile().libmonado_so() { + self.libmonado = libmonado_rs::Monado::create(so).ok(); + if self.libmonado.is_some() { + sender.input(Msg::ClockTicking); + } } } } @@ -341,7 +344,17 @@ impl SimpleComponent for App { match MonadoLog::new_from_str(row.as_str()) { None => {} Some(parsed) => { - if let Some(tracker) = + if !*FF_LIBMONADO_DEVICE_ENUMERATION_ENABLED + && parsed.func == "p_create_system" + { + let n_devs = XRDevice::from_log_message(parsed.message.as_str()); + self.xr_devices = XRDevice::merge(&self.xr_devices, &n_devs); + self.main_view + .sender() + .emit(MainViewMsg::UpdateDevices( + self.xr_devices.clone(), + )); + } else if let Some(tracker) = XRDevice::generic_tracker_from_log_row(parsed.message.as_str()) { self.xr_devices.push(tracker); diff --git a/src/ui/feature_flags.rs b/src/ui/feature_flags.rs new file mode 100644 index 0000000..ffdea46 --- /dev/null +++ b/src/ui/feature_flags.rs @@ -0,0 +1,10 @@ +use std::env; +use lazy_static::lazy_static; + +fn get_ff_libmonado_device_enumeration_enabled() -> bool { + env::var("ENVISION_FF_USE_LIBMONADO").unwrap_or_default() == "1" +} + +lazy_static! { + pub static ref FF_LIBMONADO_DEVICE_ENUMERATION_ENABLED: bool = get_ff_libmonado_device_enumeration_enabled(); +} diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 973ca96..ef381fc 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -16,3 +16,4 @@ pub mod profile_editor; pub mod steam_launch_options_box; pub mod util; pub mod wivrn_conf_editor; +pub mod feature_flags;