feat: application doesn't need tracker; remove useless variable for debug view state; remove xrdevice merging between refreshes, always replace with updated list

This commit is contained in:
Gabriele Musco 2024-08-04 17:39:44 +02:00
commit 2380df2612
2 changed files with 2 additions and 114 deletions

View file

@ -59,61 +59,32 @@ use std::collections::VecDeque;
use std::fs::remove_file; use std::fs::remove_file;
use std::time::Duration; use std::time::Duration;
#[tracker::track]
pub struct App { pub struct App {
enable_debug_view: bool,
#[tracker::do_not_track]
application: adw::Application, application: adw::Application,
#[tracker::do_not_track]
app_win: adw::ApplicationWindow, app_win: adw::ApplicationWindow,
#[tracker::do_not_track]
inhibit_id: Option<u32>, inhibit_id: Option<u32>,
#[tracker::do_not_track]
main_view: Controller<MainView>, main_view: Controller<MainView>,
#[tracker::do_not_track]
debug_view: Controller<DebugView>, debug_view: Controller<DebugView>,
#[tracker::do_not_track]
split_view: Option<adw::NavigationSplitView>, split_view: Option<adw::NavigationSplitView>,
#[tracker::do_not_track]
about_dialog: adw::AboutDialog, about_dialog: adw::AboutDialog,
#[tracker::do_not_track]
build_window: Controller<BuildWindow>, build_window: Controller<BuildWindow>,
#[tracker::do_not_track]
setcap_confirm_dialog: adw::MessageDialog, setcap_confirm_dialog: adw::MessageDialog,
#[tracker::do_not_track]
libsurvive_setup_window: Controller<LibsurviveSetupWindow>, libsurvive_setup_window: Controller<LibsurviveSetupWindow>,
#[tracker::do_not_track]
config: Config, config: Config,
#[tracker::do_not_track]
xrservice_worker: Option<JobWorker>, xrservice_worker: Option<JobWorker>,
#[tracker::do_not_track]
autostart_worker: Option<JobWorker>, autostart_worker: Option<JobWorker>,
#[tracker::do_not_track]
restart_xrservice: bool, restart_xrservice: bool,
#[tracker::do_not_track]
build_worker: Option<JobWorker>, build_worker: Option<JobWorker>,
#[tracker::do_not_track]
profiles: Vec<Profile>, profiles: Vec<Profile>,
#[tracker::do_not_track]
xr_devices: Vec<XRDevice>, xr_devices: Vec<XRDevice>,
#[tracker::do_not_track]
libmonado: Option<libmonado_rs::Monado>, libmonado: Option<libmonado_rs::Monado>,
#[tracker::do_not_track]
wivrn_conf_editor: Option<Controller<WivrnConfEditor>>, wivrn_conf_editor: Option<Controller<WivrnConfEditor>>,
#[tracker::do_not_track]
skip_depcheck: bool, skip_depcheck: bool,
#[tracker::do_not_track]
wivrn_appimage_warn_shown: bool, wivrn_appimage_warn_shown: bool,
#[tracker::do_not_track]
configure_wivrn_action: gtk::gio::SimpleAction, configure_wivrn_action: gtk::gio::SimpleAction,
#[tracker::do_not_track]
openxr_prober_worker: Option<JobWorker>, openxr_prober_worker: Option<JobWorker>,
} }
@ -348,8 +319,6 @@ impl SimpleComponent for App {
} }
fn update(&mut self, message: Self::Input, sender: ComponentSender<Self>) { fn update(&mut self, message: Self::Input, sender: ComponentSender<Self>) {
self.reset();
match message { match message {
Msg::NoOp => {} Msg::NoOp => {}
Msg::OnServiceLog(rows) => { Msg::OnServiceLog(rows) => {
@ -391,10 +360,7 @@ impl SimpleComponent for App {
}; };
if stop_condition { if stop_condition {
if let Some(monado) = self.libmonado.as_ref() { if let Some(monado) = self.libmonado.as_ref() {
self.xr_devices = XRDevice::merge( self.xr_devices = XRDevice::from_libmonado(monado);
&self.xr_devices,
&XRDevice::from_libmonado(monado),
);
self.main_view self.main_view
.sender() .sender()
.emit(MainViewMsg::UpdateDevices(self.xr_devices.clone())); .emit(MainViewMsg::UpdateDevices(self.xr_devices.clone()));
@ -408,7 +374,6 @@ impl SimpleComponent for App {
} }
} }
Msg::EnableDebugViewChanged(val) => { Msg::EnableDebugViewChanged(val) => {
self.set_enable_debug_view(val);
self.config.debug_view_enabled = val; self.config.debug_view_enabled = val;
self.config.save(); self.config.save();
self.split_view.clone().unwrap().set_collapsed(!val); self.split_view.clone().unwrap().set_collapsed(!val);
@ -884,7 +849,6 @@ impl SimpleComponent for App {
let selected_profile = config.get_selected_profile(&profiles); let selected_profile = config.get_selected_profile(&profiles);
let mut model = App { let mut model = App {
tracker: 0,
application: init.application, application: init.application,
app_win: root.clone(), app_win: root.clone(),
inhibit_id: None, inhibit_id: None,
@ -923,7 +887,6 @@ impl SimpleComponent for App {
.detach(), .detach(),
split_view: None, split_view: None,
setcap_confirm_dialog, setcap_confirm_dialog,
enable_debug_view: config.debug_view_enabled,
config, config,
profiles, profiles,
xrservice_worker: None, xrservice_worker: None,
@ -955,7 +918,7 @@ impl SimpleComponent for App {
) )
); );
actions.add_action(RelmAction::<DebugViewToggleAction>::new_stateful( actions.add_action(RelmAction::<DebugViewToggleAction>::new_stateful(
&model.enable_debug_view, &model.config.debug_view_enabled,
clone!( clone!(
#[strong] #[strong]
sender, sender,

View file

@ -319,79 +319,4 @@ impl XRDevice {
} }
res res
} }
#[deprecated]
pub fn from_log_message(s: &str) -> Vec<Self> {
let mut res = vec![];
let rows = s.split('\n');
let mut in_section = false;
for row in rows {
if !in_section && row.starts_with("\tIn roles:") {
in_section = true;
continue;
}
if in_section {
if row.starts_with("\tResult:") {
break;
}
match row.trim().split(": ").collect::<Vec<&str>>()[..] {
[_, "<none>"] => {}
[dev_type_s, name] => {
if let Some(xrdt) = XRDeviceRole::from_monado_str(dev_type_s) {
res.push(Self {
dev_type: xrdt,
name: name.to_string(),
..Default::default()
});
}
}
_ => {}
}
}
}
res
}
pub fn merge(old: &[Self], new: &[Self]) -> Vec<Self> {
if old.is_empty() {
return Vec::from(new);
}
let new_dev_types = new
.iter()
.filter_map(|d| {
if d.dev_type == XRDeviceRole::GenericTracker {
None
} else {
Some(d.dev_type)
}
})
.collect::<Vec<XRDeviceRole>>();
let mut res = old
.iter()
.filter(|d| !new_dev_types.contains(&d.dev_type))
.map(Self::clone)
.collect::<Vec<Self>>();
let old_tracker_serials = old
.iter()
.filter_map(|d| {
if d.dev_type == XRDeviceRole::GenericTracker {
d.serial.clone()
} else {
None
}
})
.collect::<Vec<String>>();
for n_dev in new {
if n_dev.dev_type == XRDeviceRole::GenericTracker {
if let Some(n_serial) = n_dev.serial.as_ref() {
if !old_tracker_serials.contains(n_serial) {
res.push(n_dev.clone());
}
}
} else {
res.push(n_dev.clone());
}
}
res
}
} }