diff --git a/src/audio.rs b/src/audio.rs index 2a23c9c18..0dc62f343 100644 --- a/src/audio.rs +++ b/src/audio.rs @@ -371,6 +371,24 @@ impl Audio { pub fn connect_handler(&self, cb: Box) { self.handlers.add_handler(cb); } + + + /// Get the current card name. + pub fn card_name(&self) -> Result { + return self.acard.borrow().card_name(); + } + + + /// Get the currently playable channel names. + pub fn playable_chan_names(&self) -> Vec { + return get_playable_selem_names(&self.acard.borrow().mixer); + } + + + /// Get the current active channel name. + pub fn chan_name(&self) -> Result { + return self.acard.borrow().chan_name(); + } } diff --git a/src/support_audio.rs b/src/support_audio.rs index 70ab25a2c..5a51eaba5 100644 --- a/src/support_audio.rs +++ b/src/support_audio.rs @@ -9,6 +9,7 @@ use audio::{Audio, AudioUser}; use errors::*; use prefs::*; +use support_alsa::*; #[derive(Clone, Copy, Debug)] @@ -91,3 +92,19 @@ pub fn percent_to_vol(vol: f64, range: (i64, i64), dir: VolDir) -> Result { let _v = lrint(vol / 100.0 * ((max - min) as f64), dir) + (min as f64); return Ok(_v as i64); } + + +/// Get all playable card names. +pub fn get_playable_card_names() -> Vec { + return get_playable_alsa_card_names(); +} + + +/// Get all playable channel names. +pub fn get_playable_chan_names(card_name: String) -> Vec { + let card = try_r!(get_alsa_card_by_name(card_name), Vec::default()); + let mixer = try_r!(get_mixer(&card), Vec::default()); + + return get_playable_selem_names(&mixer); +} + diff --git a/src/ui_prefs_dialog.rs b/src/ui_prefs_dialog.rs index 57bf1f477..7e3491af6 100644 --- a/src/ui_prefs_dialog.rs +++ b/src/ui_prefs_dialog.rs @@ -11,7 +11,7 @@ use gtk::prelude::*; use gtk; use prefs::*; use std::rc::Rc; -use support_alsa::*; +use support_audio::*; @@ -374,12 +374,12 @@ fn fill_card_combo(appstate: &AppS) { let m_cc = appstate.gui.prefs_dialog.borrow(); let card_combo = &m_cc.as_ref().unwrap().card_combo; card_combo.remove_all(); - let acard = appstate.audio.acard.borrow(); + let audio = &appstate.audio; /* set card combo */ - let cur_card_name = try_w!(acard.card_name(), + let cur_card_name = try_w!(audio.card_name(), "Can't get current card name!"); - let available_card_names = get_playable_alsa_card_names(); + let available_card_names = get_playable_card_names(); /* set_active_id doesn't work, so save the index */ let mut c_index: i32 = -1; @@ -402,16 +402,14 @@ fn fill_chan_combo(appstate: &AppS, cardname: Option) { let chan_combo = &m_cc.as_ref().unwrap().chan_combo; chan_combo.remove_all(); - let cur_acard = appstate.audio.acard.borrow(); - let card = match cardname { - Some(name) => try_w!(get_alsa_card_by_name(name).from_err()), - None => cur_acard.as_ref().card, + let audio = &appstate.audio; + let available_chan_names = match cardname { + Some(name) => get_playable_chan_names(name), + None => audio.playable_chan_names(), }; /* set chan combo */ - let cur_chan_name = try_w!(cur_acard.chan_name()); - let mixer = try_w!(get_mixer(&card)); - let available_chan_names = get_playable_selem_names(&mixer); + let cur_chan_name = try_w!(audio.chan_name()); /* set_active_id doesn't work, so save the index */ let mut c_index: i32 = -1;