melors 0.2.2

Keyboard-first terminal MP3 player with queue, search, and tag editing
use super::*;

impl UiState {
    pub fn handle_key(&mut self, app: &mut App, key: KeyEvent) -> Result<bool> {
        let started = std::time::Instant::now();
        if key.kind != event::KeyEventKind::Press {
            return Ok(false);
        }

        if self.handle_alt_shortcuts(key) {
            return Ok(false);
        }

        let should_quit = match self.mode {
            InputMode::Search => self.handle_search_input(app, key)?,
            InputMode::EditTag => self.handle_edit_tag_input(app, key)?,
            InputMode::PlaylistModal => self.handle_playlist_modal_input(app, key)?,
            InputMode::Normal => self.handle_normal_key(app, key)?,
        };
        self.record_ui_action_latency(started.elapsed().as_micros());
        Ok(should_quit)
    }

    fn handle_alt_shortcuts(&mut self, key: KeyEvent) -> bool {
        if !key.modifiers.contains(KeyModifiers::ALT) {
            return false;
        }

        match key.code {
            KeyCode::Char('0') => {
                self.set_visualizer_mode(VisualizerMode::Off);
                self.status = String::from("Visualizer: Off (low power)");
                true
            }
            KeyCode::Char('1') => {
                self.set_visualizer_mode(VisualizerMode::Cava);
                self.status = String::from("Visualizer: Demo Bars");
                true
            }
            KeyCode::Char('2') => {
                self.set_visualizer_mode(VisualizerMode::Clock);
                self.status = String::from("Visualizer: Clock");
                true
            }
            KeyCode::Char('3') => {
                self.set_visualizer_mode(VisualizerMode::CMatrix);
                self.status = String::from("Visualizer: CMatrix");
                true
            }
            KeyCode::Char('t') | KeyCode::Char('T') => {
                let theme = self.cycle_theme();
                self.status = format!("Theme: {}", theme);
                true
            }
            _ => false,
        }
    }
}