From 74350890106521463fc4e97c4c60591261092ef6 Mon Sep 17 00:00:00 2001 From: LGUG2Z Date: Sat, 13 Jul 2024 16:36:03 -0700 Subject: [PATCH] handle azin's empty device_path output (maybe?) --- komorebi/src/monitor_reconciliator/mod.rs | 16 ++++++++---- komorebi/src/windows_api.rs | 32 ++++++++++++++++------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/komorebi/src/monitor_reconciliator/mod.rs b/komorebi/src/monitor_reconciliator/mod.rs index 669a8b27..e854a9f2 100644 --- a/komorebi/src/monitor_reconciliator/mod.rs +++ b/komorebi/src/monitor_reconciliator/mod.rs @@ -67,11 +67,17 @@ pub fn attached_display_devices() -> color_eyre::Result> { .flatten() .map(|display| { let path = display.device_path; - let mut split: Vec<_> = path.split('#').collect(); - split.remove(0); - split.remove(split.len() - 1); - let device = split[0].to_string(); - let device_id = split.join("-"); + + let (device, device_id) = if path.is_empty() { + (String::from("UNKNOWN"), String::from("UNKNOWN")) + } else { + let mut split: Vec<_> = path.split('#').collect(); + split.remove(0); + split.remove(split.len() - 1); + let device = split[0].to_string(); + let device_id = split.join("-"); + (device, device_id) + }; let name = display.device_name.trim_start_matches(r"\\.\").to_string(); let name = name.split('\\').collect::>()[0].to_string(); diff --git a/komorebi/src/windows_api.rs b/komorebi/src/windows_api.rs index 137e316f..937eeabe 100644 --- a/komorebi/src/windows_api.rs +++ b/komorebi/src/windows_api.rs @@ -239,11 +239,17 @@ impl WindowsApi { pub fn load_monitor_information(monitors: &mut Ring) -> Result<()> { 'read: for display in win32_display_data::connected_displays_all().flatten() { let path = display.device_path.clone(); - let mut split: Vec<_> = path.split('#').collect(); - split.remove(0); - split.remove(split.len() - 1); - let device = split[0].to_string(); - let device_id = split.join("-"); + + let (device, device_id) = if path.is_empty() { + (String::from("UNKNOWN"), String::from("UNKNOWN")) + } else { + let mut split: Vec<_> = path.split('#').collect(); + split.remove(0); + split.remove(split.len() - 1); + let device = split[0].to_string(); + let device_id = split.join("-"); + (device, device_id) + }; let name = display.device_name.trim_start_matches(r"\\.\").to_string(); let name = name.split('\\').collect::>()[0].to_string(); @@ -809,11 +815,17 @@ impl WindowsApi { for display in win32_display_data::connected_displays_all().flatten() { if display.hmonitor == hmonitor { let path = display.device_path; - let mut split: Vec<_> = path.split('#').collect(); - split.remove(0); - split.remove(split.len() - 1); - let device = split[0].to_string(); - let device_id = split.join("-"); + + let (device, device_id) = if path.is_empty() { + (String::from("UNKNOWN"), String::from("UNKNOWN")) + } else { + let mut split: Vec<_> = path.split('#').collect(); + split.remove(0); + split.remove(split.len() - 1); + let device = split[0].to_string(); + let device_id = split.join("-"); + (device, device_id) + }; let name = display.device_name.trim_start_matches(r"\\.\").to_string(); let name = name.split('\\').collect::>()[0].to_string();