fix: more gentle libmonado probing (keep monado instance around)

This commit is contained in:
Gabriele Musco 2023-09-14 21:57:22 +02:00
commit 98218ab396
No known key found for this signature in database
GPG key ID: 1068D795C80E51DE
2 changed files with 36 additions and 23 deletions

View file

@ -94,6 +94,8 @@ pub struct App {
xr_devices: XRDevices, xr_devices: XRDevices,
#[tracker::do_not_track] #[tracker::do_not_track]
fbt_config_editor: Option<Controller<FbtConfigEditor>>, fbt_config_editor: Option<Controller<FbtConfigEditor>>,
#[tracker::do_not_track]
libmonado: Option<libmonado_rs::Monado>,
} }
#[derive(Debug)] #[derive(Debug)]
@ -218,6 +220,7 @@ impl App {
if let Some(worker) = self.xrservice_worker.as_ref() { if let Some(worker) = self.xrservice_worker.as_ref() {
worker.stop(); worker.stop();
} }
self.libmonado = None;
self.restore_openxr_openvr_files(); self.restore_openxr_openvr_files();
self.main_view self.main_view
.sender() .sender()
@ -310,13 +313,26 @@ impl SimpleComponent for App {
Msg::ClockTicking => { Msg::ClockTicking => {
self.main_view.sender().emit(MainViewMsg::ClockTicking); self.main_view.sender().emit(MainViewMsg::ClockTicking);
if let Some(w) = self.xrservice_worker.as_ref() { if let Some(w) = self.xrservice_worker.as_ref() {
if w.state.lock().unwrap().exit_status.is_none() { 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 self.xr_devices
.merge(XRDevices::from_libmonado(&self.get_selected_profile())); .merge(XRDevices::from_libmonado(monado));
self.main_view self.main_view
.sender() .sender()
.emit(MainViewMsg::UpdateDevices(Some(self.xr_devices.clone()))); .emit(MainViewMsg::UpdateDevices(Some(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);
}
}
}
}
} }
} }
Msg::ParseLog(rows) => { Msg::ParseLog(rows) => {
@ -657,6 +673,7 @@ impl SimpleComponent for App {
xr_devices: XRDevices::default(), xr_devices: XRDevices::default(),
fbt_config_editor: None, fbt_config_editor: None,
restart_xrservice: false, restart_xrservice: false,
libmonado: None,
}; };
let widgets = view_output!(); let widgets = view_output!();

View file

@ -71,10 +71,8 @@ impl XRDevices {
} }
} }
pub fn from_libmonado(prof: &Profile) -> Self { pub fn from_libmonado(monado: &libmonado_rs::Monado) -> Self {
let mut res = Self::default(); let mut res = Self::default();
if let Some(libmonado_path) = prof.libmonado_so() {
if let Ok(monado) = libmonado_rs::Monado::create(libmonado_path) {
[ [
XRDevice::Head, XRDevice::Head,
XRDevice::Left, XRDevice::Left,
@ -88,8 +86,6 @@ impl XRDevices {
res.set_device(&xrd, dev.name); res.set_device(&xrd, dev.name);
} }
}); });
}
}
res res
} }