diff --git a/src/ui/devices_box.rs b/src/ui/devices_box.rs index 4bd8cab..3aba4aa 100644 --- a/src/ui/devices_box.rs +++ b/src/ui/devices_box.rs @@ -43,75 +43,57 @@ impl SimpleComponent for DevicesBox { self.set_devices(devs); let mut guard = self.device_rows.guard(); guard.clear(); - if !self.devices.is_empty() { - let mut has_head = false; - let mut has_left = false; - let mut has_right = false; - let mut models: Vec = vec![]; - let mut generic: Vec<&XRDevice> = vec![]; - for dev in &self.devices { - match dev.dev_type { - XRDeviceRole::Head => { - has_head = true; - let mut init = DeviceRowModelInit::from_xr_device(dev); - if dev.name == "Simulated HMD" { - init.state = Some(DeviceRowState::Warning); - init.subtitle = Some("No HMD detected (Simulated HMD)".into()); - } - models.push(init); + if self.devices.is_empty() { + return; + } + let mut has_head = false; + let mut has_left = false; + let mut has_right = false; + let mut models: Vec = Vec::new(); + for dev in &self.devices { + match dev.dev_type { + XRDeviceRole::Head => { + has_head = true; + let mut init = DeviceRowModelInit::from(dev); + if dev.name == "Simulated HMD" || dev.name == "Qwerty HMD" { + init.state = Some(DeviceRowState::Warning); + init.subtitle = Some(format!("No HMD detected ({})", dev.name)); } - XRDeviceRole::Left => { - has_left = true; - models.push(DeviceRowModelInit::from_xr_device(dev)); - } - XRDeviceRole::Right => { - has_right = true; - models.push(DeviceRowModelInit::from_xr_device(dev)); - } - XRDeviceRole::GenericTracker => { - generic.push(dev); - } - _ => { - models.push(DeviceRowModelInit::from_xr_device(dev)); - } - }; - } - if !generic.is_empty() { - models.push(DeviceRowModelInit { - title: Some(XRDeviceRole::GenericTracker.to_string()), - subtitle: Some( - generic - .iter() - .map(|d| format!("{} ({})", d.name, d.index)) - .collect::>() - .join("\n"), - ), - ..Default::default() - }); - } - if !has_right { - models.push(DeviceRowModelInit::new_missing(XRDeviceRole::Right)); - } - if !has_left { - models.push(DeviceRowModelInit::new_missing(XRDeviceRole::Left)); - } - if !has_head { - models.push(DeviceRowModelInit::new_missing(XRDeviceRole::Head)); - } + models.push(init); + } + XRDeviceRole::Left => { + has_left = true; + models.push(DeviceRowModelInit::from(dev)); + } + XRDeviceRole::Right => { + has_right = true; + models.push(DeviceRowModelInit::from(dev)); + } + _ => { + models.push(DeviceRowModelInit::from(dev)); + } + }; + } + if !has_right { + models.push(DeviceRowModelInit::new_missing(XRDeviceRole::Right)); + } + if !has_left { + models.push(DeviceRowModelInit::new_missing(XRDeviceRole::Left)); + } + if !has_head { + models.push(DeviceRowModelInit::new_missing(XRDeviceRole::Head)); + } - models.sort_by(|m1, m2| { - let dt1 = XRDeviceRole::from_display_str( - m1.title.as_ref().unwrap_or(&String::new()), - ); - let dt2 = XRDeviceRole::from_display_str( - m2.title.as_ref().unwrap_or(&String::new()), - ); - dt1.cmp(&dt2) - }); + models.sort_by(|m1, m2| { + let dt1 = + XRDeviceRole::from_display_str(m1.title.as_deref().unwrap_or_default()); + let dt2 = + XRDeviceRole::from_display_str(m2.title.as_deref().unwrap_or_default()); + dt1.cmp(&dt2) + }); - for model in models { - guard.push_back(model); - } + for model in models { + guard.push_back(model); } } } diff --git a/src/ui/factories/device_row_factory.rs b/src/ui/factories/device_row_factory.rs index c34852e..2024d69 100644 --- a/src/ui/factories/device_row_factory.rs +++ b/src/ui/factories/device_row_factory.rs @@ -54,8 +54,8 @@ pub struct DeviceRowModelInit { pub battery_status: Option, } -impl DeviceRowModelInit { - pub fn from_xr_device(d: &XRDevice) -> Self { +impl From<&XRDevice> for DeviceRowModelInit { + fn from(d: &XRDevice) -> Self { Self { title: Some(d.dev_type.to_string()), subtitle: Some(d.name.clone()), @@ -63,7 +63,9 @@ impl DeviceRowModelInit { ..Default::default() } } +} +impl DeviceRowModelInit { pub fn new_missing(t: XRDeviceRole) -> Self { DeviceRowModelInit { title: Some(t.to_string()),