diff --git a/src/input/engine_page.rs b/src/input/engine_page.rs index 1c2a83b..7d856d1 100644 --- a/src/input/engine_page.rs +++ b/src/input/engine_page.rs @@ -247,16 +247,16 @@ pub(super) fn handle_engine_page(ctx: &mut InputContext, key: KeyEvent) -> Input DevicesFocus::Output => { let cursor = ctx.app.audio.output_list.cursor; if cursor < ctx.app.audio.output_devices.len() { - let index = ctx.app.audio.output_devices[cursor].index; - ctx.dispatch(AppCommand::SetOutputDevice(index.to_string())); + let name = ctx.app.audio.output_devices[cursor].name.clone(); + ctx.dispatch(AppCommand::SetOutputDevice(name)); ctx.app.save_settings(ctx.link); } } DevicesFocus::Input => { let cursor = ctx.app.audio.input_list.cursor; if cursor < ctx.app.audio.input_devices.len() { - let index = ctx.app.audio.input_devices[cursor].index; - ctx.dispatch(AppCommand::SetInputDevice(index.to_string())); + let name = ctx.app.audio.input_devices[cursor].name.clone(); + ctx.dispatch(AppCommand::SetInputDevice(name)); ctx.app.save_settings(ctx.link); } } diff --git a/src/state/audio.rs b/src/state/audio.rs index 231c131..3d80efd 100644 --- a/src/state/audio.rs +++ b/src/state/audio.rs @@ -532,17 +532,21 @@ impl AudioSettings { pub fn current_output_device_index(&self) -> usize { match &self.config.output_device { Some(spec) => { - if let Ok(idx) = spec.parse::() { - self.output_devices - .iter() - .position(|d| d.index == idx) - .unwrap_or(0) - } else { - self.output_devices - .iter() - .position(|d| &d.name == spec) - .unwrap_or(0) - } + let spec_lower = spec.to_lowercase(); + self.output_devices + .iter() + .position(|d| d.name == *spec) + .or_else(|| { + self.output_devices + .iter() + .position(|d| d.name.to_lowercase() == spec_lower) + }) + .or_else(|| { + spec.parse::().ok().and_then(|idx| { + self.output_devices.iter().position(|d| d.index == idx) + }) + }) + .unwrap_or(0) } None => self .output_devices @@ -555,17 +559,21 @@ impl AudioSettings { pub fn current_input_device_index(&self) -> usize { match &self.config.input_device { Some(spec) => { - if let Ok(idx) = spec.parse::() { - self.input_devices - .iter() - .position(|d| d.index == idx) - .unwrap_or(0) - } else { - self.input_devices - .iter() - .position(|d| &d.name == spec) - .unwrap_or(0) - } + let spec_lower = spec.to_lowercase(); + self.input_devices + .iter() + .position(|d| d.name == *spec) + .or_else(|| { + self.input_devices + .iter() + .position(|d| d.name.to_lowercase() == spec_lower) + }) + .or_else(|| { + spec.parse::().ok().and_then(|idx| { + self.input_devices.iter().position(|d| d.index == idx) + }) + }) + .unwrap_or(0) } None => self .input_devices