Feat: better engine output device switching
This commit is contained in:
@@ -224,16 +224,16 @@ pub(super) fn handle_engine_page(ctx: &mut InputContext, key: KeyEvent) -> Input
|
||||
DeviceKind::Output => {
|
||||
let cursor = ctx.app.audio.output_list.cursor;
|
||||
if cursor < ctx.app.audio.output_devices.len() {
|
||||
let name = ctx.app.audio.output_devices[cursor].name.clone();
|
||||
ctx.dispatch(AppCommand::SetOutputDevice(name));
|
||||
let index = ctx.app.audio.output_devices[cursor].index;
|
||||
ctx.dispatch(AppCommand::SetOutputDevice(index.to_string()));
|
||||
ctx.app.save_settings(ctx.link);
|
||||
}
|
||||
}
|
||||
DeviceKind::Input => {
|
||||
let cursor = ctx.app.audio.input_list.cursor;
|
||||
if cursor < ctx.app.audio.input_devices.len() {
|
||||
let name = ctx.app.audio.input_devices[cursor].name.clone();
|
||||
ctx.dispatch(AppCommand::SetInputDevice(name));
|
||||
let index = ctx.app.audio.input_devices[cursor].index;
|
||||
ctx.dispatch(AppCommand::SetInputDevice(index.to_string()));
|
||||
ctx.app.save_settings(ctx.link);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -448,11 +448,19 @@ impl AudioSettings {
|
||||
|
||||
pub fn current_output_device_index(&self) -> usize {
|
||||
match &self.config.output_device {
|
||||
Some(name) => self
|
||||
.output_devices
|
||||
.iter()
|
||||
.position(|d| &d.name == name)
|
||||
.unwrap_or(0),
|
||||
Some(spec) => {
|
||||
if let Ok(idx) = spec.parse::<usize>() {
|
||||
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)
|
||||
}
|
||||
}
|
||||
None => self
|
||||
.output_devices
|
||||
.iter()
|
||||
@@ -463,11 +471,19 @@ impl AudioSettings {
|
||||
|
||||
pub fn current_input_device_index(&self) -> usize {
|
||||
match &self.config.input_device {
|
||||
Some(name) => self
|
||||
.input_devices
|
||||
.iter()
|
||||
.position(|d| &d.name == name)
|
||||
.unwrap_or(0),
|
||||
Some(spec) => {
|
||||
if let Ok(idx) = spec.parse::<usize>() {
|
||||
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)
|
||||
}
|
||||
}
|
||||
None => self
|
||||
.input_devices
|
||||
.iter()
|
||||
|
||||
Reference in New Issue
Block a user