From dd23e84ccf2bb74b1ae56e49245f57c8c625069b Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Sun, 8 Dec 2024 13:24:18 -0700 Subject: [PATCH] refactor(indexers_handler): Use the new handle_table_events macro --- src/app/key_binding.rs | 2 +- src/app/key_binding_tests.rs | 2 +- src/handlers/handler_test_utils.rs | 5 +++ .../indexers/indexers_handler_tests.rs | 1 + src/handlers/sonarr_handlers/indexers/mod.rs | 38 ++++++++++++------- 5 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/app/key_binding.rs b/src/app/key_binding.rs index 8bda386..0726c14 100644 --- a/src/app/key_binding.rs +++ b/src/app/key_binding.rs @@ -92,7 +92,7 @@ pub const DEFAULT_KEYBINDINGS: KeyBindings = KeyBindings { desc: "search", }, settings: KeyBinding { - key: Key::Char('s'), + key: Key::Char('S'), desc: "settings", }, filter: KeyBinding { diff --git a/src/app/key_binding_tests.rs b/src/app/key_binding_tests.rs index 2a4ea68..7b3cbb9 100644 --- a/src/app/key_binding_tests.rs +++ b/src/app/key_binding_tests.rs @@ -18,7 +18,7 @@ mod test { #[case(DEFAULT_KEYBINDINGS.clear, Key::Char('c'), "clear")] #[case(DEFAULT_KEYBINDINGS.auto_search, Key::Char('S'), "auto search")] #[case(DEFAULT_KEYBINDINGS.search, Key::Char('s'), "search")] - #[case(DEFAULT_KEYBINDINGS.settings, Key::Char('s'), "settings")] + #[case(DEFAULT_KEYBINDINGS.settings, Key::Char('S'), "settings")] #[case(DEFAULT_KEYBINDINGS.filter, Key::Char('f'), "filter")] #[case(DEFAULT_KEYBINDINGS.sort, Key::Char('o'), "sort")] #[case(DEFAULT_KEYBINDINGS.edit, Key::Char('e'), "edit")] diff --git a/src/handlers/handler_test_utils.rs b/src/handlers/handler_test_utils.rs index 85afc44..72f14dc 100644 --- a/src/handlers/handler_test_utils.rs +++ b/src/handlers/handler_test_utils.rs @@ -340,6 +340,11 @@ mod test_utils { app.data.radarr_data.collection_movies.set_items(vec![$crate::models::radarr_models::CollectionMovie::default()]); app.data.radarr_data.indexers.set_items(vec![$crate::models::servarr_models::Indexer::default()]); app.data.radarr_data.root_folders.set_items(vec![$crate::models::servarr_models::RootFolder::default()]); + let mut movie_details_modal = $crate::models::servarr_data::radarr::modals::MovieDetailsModal::default(); + movie_details_modal + .movie_history + .set_items(vec![$crate::models::radarr_models::MovieHistoryItem::default()]); + app.data.radarr_data.movie_details_modal = Some(movie_details_modal); let mut series_history = $crate::models::stateful_table::StatefulTable::default(); series_history.set_items(vec![ $crate::models::sonarr_models::SonarrHistoryItem::default(), diff --git a/src/handlers/sonarr_handlers/indexers/indexers_handler_tests.rs b/src/handlers/sonarr_handlers/indexers/indexers_handler_tests.rs index 0ccf3a8..c21199f 100644 --- a/src/handlers/sonarr_handlers/indexers/indexers_handler_tests.rs +++ b/src/handlers/sonarr_handlers/indexers/indexers_handler_tests.rs @@ -515,6 +515,7 @@ mod tests { #[test] fn test_indexer_settings_key() { let mut app = App::default(); + app.data.sonarr_data.indexers.set_items(vec![Indexer::default()]); app.push_navigation_stack(ActiveSonarrBlock::Indexers.into()); app .data diff --git a/src/handlers/sonarr_handlers/indexers/mod.rs b/src/handlers/sonarr_handlers/indexers/mod.rs index 1ed5b68..5a91876 100644 --- a/src/handlers/sonarr_handlers/indexers/mod.rs +++ b/src/handlers/sonarr_handlers/indexers/mod.rs @@ -1,17 +1,21 @@ +use crate::models::HorizontallyScrollableText; use crate::app::key_binding::DEFAULT_KEYBINDINGS; use crate::app::App; use crate::event::Key; +use crate::handle_table_events; use crate::handlers::sonarr_handlers::handle_change_tab_left_right_keys; use crate::handlers::sonarr_handlers::indexers::edit_indexer_handler::EditIndexerHandler; use crate::handlers::sonarr_handlers::indexers::edit_indexer_settings_handler::IndexerSettingsHandler; use crate::handlers::sonarr_handlers::indexers::test_all_indexers_handler::TestAllIndexersHandler; use crate::handlers::{handle_clear_errors, handle_prompt_toggle, KeyEventHandler}; +use crate::handlers::table_handler::TableHandlingProps; use crate::models::servarr_data::sonarr::sonarr_data::{ ActiveSonarrBlock, EDIT_INDEXER_NZB_SELECTION_BLOCKS, EDIT_INDEXER_TORRENT_SELECTION_BLOCKS, INDEXERS_BLOCKS, INDEXER_SETTINGS_SELECTION_BLOCKS, }; use crate::models::BlockSelectionState; use crate::models::Scrollable; +use crate::models::servarr_models::Indexer; use crate::network::sonarr_network::SonarrEvent; mod edit_indexer_handler; @@ -29,22 +33,30 @@ pub(super) struct IndexersHandler<'a, 'b> { context: Option, } +impl<'a, 'b> IndexersHandler<'a, 'b> { + handle_table_events!(self, indexers, self.app.data.sonarr_data.indexers, Indexer); +} + impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveSonarrBlock> for IndexersHandler<'a, 'b> { fn handle(&mut self) { - match self.active_sonarr_block { - _ if EditIndexerHandler::accepts(self.active_sonarr_block) => { - EditIndexerHandler::with(self.key, self.app, self.active_sonarr_block, self.context) - .handle() + let indexers_table_handling_props = TableHandlingProps::new(ActiveSonarrBlock::Indexers.into()); + + if !self.handle_indexers_table_events(indexers_table_handling_props) { + match self.active_sonarr_block { + _ if EditIndexerHandler::accepts(self.active_sonarr_block) => { + EditIndexerHandler::with(self.key, self.app, self.active_sonarr_block, self.context) + .handle() + } + _ if IndexerSettingsHandler::accepts(self.active_sonarr_block) => { + IndexerSettingsHandler::with(self.key, self.app, self.active_sonarr_block, self.context) + .handle() + } + _ if TestAllIndexersHandler::accepts(self.active_sonarr_block) => { + TestAllIndexersHandler::with(self.key, self.app, self.active_sonarr_block, self.context) + .handle() + } + _ => self.handle_key_event(), } - _ if IndexerSettingsHandler::accepts(self.active_sonarr_block) => { - IndexerSettingsHandler::with(self.key, self.app, self.active_sonarr_block, self.context) - .handle() - } - _ if TestAllIndexersHandler::accepts(self.active_sonarr_block) => { - TestAllIndexersHandler::with(self.key, self.app, self.active_sonarr_block, self.context) - .handle() - } - _ => self.handle_key_event(), } }