diff --git a/src/commands.rs b/src/commands.rs index 437da5d..712c22f 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -22,15 +22,25 @@ pub enum CommandResult { pub struct CommandManager { aliases: HashMap, + bindings: HashMap, spotify: Arc, queue: Arc, library: Arc, } impl CommandManager { - pub fn new(spotify: Arc, queue: Arc, library: Arc) -> CommandManager { + pub fn new( + spotify: Arc, + queue: Arc, + library: Arc, + bindings: Option>, + ) -> CommandManager { + let mut kb = Self::default_keybindings(); + kb.extend(bindings.unwrap_or_default()); + CommandManager { aliases: HashMap::new(), + bindings: kb, spotify, queue, library, @@ -178,23 +188,22 @@ impl CommandManager { }); } - pub fn register_keybindings( - this: Arc, - cursive: &mut Cursive, - keybindings: Option>, - ) { - let mut kb = Self::default_keybindings(); - kb.extend(keybindings.unwrap_or_default()); + pub fn register_keybindings(this: Arc, cursive: &mut Cursive) { + let kb = this.keybindings(); for (k, v) in kb { if let Some(binding) = Self::parse_keybinding(&k) { - Self::register_keybinding(this.clone(), cursive, binding, v); + Self::register_keybinding(this.clone(), cursive, binding, v.clone()); } else { error!("Could not parse keybinding: \"{}\"", &k); } } } + pub fn keybindings(&self) -> &HashMap { + &self.bindings + } + fn default_keybindings() -> HashMap { let mut kb = HashMap::new(); diff --git a/src/main.rs b/src/main.rs index b1b7fcf..8292191 100644 --- a/src/main.rs +++ b/src/main.rs @@ -192,15 +192,16 @@ fn main() { cfg.use_nerdfont.unwrap_or(false), )); - let mut cmd_manager = CommandManager::new(spotify.clone(), queue.clone(), library.clone()); + let mut cmd_manager = CommandManager::new( + spotify.clone(), + queue.clone(), + library.clone(), + cfg.keybindings.clone(), + ); cmd_manager.register_all(); let cmd_manager = Arc::new(cmd_manager); - CommandManager::register_keybindings( - cmd_manager.clone(), - &mut cursive, - cfg.keybindings.clone(), - ); + CommandManager::register_keybindings(cmd_manager.clone(), &mut cursive); let search = ui::search::SearchView::new( event_manager.clone(),