diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index 358c127..95a8a33 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -140,3 +140,16 @@ macro_rules! handle_text_box_keys { } }; } + +#[macro_export] +macro_rules! handle_prompt_left_right_keys { + ($self:expr, $confirm_prompt:expr, $data:ident) => { + if $self.app.data.$data.selected_block.get_active_block() == $confirm_prompt { + handle_prompt_toggle($self.app, $self.key); + } else if $self.key == DEFAULT_KEYBINDINGS.left.key { + $self.app.data.$data.selected_block.left(); + } else { + $self.app.data.$data.selected_block.right(); + } + }; +} diff --git a/src/handlers/radarr_handlers/collections/collection_details_handler.rs b/src/handlers/radarr_handlers/collections/collection_details_handler.rs index 89f5308..8d09807 100644 --- a/src/handlers/radarr_handlers/collections/collection_details_handler.rs +++ b/src/handlers/radarr_handlers/collections/collection_details_handler.rs @@ -111,7 +111,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for CollectionDetailsHan .into(), ); self.app.data.radarr_data.selected_block = - BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS); + BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS); self.app.data.radarr_data.add_movie_modal = Some((&self.app.data.radarr_data).into()); } } @@ -141,7 +141,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for CollectionDetailsHan ); self.app.data.radarr_data.edit_collection_modal = Some((&self.app.data.radarr_data).into()); self.app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS); } } } diff --git a/src/handlers/radarr_handlers/collections/collection_details_handler_tests.rs b/src/handlers/radarr_handlers/collections/collection_details_handler_tests.rs index 4b46809..32c40b4 100644 --- a/src/handlers/radarr_handlers/collections/collection_details_handler_tests.rs +++ b/src/handlers/radarr_handlers/collections/collection_details_handler_tests.rs @@ -171,12 +171,12 @@ mod tests { .set_items(vec![CollectionMovie::default()]); app.data.radarr_data.quality_profile_map = BiMap::from_iter([(1, "B - Test 2".to_owned()), (0, "A - Test 1".to_owned())]); - app.data.radarr_data.selected_block = BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block = BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(ADD_MOVIE_SELECTION_BLOCKS.len() - 1); + .set_index(0, ADD_MOVIE_SELECTION_BLOCKS.len() - 1); CollectionDetailsHandler::with( SUBMIT_KEY, diff --git a/src/handlers/radarr_handlers/collections/edit_collection_handler.rs b/src/handlers/radarr_handlers/collections/edit_collection_handler.rs index 9754397..f29f8fd 100644 --- a/src/handlers/radarr_handlers/collections/edit_collection_handler.rs +++ b/src/handlers/radarr_handlers/collections/edit_collection_handler.rs @@ -65,9 +65,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for EditCollectionHandle .unwrap() .quality_profile_list .scroll_up(), - ActiveRadarrBlock::EditCollectionPrompt => { - self.app.data.radarr_data.selected_block.previous() - } + ActiveRadarrBlock::EditCollectionPrompt => self.app.data.radarr_data.selected_block.up(), _ => (), } } @@ -92,7 +90,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for EditCollectionHandle .unwrap() .quality_profile_list .scroll_down(), - ActiveRadarrBlock::EditCollectionPrompt => self.app.data.radarr_data.selected_block.next(), + ActiveRadarrBlock::EditCollectionPrompt => self.app.data.radarr_data.selected_block.down(), _ => (), } } diff --git a/src/handlers/radarr_handlers/collections/edit_collection_handler_tests.rs b/src/handlers/radarr_handlers/collections/edit_collection_handler_tests.rs index 32bb457..d8f9f5b 100644 --- a/src/handlers/radarr_handlers/collections/edit_collection_handler_tests.rs +++ b/src/handlers/radarr_handlers/collections/edit_collection_handler_tests.rs @@ -149,8 +149,8 @@ mod tests { let mut app = App::default(); app.data.radarr_data.edit_collection_modal = Some(EditCollectionModal::default()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.next(); + BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.down(); EditCollectionHandler::with(key, &mut app, ActiveRadarrBlock::EditCollectionPrompt, None) .handle(); @@ -176,8 +176,8 @@ mod tests { app.is_loading = true; app.data.radarr_data.edit_collection_modal = Some(EditCollectionModal::default()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.next(); + BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.down(); EditCollectionHandler::with(key, &mut app, ActiveRadarrBlock::EditCollectionPrompt, None) .handle(); @@ -494,12 +494,12 @@ mod tests { app.push_navigation_stack(ActiveRadarrBlock::Collections.into()); app.push_navigation_stack(ActiveRadarrBlock::EditCollectionPrompt.into()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); + .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); EditCollectionHandler::with( SUBMIT_KEY, @@ -524,12 +524,12 @@ mod tests { app.push_navigation_stack(ActiveRadarrBlock::EditCollectionPrompt.into()); app.data.radarr_data.prompt_confirm = true; app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); + .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); EditCollectionHandler::with( SUBMIT_KEY, @@ -559,12 +559,12 @@ mod tests { app.push_navigation_stack(ActiveRadarrBlock::EditCollectionPrompt.into()); app.data.radarr_data.prompt_confirm = true; app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); + .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); EditCollectionHandler::with( SUBMIT_KEY, @@ -591,7 +591,7 @@ mod tests { let mut app = App::default(); app.data.radarr_data.edit_collection_modal = Some(EditCollectionModal::default()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS); app.push_navigation_stack(current_route); EditCollectionHandler::with( @@ -644,12 +644,12 @@ mod tests { let mut app = App::default(); app.data.radarr_data.edit_collection_modal = Some(EditCollectionModal::default()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 2); + .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 2); app.push_navigation_stack(current_route); EditCollectionHandler::with( @@ -711,8 +711,8 @@ mod tests { .into(), ); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.set_index(index); + BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.set_index(0, index); EditCollectionHandler::with( SUBMIT_KEY, @@ -923,12 +923,12 @@ mod tests { app.push_navigation_stack(ActiveRadarrBlock::Collections.into()); app.push_navigation_stack(ActiveRadarrBlock::EditCollectionPrompt.into()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); + .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); EditCollectionHandler::with( DEFAULT_KEYBINDINGS.confirm.key, diff --git a/src/handlers/radarr_handlers/collections/mod.rs b/src/handlers/radarr_handlers/collections/mod.rs index 7f266b6..de1a987 100644 --- a/src/handlers/radarr_handlers/collections/mod.rs +++ b/src/handlers/radarr_handlers/collections/mod.rs @@ -334,7 +334,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for CollectionsHandler<' self.app.data.radarr_data.edit_collection_modal = Some((&self.app.data.radarr_data).into()); self.app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS); } _ if key == DEFAULT_KEYBINDINGS.update.key => { self diff --git a/src/handlers/radarr_handlers/indexers/edit_indexer_handler.rs b/src/handlers/radarr_handlers/indexers/edit_indexer_handler.rs index f641df3..daf054c 100644 --- a/src/handlers/radarr_handlers/indexers/edit_indexer_handler.rs +++ b/src/handlers/radarr_handlers/indexers/edit_indexer_handler.rs @@ -4,7 +4,7 @@ use crate::event::Key; use crate::handlers::{handle_prompt_toggle, KeyEventHandler}; use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, EDIT_INDEXER_BLOCKS}; use crate::network::radarr_network::RadarrEvent; -use crate::{handle_text_box_keys, handle_text_box_left_right_keys}; +use crate::{handle_prompt_left_right_keys, handle_text_box_keys, handle_text_box_left_right_keys}; #[cfg(test)] #[path = "edit_indexer_handler_tests.rs"] @@ -46,13 +46,13 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for EditIndexerHandler<' fn handle_scroll_up(&mut self) { if self.active_radarr_block == ActiveRadarrBlock::EditIndexerPrompt { - self.app.data.radarr_data.selected_block.previous(); + self.app.data.radarr_data.selected_block.up(); } } fn handle_scroll_down(&mut self) { if self.active_radarr_block == ActiveRadarrBlock::EditIndexerPrompt { - self.app.data.radarr_data.selected_block.next(); + self.app.data.radarr_data.selected_block.down(); } } @@ -183,15 +183,11 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for EditIndexerHandler<' fn handle_left_right_action(&mut self) { match self.active_radarr_block { ActiveRadarrBlock::EditIndexerPrompt => { - if self.app.data.radarr_data.selected_block.get_active_block() - == ActiveRadarrBlock::EditIndexerConfirmPrompt - { - handle_prompt_toggle(self.app, self.key); - } else { - let len = self.app.data.radarr_data.selected_block.blocks.len(); - let idx = self.app.data.radarr_data.selected_block.index; - self.app.data.radarr_data.selected_block.index = (idx + 5) % len; - } + handle_prompt_left_right_keys!( + self, + ActiveRadarrBlock::EditIndexerConfirmPrompt, + radarr_data + ); } ActiveRadarrBlock::EditIndexerNameInput => { handle_text_box_left_right_keys!( diff --git a/src/handlers/radarr_handlers/indexers/edit_indexer_handler_tests.rs b/src/handlers/radarr_handlers/indexers/edit_indexer_handler_tests.rs index 1774b5e..507de3c 100644 --- a/src/handlers/radarr_handlers/indexers/edit_indexer_handler_tests.rs +++ b/src/handlers/radarr_handlers/indexers/edit_indexer_handler_tests.rs @@ -25,8 +25,8 @@ mod tests { let mut app = App::default(); app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.next(); + BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.down(); EditIndexerHandler::with(key, &mut app, ActiveRadarrBlock::EditIndexerPrompt, None).handle(); @@ -51,8 +51,8 @@ mod tests { app.is_loading = true; app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.next(); + BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.down(); EditIndexerHandler::with(key, &mut app, ActiveRadarrBlock::EditIndexerPrompt, None).handle(); @@ -346,8 +346,8 @@ mod tests { fn test_left_right_prompt_toggle(#[values(Key::Left, Key::Right)] key: Key) { let mut app = App::default(); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.index = EDIT_INDEXER_TORRENT_SELECTION_BLOCKS.len() - 1; + BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.y = EDIT_INDEXER_TORRENT_SELECTION_BLOCKS.len() - 1; EditIndexerHandler::with(key, &mut app, ActiveRadarrBlock::EditIndexerPrompt, None).handle(); @@ -381,14 +381,14 @@ mod tests { )] fn test_left_right_block_toggle_torrents( #[values(Key::Left, Key::Right)] key: Key, - #[case] starting_index: usize, + #[case] starting_y_index: usize, #[case] left_block: ActiveRadarrBlock, #[case] right_block: ActiveRadarrBlock, ) { let mut app = App::default(); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.index = starting_index; + BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.y = starting_y_index; assert_eq!( app.data.radarr_data.selected_block.get_active_block(), @@ -428,14 +428,14 @@ mod tests { )] fn test_left_right_block_toggle_nzb( #[values(Key::Left, Key::Right)] key: Key, - #[case] starting_index: usize, + #[case] starting_y_index: usize, #[case] left_block: ActiveRadarrBlock, #[case] right_block: ActiveRadarrBlock, ) { let mut app = App::default(); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_NZB_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.index = starting_index; + BlockSelectionState::new(EDIT_INDEXER_NZB_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.y = starting_y_index; assert_eq!( app.data.radarr_data.selected_block.get_active_block(), @@ -463,8 +463,8 @@ mod tests { ) { let mut app = App::default(); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_NZB_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.index = 3; + BlockSelectionState::new(EDIT_INDEXER_NZB_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.y = 3; app.data.radarr_data.prompt_confirm = false; assert_eq!( @@ -765,12 +765,12 @@ mod tests { app.push_navigation_stack(ActiveRadarrBlock::Indexers.into()); app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS.len() - 1); + .set_index(0, EDIT_INDEXER_TORRENT_SELECTION_BLOCKS.len() - 1); app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); EditIndexerHandler::with( @@ -793,12 +793,12 @@ mod tests { app.push_navigation_stack(ActiveRadarrBlock::Indexers.into()); app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS.len() - 1); + .set_index(0, EDIT_INDEXER_TORRENT_SELECTION_BLOCKS.len() - 1); app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); app.data.radarr_data.prompt_confirm = true; @@ -846,25 +846,26 @@ mod tests { } #[rstest] - #[case(0, ActiveRadarrBlock::EditIndexerNameInput)] - #[case(5, ActiveRadarrBlock::EditIndexerUrlInput)] - #[case(6, ActiveRadarrBlock::EditIndexerApiKeyInput)] - #[case(7, ActiveRadarrBlock::EditIndexerSeedRatioInput)] - #[case(8, ActiveRadarrBlock::EditIndexerTagsInput)] + #[case(0, 0, ActiveRadarrBlock::EditIndexerNameInput)] + #[case(0, 1, ActiveRadarrBlock::EditIndexerUrlInput)] + #[case(1, 1, ActiveRadarrBlock::EditIndexerApiKeyInput)] + #[case(2, 1, ActiveRadarrBlock::EditIndexerSeedRatioInput)] + #[case(3, 1, ActiveRadarrBlock::EditIndexerTagsInput)] fn test_edit_indexer_prompt_submit_input_fields( - #[case] starting_index: usize, + #[case] starting_y: usize, + #[case] starting_x: usize, #[case] block: ActiveRadarrBlock, ) { let mut app = App::default(); app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(starting_index); + .set_index(starting_x, starting_y); EditIndexerHandler::with( SUBMIT_KEY, @@ -883,8 +884,8 @@ mod tests { let mut app = App::default(); app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.set_index(1); + BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.set_index(0, 1); app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into()); EditIndexerHandler::with( @@ -935,8 +936,8 @@ mod tests { let mut app = App::default(); app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.set_index(2); + BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.set_index(0, 2); app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into()); EditIndexerHandler::with( @@ -987,8 +988,8 @@ mod tests { let mut app = App::default(); app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.set_index(3); + BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.set_index(0, 3); app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into()); EditIndexerHandler::with( @@ -1560,12 +1561,12 @@ mod tests { app.push_navigation_stack(ActiveRadarrBlock::Indexers.into()); app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS.len() - 1); + .set_index(0, EDIT_INDEXER_TORRENT_SELECTION_BLOCKS.len() - 1); app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); EditIndexerHandler::with( diff --git a/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler.rs b/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler.rs index 92875c9..046e7b5 100644 --- a/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler.rs +++ b/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler.rs @@ -6,7 +6,7 @@ use crate::models::servarr_data::radarr::radarr_data::{ ActiveRadarrBlock, INDEXER_SETTINGS_BLOCKS, }; use crate::network::radarr_network::RadarrEvent; -use crate::{handle_text_box_keys, handle_text_box_left_right_keys}; +use crate::{handle_prompt_left_right_keys, handle_text_box_keys, handle_text_box_left_right_keys}; #[cfg(test)] #[path = "edit_indexer_settings_handler_tests.rs"] @@ -50,7 +50,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for IndexerSettingsHandl let indexer_settings = self.app.data.radarr_data.indexer_settings.as_mut().unwrap(); match self.active_radarr_block { ActiveRadarrBlock::AllIndexerSettingsPrompt => { - self.app.data.radarr_data.selected_block.previous(); + self.app.data.radarr_data.selected_block.up(); } ActiveRadarrBlock::IndexerSettingsMinimumAgeInput => { indexer_settings.minimum_age += 1; @@ -75,7 +75,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for IndexerSettingsHandl let indexer_settings = self.app.data.radarr_data.indexer_settings.as_mut().unwrap(); match self.active_radarr_block { ActiveRadarrBlock::AllIndexerSettingsPrompt => { - self.app.data.radarr_data.selected_block.next() + self.app.data.radarr_data.selected_block.down() } ActiveRadarrBlock::IndexerSettingsMinimumAgeInput => { if indexer_settings.minimum_age > 0 { @@ -137,15 +137,11 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for IndexerSettingsHandl fn handle_left_right_action(&mut self) { match self.active_radarr_block { ActiveRadarrBlock::AllIndexerSettingsPrompt => { - if self.app.data.radarr_data.selected_block.get_active_block() - == ActiveRadarrBlock::IndexerSettingsConfirmPrompt - { - handle_prompt_toggle(self.app, self.key); - } else { - let len = self.app.data.radarr_data.selected_block.blocks.len(); - let idx = self.app.data.radarr_data.selected_block.index; - self.app.data.radarr_data.selected_block.index = (idx + 5) % len; - } + handle_prompt_left_right_keys!( + self, + ActiveRadarrBlock::IndexerSettingsConfirmPrompt, + radarr_data + ); } ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput => { handle_text_box_left_right_keys!( diff --git a/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler_tests.rs b/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler_tests.rs index e524ea2..8d3bddf 100644 --- a/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler_tests.rs +++ b/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler_tests.rs @@ -98,8 +98,8 @@ mod tests { let mut app = App::default(); app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.next(); + BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.down(); IndexerSettingsHandler::with( key, @@ -130,8 +130,8 @@ mod tests { app.is_loading = true; app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.next(); + BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.down(); IndexerSettingsHandler::with( key, @@ -276,8 +276,8 @@ mod tests { fn test_left_right_prompt_toggle(#[values(Key::Left, Key::Right)] key: Key) { let mut app = App::default(); app.data.radarr_data.selected_block = - BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.index = INDEXER_SETTINGS_SELECTION_BLOCKS.len() - 1; + BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.y = INDEXER_SETTINGS_SELECTION_BLOCKS.len() - 1; IndexerSettingsHandler::with( key, @@ -323,14 +323,14 @@ mod tests { )] fn test_left_right_block_toggle( #[values(Key::Left, Key::Right)] key: Key, - #[case] starting_index: usize, + #[case] starting_y_index: usize, #[case] left_block: ActiveRadarrBlock, #[case] right_block: ActiveRadarrBlock, ) { let mut app = App::default(); app.data.radarr_data.selected_block = - BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.index = starting_index; + BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.y = starting_y_index; assert_eq!( app.data.radarr_data.selected_block.get_active_block(), @@ -438,12 +438,12 @@ mod tests { app.push_navigation_stack(ActiveRadarrBlock::Indexers.into()); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); + BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(INDEXER_SETTINGS_SELECTION_BLOCKS.len() - 1); + .set_index(0, INDEXER_SETTINGS_SELECTION_BLOCKS.len() - 1); app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); IndexerSettingsHandler::with( @@ -466,12 +466,12 @@ mod tests { app.push_navigation_stack(ActiveRadarrBlock::Indexers.into()); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); + BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(INDEXER_SETTINGS_SELECTION_BLOCKS.len() - 1); + .set_index(0, INDEXER_SETTINGS_SELECTION_BLOCKS.len() - 1); app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.data.radarr_data.prompt_confirm = true; @@ -517,21 +517,26 @@ mod tests { } #[rstest] - #[case(ActiveRadarrBlock::IndexerSettingsMinimumAgeInput, 0)] - #[case(ActiveRadarrBlock::IndexerSettingsRetentionInput, 1)] - #[case(ActiveRadarrBlock::IndexerSettingsMaximumSizeInput, 2)] - #[case(ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput, 5)] - #[case(ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput, 6)] + #[case(ActiveRadarrBlock::IndexerSettingsMinimumAgeInput, 0, 0)] + #[case(ActiveRadarrBlock::IndexerSettingsRetentionInput, 1, 0)] + #[case(ActiveRadarrBlock::IndexerSettingsMaximumSizeInput, 2, 0)] + #[case(ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput, 0, 1)] + #[case(ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput, 1, 1)] fn test_edit_indexer_settings_prompt_submit_selected_block( #[case] selected_block: ActiveRadarrBlock, - #[case] index: usize, + #[case] y_index: usize, + #[case] x_index: usize, ) { let mut app = App::default(); app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.set_index(index); + BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS); + app + .data + .radarr_data + .selected_block + .set_index(x_index, y_index); IndexerSettingsHandler::with( SUBMIT_KEY, @@ -546,15 +551,19 @@ mod tests { #[rstest] fn test_edit_indexer_settings_prompt_submit_selected_block_no_op_when_not_ready( - #[values(0, 1, 2, 5, 6)] index: usize, + #[values((0, 0), (1, 0), (2, 0), (0, 1), (1, 1))] index: (usize, usize), ) { let mut app = App::default(); app.is_loading = true; app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.set_index(index); + BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS); + app + .data + .radarr_data + .selected_block + .set_index(index.1, index.0); IndexerSettingsHandler::with( SUBMIT_KEY, @@ -576,8 +585,8 @@ mod tests { app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.set_index(7); + BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.set_index(1, 2); IndexerSettingsHandler::with( SUBMIT_KEY, @@ -599,8 +608,8 @@ mod tests { let mut app = App::default(); app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.set_index(3); + BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.set_index(0, 3); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); IndexerSettingsHandler::with( @@ -653,8 +662,8 @@ mod tests { let mut app = App::default(); app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.set_index(8); + BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.set_index(1, 3); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); IndexerSettingsHandler::with( @@ -922,12 +931,12 @@ mod tests { app.push_navigation_stack(ActiveRadarrBlock::Indexers.into()); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); app.data.radarr_data.selected_block = - BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); + BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(INDEXER_SETTINGS_SELECTION_BLOCKS.len() - 1); + .set_index(0, INDEXER_SETTINGS_SELECTION_BLOCKS.len() - 1); app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); IndexerSettingsHandler::with( diff --git a/src/handlers/radarr_handlers/indexers/indexers_handler_tests.rs b/src/handlers/radarr_handlers/indexers/indexers_handler_tests.rs index 0f55986..aa875f5 100644 --- a/src/handlers/radarr_handlers/indexers/indexers_handler_tests.rs +++ b/src/handlers/radarr_handlers/indexers/indexers_handler_tests.rs @@ -311,12 +311,12 @@ mod tests { if torrent_protocol { assert_eq!( app.data.radarr_data.selected_block.blocks, - &EDIT_INDEXER_TORRENT_SELECTION_BLOCKS + EDIT_INDEXER_TORRENT_SELECTION_BLOCKS ); } else { assert_eq!( app.data.radarr_data.selected_block.blocks, - &EDIT_INDEXER_NZB_SELECTION_BLOCKS + EDIT_INDEXER_NZB_SELECTION_BLOCKS ); } } @@ -570,7 +570,7 @@ mod tests { ); assert_eq!( app.data.radarr_data.selected_block.blocks, - &INDEXER_SETTINGS_SELECTION_BLOCKS + INDEXER_SETTINGS_SELECTION_BLOCKS ); } diff --git a/src/handlers/radarr_handlers/indexers/mod.rs b/src/handlers/radarr_handlers/indexers/mod.rs index 9994fa4..49c39ce 100644 --- a/src/handlers/radarr_handlers/indexers/mod.rs +++ b/src/handlers/radarr_handlers/indexers/mod.rs @@ -141,10 +141,10 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for IndexersHandler<'a, .protocol; if protocol == "torrent" { self.app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); } else { self.app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_INDEXER_NZB_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_INDEXER_NZB_SELECTION_BLOCKS); } } _ => (), @@ -192,7 +192,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for IndexersHandler<'a, .app .push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); self.app.data.radarr_data.selected_block = - BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); + BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS); } _ => (), }, diff --git a/src/handlers/radarr_handlers/library/add_movie_handler.rs b/src/handlers/radarr_handlers/library/add_movie_handler.rs index 67da66d..ed555f6 100644 --- a/src/handlers/radarr_handlers/library/add_movie_handler.rs +++ b/src/handlers/radarr_handlers/library/add_movie_handler.rs @@ -91,7 +91,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for AddMovieHandler<'a, .unwrap() .root_folder_list .scroll_up(), - ActiveRadarrBlock::AddMoviePrompt => self.app.data.radarr_data.selected_block.previous(), + ActiveRadarrBlock::AddMoviePrompt => self.app.data.radarr_data.selected_block.up(), _ => (), } } @@ -142,7 +142,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for AddMovieHandler<'a, .unwrap() .root_folder_list .scroll_down(), - ActiveRadarrBlock::AddMoviePrompt => self.app.data.radarr_data.selected_block.next(), + ActiveRadarrBlock::AddMoviePrompt => self.app.data.radarr_data.selected_block.down(), _ => (), } } @@ -360,7 +360,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for AddMovieHandler<'a, .push_navigation_stack(ActiveRadarrBlock::AddMoviePrompt.into()); self.app.data.radarr_data.add_movie_modal = Some((&self.app.data.radarr_data).into()); self.app.data.radarr_data.selected_block = - BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS); + BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS); } } ActiveRadarrBlock::AddMoviePrompt => { diff --git a/src/handlers/radarr_handlers/library/add_movie_handler_tests.rs b/src/handlers/radarr_handlers/library/add_movie_handler_tests.rs index e33e48d..18b4036 100644 --- a/src/handlers/radarr_handlers/library/add_movie_handler_tests.rs +++ b/src/handlers/radarr_handlers/library/add_movie_handler_tests.rs @@ -380,8 +380,8 @@ mod tests { #[rstest] fn test_add_movie_prompt_scroll(#[values(Key::Up, Key::Down)] key: Key) { let mut app = App::default(); - app.data.radarr_data.selected_block = BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.next(); + app.data.radarr_data.selected_block = BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.down(); AddMovieHandler::with(key, &mut app, ActiveRadarrBlock::AddMoviePrompt, None).handle(); @@ -402,8 +402,8 @@ mod tests { fn test_add_movie_prompt_scroll_no_op_when_not_ready(#[values(Key::Up, Key::Down)] key: Key) { let mut app = App::default(); app.is_loading = true; - app.data.radarr_data.selected_block = BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.next(); + app.data.radarr_data.selected_block = BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.down(); AddMovieHandler::with(key, &mut app, ActiveRadarrBlock::AddMoviePrompt, None).handle(); @@ -1170,12 +1170,12 @@ mod tests { let mut app = App::default(); app.push_navigation_stack(ActiveRadarrBlock::Movies.into()); app.push_navigation_stack(ActiveRadarrBlock::AddMoviePrompt.into()); - app.data.radarr_data.selected_block = BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block = BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(ADD_MOVIE_SELECTION_BLOCKS.len() - 1); + .set_index(0, ADD_MOVIE_SELECTION_BLOCKS.len() - 1); AddMovieHandler::with( SUBMIT_KEY, @@ -1196,12 +1196,12 @@ mod tests { app.push_navigation_stack(ActiveRadarrBlock::Movies.into()); app.push_navigation_stack(ActiveRadarrBlock::AddMoviePrompt.into()); app.data.radarr_data.prompt_confirm = true; - app.data.radarr_data.selected_block = BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block = BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(ADD_MOVIE_SELECTION_BLOCKS.len() - 1); + .set_index(0, ADD_MOVIE_SELECTION_BLOCKS.len() - 1); AddMovieHandler::with( SUBMIT_KEY, @@ -1227,7 +1227,7 @@ mod tests { #[case(ActiveRadarrBlock::AddMovieTagsInput, 4)] fn test_add_movie_prompt_selected_block_submit( #[case] selected_block: ActiveRadarrBlock, - #[case] index: usize, + #[case] y_index: usize, ) { let mut app = App::default(); app.push_navigation_stack( @@ -1237,8 +1237,8 @@ mod tests { ) .into(), ); - app.data.radarr_data.selected_block = BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.set_index(index); + app.data.radarr_data.selected_block = BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.set_index(0, y_index); AddMovieHandler::with( SUBMIT_KEY, @@ -1594,12 +1594,12 @@ mod tests { app.data.radarr_data.add_movie_modal = Some(AddMovieModal::default()); app.push_navigation_stack(ActiveRadarrBlock::Movies.into()); app.push_navigation_stack(ActiveRadarrBlock::AddMoviePrompt.into()); - app.data.radarr_data.selected_block = BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block = BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(ADD_MOVIE_SELECTION_BLOCKS.len() - 1); + .set_index(0, ADD_MOVIE_SELECTION_BLOCKS.len() - 1); AddMovieHandler::with( DEFAULT_KEYBINDINGS.confirm.key, diff --git a/src/handlers/radarr_handlers/library/delete_movie_handler.rs b/src/handlers/radarr_handlers/library/delete_movie_handler.rs index a90529c..6e78552 100644 --- a/src/handlers/radarr_handlers/library/delete_movie_handler.rs +++ b/src/handlers/radarr_handlers/library/delete_movie_handler.rs @@ -45,13 +45,13 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for DeleteMovieHandler<' fn handle_scroll_up(&mut self) { if self.active_radarr_block == ActiveRadarrBlock::DeleteMoviePrompt { - self.app.data.radarr_data.selected_block.previous(); + self.app.data.radarr_data.selected_block.up(); } } fn handle_scroll_down(&mut self) { if self.active_radarr_block == ActiveRadarrBlock::DeleteMoviePrompt { - self.app.data.radarr_data.selected_block.next(); + self.app.data.radarr_data.selected_block.down(); } } diff --git a/src/handlers/radarr_handlers/library/delete_movie_handler_tests.rs b/src/handlers/radarr_handlers/library/delete_movie_handler_tests.rs index 437799a..214aa46 100644 --- a/src/handlers/radarr_handlers/library/delete_movie_handler_tests.rs +++ b/src/handlers/radarr_handlers/library/delete_movie_handler_tests.rs @@ -21,9 +21,8 @@ mod tests { #[rstest] fn test_delete_movie_prompt_scroll(#[values(Key::Up, Key::Down)] key: Key) { let mut app = App::default(); - app.data.radarr_data.selected_block = - BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.next(); + app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.down(); DeleteMovieHandler::with(key, &mut app, ActiveRadarrBlock::DeleteMoviePrompt, None).handle(); @@ -46,9 +45,8 @@ mod tests { ) { let mut app = App::default(); app.is_loading = true; - app.data.radarr_data.selected_block = - BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.next(); + app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.down(); DeleteMovieHandler::with(key, &mut app, ActiveRadarrBlock::DeleteMoviePrompt, None).handle(); @@ -94,13 +92,12 @@ mod tests { let mut app = App::default(); app.push_navigation_stack(ActiveRadarrBlock::Movies.into()); app.push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into()); - app.data.radarr_data.selected_block = - BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(DELETE_MOVIE_SELECTION_BLOCKS.len() - 1); + .set_index(0, DELETE_MOVIE_SELECTION_BLOCKS.len() - 1); app.data.radarr_data.delete_movie_files = true; app.data.radarr_data.add_list_exclusion = true; @@ -127,13 +124,12 @@ mod tests { app.data.radarr_data.prompt_confirm = true; app.data.radarr_data.delete_movie_files = true; app.data.radarr_data.add_list_exclusion = true; - app.data.radarr_data.selected_block = - BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(DELETE_MOVIE_SELECTION_BLOCKS.len() - 1); + .set_index(0, DELETE_MOVIE_SELECTION_BLOCKS.len() - 1); DeleteMovieHandler::with( SUBMIT_KEY, @@ -187,8 +183,7 @@ mod tests { fn test_delete_movie_toggle_delete_files_submit() { let current_route = ActiveRadarrBlock::DeleteMoviePrompt.into(); let mut app = App::default(); - app.data.radarr_data.selected_block = - BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS); app.push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into()); DeleteMovieHandler::with( @@ -263,13 +258,12 @@ mod tests { app.push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into()); app.data.radarr_data.delete_movie_files = true; app.data.radarr_data.add_list_exclusion = true; - app.data.radarr_data.selected_block = - BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(DELETE_MOVIE_SELECTION_BLOCKS.len() - 1); + .set_index(0, DELETE_MOVIE_SELECTION_BLOCKS.len() - 1); DeleteMovieHandler::with( DEFAULT_KEYBINDINGS.confirm.key, diff --git a/src/handlers/radarr_handlers/library/edit_movie_handler.rs b/src/handlers/radarr_handlers/library/edit_movie_handler.rs index 7b85e96..c11e908 100644 --- a/src/handlers/radarr_handlers/library/edit_movie_handler.rs +++ b/src/handlers/radarr_handlers/library/edit_movie_handler.rs @@ -65,7 +65,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for EditMovieHandler<'a, .unwrap() .quality_profile_list .scroll_up(), - ActiveRadarrBlock::EditMoviePrompt => self.app.data.radarr_data.selected_block.previous(), + ActiveRadarrBlock::EditMoviePrompt => self.app.data.radarr_data.selected_block.up(), _ => (), } } @@ -90,7 +90,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for EditMovieHandler<'a, .unwrap() .quality_profile_list .scroll_down(), - ActiveRadarrBlock::EditMoviePrompt => self.app.data.radarr_data.selected_block.next(), + ActiveRadarrBlock::EditMoviePrompt => self.app.data.radarr_data.selected_block.down(), _ => (), } } diff --git a/src/handlers/radarr_handlers/library/edit_movie_handler_tests.rs b/src/handlers/radarr_handlers/library/edit_movie_handler_tests.rs index 86b3ed3..c63c2a7 100644 --- a/src/handlers/radarr_handlers/library/edit_movie_handler_tests.rs +++ b/src/handlers/radarr_handlers/library/edit_movie_handler_tests.rs @@ -146,8 +146,8 @@ mod tests { fn test_edit_movie_prompt_scroll(#[values(Key::Up, Key::Down)] key: Key) { let mut app = App::default(); app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default()); - app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.next(); + app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.down(); EditMovieHandler::with(key, &mut app, ActiveRadarrBlock::EditMoviePrompt, None).handle(); @@ -169,8 +169,8 @@ mod tests { let mut app = App::default(); app.is_loading = true; app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default()); - app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.next(); + app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.down(); EditMovieHandler::with(key, &mut app, ActiveRadarrBlock::EditMoviePrompt, None).handle(); @@ -621,12 +621,12 @@ mod tests { app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default()); app.push_navigation_stack(ActiveRadarrBlock::Movies.into()); app.push_navigation_stack(ActiveRadarrBlock::EditMoviePrompt.into()); - app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); + .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); EditMovieHandler::with( SUBMIT_KEY, @@ -647,12 +647,12 @@ mod tests { app.push_navigation_stack(ActiveRadarrBlock::Movies.into()); app.push_navigation_stack(ActiveRadarrBlock::EditMoviePrompt.into()); app.data.radarr_data.prompt_confirm = true; - app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); + .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); EditMovieHandler::with( SUBMIT_KEY, @@ -704,7 +704,7 @@ mod tests { )); let mut app = App::default(); app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default()); - app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS); app.push_navigation_stack(current_route); EditMovieHandler::with( @@ -755,7 +755,7 @@ mod tests { #[case(ActiveRadarrBlock::EditMovieTagsInput, 4)] fn test_edit_movie_prompt_selected_block_submit( #[case] selected_block: ActiveRadarrBlock, - #[case] index: usize, + #[case] y_index: usize, ) { let mut app = App::default(); app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default()); @@ -766,8 +766,8 @@ mod tests { ) .into(), ); - app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.set_index(index); + app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.set_index(0, y_index); EditMovieHandler::with( SUBMIT_KEY, @@ -792,7 +792,7 @@ mod tests { #[rstest] fn test_edit_movie_prompt_selected_block_submit_no_op_when_not_ready( - #[values(1, 2, 3, 4)] index: usize, + #[values(1, 2, 3, 4)] y_index: usize, ) { let mut app = App::default(); app.is_loading = true; @@ -804,8 +804,8 @@ mod tests { ) .into(), ); - app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS); - app.data.radarr_data.selected_block.set_index(index); + app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block.set_index(0, y_index); EditMovieHandler::with( SUBMIT_KEY, @@ -1061,12 +1061,12 @@ mod tests { app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default()); app.push_navigation_stack(ActiveRadarrBlock::Movies.into()); app.push_navigation_stack(ActiveRadarrBlock::EditMoviePrompt.into()); - app.data.radarr_data.selected_block = BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS); + app.data.radarr_data.selected_block = BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS); app .data .radarr_data .selected_block - .set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); + .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); EditMovieHandler::with( DEFAULT_KEYBINDINGS.confirm.key, diff --git a/src/handlers/radarr_handlers/library/library_handler_tests.rs b/src/handlers/radarr_handlers/library/library_handler_tests.rs index a955659..f79ba5a 100644 --- a/src/handlers/radarr_handlers/library/library_handler_tests.rs +++ b/src/handlers/radarr_handlers/library/library_handler_tests.rs @@ -375,7 +375,7 @@ mod tests { ); assert_eq!( app.data.radarr_data.selected_block.blocks, - &DELETE_MOVIE_SELECTION_BLOCKS + DELETE_MOVIE_SELECTION_BLOCKS ); } diff --git a/src/handlers/radarr_handlers/library/mod.rs b/src/handlers/radarr_handlers/library/mod.rs index 2d73248..f8ae0b9 100644 --- a/src/handlers/radarr_handlers/library/mod.rs +++ b/src/handlers/radarr_handlers/library/mod.rs @@ -194,7 +194,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for LibraryHandler<'a, ' .app .push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into()); self.app.data.radarr_data.selected_block = - BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS); + BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS); } } @@ -342,7 +342,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for LibraryHandler<'a, ' ); self.app.data.radarr_data.edit_movie_modal = Some((&self.app.data.radarr_data).into()); self.app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS); } _ if key == DEFAULT_KEYBINDINGS.add.key => { self diff --git a/src/handlers/radarr_handlers/library/movie_details_handler.rs b/src/handlers/radarr_handlers/library/movie_details_handler.rs index c08846a..fc81c2f 100644 --- a/src/handlers/radarr_handlers/library/movie_details_handler.rs +++ b/src/handlers/radarr_handlers/library/movie_details_handler.rs @@ -447,7 +447,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for MovieDetailsHandler< ); self.app.data.radarr_data.edit_movie_modal = Some((&self.app.data.radarr_data).into()); self.app.data.radarr_data.selected_block = - BlockSelectionState::new(&EDIT_MOVIE_SELECTION_BLOCKS); + BlockSelectionState::new(EDIT_MOVIE_SELECTION_BLOCKS); } _ if key == DEFAULT_KEYBINDINGS.update.key => { self diff --git a/src/handlers/radarr_handlers/radarr_handler_test_utils.rs b/src/handlers/radarr_handlers/radarr_handler_test_utils.rs index afb6761..b14cd28 100644 --- a/src/handlers/radarr_handlers/radarr_handler_test_utils.rs +++ b/src/handlers/radarr_handlers/radarr_handler_test_utils.rs @@ -111,7 +111,7 @@ mod utils { ); assert_eq!( app.data.radarr_data.selected_block.blocks, - &EDIT_MOVIE_SELECTION_BLOCKS + EDIT_MOVIE_SELECTION_BLOCKS ); }; } @@ -224,7 +224,7 @@ mod utils { ); assert_eq!( app.data.radarr_data.selected_block.blocks, - &EDIT_COLLECTION_SELECTION_BLOCKS + EDIT_COLLECTION_SELECTION_BLOCKS ); }; } diff --git a/src/models/mod.rs b/src/models/mod.rs index 267024a..ba2a3f9 100644 --- a/src/models/mod.rs +++ b/src/models/mod.rs @@ -320,33 +320,46 @@ pub struct BlockSelectionState<'a, T> where T: Sized + Clone + Copy + Default, { - pub blocks: &'a [T], - pub index: usize, + pub blocks: &'a [&'a [T]], + pub x: usize, + pub y: usize, } impl<'a, T> BlockSelectionState<'a, T> where T: Sized + Clone + Copy + Default, { - pub fn new(blocks: &'a [T]) -> BlockSelectionState<'a, T> { - BlockSelectionState { blocks, index: 0 } + pub fn new(blocks: &'a [&'a [T]]) -> BlockSelectionState<'a, T> { + BlockSelectionState { blocks, x: 0, y: 0 } } pub fn get_active_block(&self) -> T { - self.blocks[self.index] + self.blocks[self.y][self.x] } - pub fn next(&mut self) { - self.index = (self.index + 1) % self.blocks.len(); - } - - pub fn previous(&mut self) { - if self.index > 0 { - self.index -= 1; + pub fn left(&mut self) { + if self.x > 0 { + self.x -= 1; } else { - self.index = self.blocks.len() - 1; + self.x = self.blocks[0].len() - 1; } } + + pub fn right(&mut self) { + self.x = (self.x + 1) % self.blocks[0].len(); + } + + pub fn up(&mut self) { + if self.y > 0 { + self.y -= 1; + } else { + self.y = self.blocks.len() - 1; + } + } + + pub fn down(&mut self) { + self.y = (self.y + 1) % self.blocks.len(); + } } #[cfg(test)] @@ -354,8 +367,9 @@ impl<'a, T> BlockSelectionState<'a, T> where T: Sized + Clone + Copy + Default, { - pub fn set_index(&mut self, index: usize) { - self.index = index; + pub fn set_index(&mut self, x: usize, y: usize) { + self.x = x; + self.y = y; } } diff --git a/src/models/model_tests.rs b/src/models/model_tests.rs index 2d40a50..0514577 100644 --- a/src/models/model_tests.rs +++ b/src/models/model_tests.rs @@ -17,14 +17,7 @@ mod tests { BlockSelectionState, HorizontallyScrollableText, Scrollable, ScrollableText, TabRoute, TabState, }; - const BLOCKS: [ActiveRadarrBlock; 6] = [ - ActiveRadarrBlock::AddMovieSelectRootFolder, - ActiveRadarrBlock::AddMovieSelectMonitor, - ActiveRadarrBlock::AddMovieSelectMinimumAvailability, - ActiveRadarrBlock::AddMovieSelectQualityProfile, - ActiveRadarrBlock::AddMovieTagsInput, - ActiveRadarrBlock::AddMovieConfirmPrompt, - ]; + const BLOCKS: &[&[i32]] = &[&[11, 12], &[21, 22], &[31, 32]]; #[test] fn test_scrollable_text_with_string() { @@ -577,17 +570,19 @@ mod tests { #[test] fn test_block_selection_state_new() { - let block_selection_state = BlockSelectionState::new(&BLOCKS); + let block_selection_state = BlockSelectionState::new(BLOCKS); - assert_eq!(block_selection_state.index, 0); + assert_eq!(block_selection_state.x, 0); + assert_eq!(block_selection_state.y, 0); } #[test] fn test_block_selection_state_get_active_block() { - let second_block = BLOCKS[1]; + let second_block = BLOCKS[1][1]; let block_selection_state = BlockSelectionState { - blocks: &BLOCKS, - index: 1, + blocks: BLOCKS, + x: 1, + y: 1, }; let active_block = block_selection_state.get_active_block(); @@ -596,41 +591,95 @@ mod tests { } #[test] - fn test_block_selection_state_next() { - let blocks = [ - ActiveRadarrBlock::AddMovieSelectRootFolder, - ActiveRadarrBlock::AddMovieSelectMonitor, - ]; - let mut block_selection_state = BlockSelectionState::new(&blocks); + fn test_block_selection_state_down() { + let mut block_selection_state = BlockSelectionState::new(BLOCKS); - assert_eq!(block_selection_state.get_active_block(), blocks[0]); + assert_eq!(block_selection_state.get_active_block(), BLOCKS[0][0]); - block_selection_state.next(); + block_selection_state.down(); - assert_eq!(block_selection_state.get_active_block(), blocks[1]); + assert_eq!(block_selection_state.get_active_block(), BLOCKS[1][0]); - block_selection_state.next(); + block_selection_state.down(); - assert_eq!(block_selection_state.get_active_block(), blocks[0]); + assert_eq!(block_selection_state.get_active_block(), BLOCKS[2][0]); + + block_selection_state.down(); + + assert_eq!(block_selection_state.get_active_block(), BLOCKS[0][0]); } #[test] - fn test_block_selection_state_previous() { - let blocks = [ - ActiveRadarrBlock::AddMovieSelectRootFolder, - ActiveRadarrBlock::AddMovieSelectMonitor, - ]; - let mut block_selection_state = BlockSelectionState::new(&blocks); + fn test_block_selection_state_up() { + let mut block_selection_state = BlockSelectionState::new(BLOCKS); - assert_eq!(block_selection_state.get_active_block(), blocks[0]); + assert_eq!(block_selection_state.get_active_block(), BLOCKS[0][0]); - block_selection_state.previous(); + block_selection_state.up(); - assert_eq!(block_selection_state.get_active_block(), blocks[1]); + assert_eq!(block_selection_state.get_active_block(), BLOCKS[2][0]); - block_selection_state.previous(); + block_selection_state.up(); - assert_eq!(block_selection_state.get_active_block(), blocks[0]); + assert_eq!(block_selection_state.get_active_block(), BLOCKS[1][0]); + + block_selection_state.up(); + + assert_eq!(block_selection_state.get_active_block(), BLOCKS[0][0]); + } + + #[test] + fn test_block_selection_state_left() { + let mut block_selection_state = BlockSelectionState::new(BLOCKS); + + assert_eq!(block_selection_state.get_active_block(), BLOCKS[0][0]); + + block_selection_state.left(); + + assert_eq!(block_selection_state.get_active_block(), BLOCKS[0][1]); + + block_selection_state.left(); + + assert_eq!(block_selection_state.get_active_block(), BLOCKS[0][0]); + + block_selection_state.set_index(0, 1); + + assert_eq!(block_selection_state.get_active_block(), BLOCKS[1][0]); + + block_selection_state.left(); + + assert_eq!(block_selection_state.get_active_block(), BLOCKS[1][1]); + + block_selection_state.left(); + + assert_eq!(block_selection_state.get_active_block(), BLOCKS[1][0]); + } + + #[test] + fn test_block_selection_state_right() { + let mut block_selection_state = BlockSelectionState::new(BLOCKS); + + assert_eq!(block_selection_state.get_active_block(), BLOCKS[0][0]); + + block_selection_state.right(); + + assert_eq!(block_selection_state.get_active_block(), BLOCKS[0][1]); + + block_selection_state.right(); + + assert_eq!(block_selection_state.get_active_block(), BLOCKS[0][0]); + + block_selection_state.set_index(0, 1); + + assert_eq!(block_selection_state.get_active_block(), BLOCKS[1][0]); + + block_selection_state.right(); + + assert_eq!(block_selection_state.get_active_block(), BLOCKS[1][1]); + + block_selection_state.right(); + + assert_eq!(block_selection_state.get_active_block(), BLOCKS[1][0]); } #[test] diff --git a/src/models/servarr_data/radarr/radarr_data.rs b/src/models/servarr_data/radarr/radarr_data.rs index c377df8..0d9c621 100644 --- a/src/models/servarr_data/radarr/radarr_data.rs +++ b/src/models/servarr_data/radarr/radarr_data.rs @@ -357,13 +357,13 @@ pub static ADD_MOVIE_BLOCKS: [ActiveRadarrBlock; 10] = [ ActiveRadarrBlock::AddMovieAlreadyInLibrary, ActiveRadarrBlock::AddMovieTagsInput, ]; -pub static ADD_MOVIE_SELECTION_BLOCKS: [ActiveRadarrBlock; 6] = [ - ActiveRadarrBlock::AddMovieSelectRootFolder, - ActiveRadarrBlock::AddMovieSelectMonitor, - ActiveRadarrBlock::AddMovieSelectMinimumAvailability, - ActiveRadarrBlock::AddMovieSelectQualityProfile, - ActiveRadarrBlock::AddMovieTagsInput, - ActiveRadarrBlock::AddMovieConfirmPrompt, +pub const ADD_MOVIE_SELECTION_BLOCKS: &[&[ActiveRadarrBlock]] = &[ + &[ActiveRadarrBlock::AddMovieSelectRootFolder], + &[ActiveRadarrBlock::AddMovieSelectMonitor], + &[ActiveRadarrBlock::AddMovieSelectMinimumAvailability], + &[ActiveRadarrBlock::AddMovieSelectQualityProfile], + &[ActiveRadarrBlock::AddMovieTagsInput], + &[ActiveRadarrBlock::AddMovieConfirmPrompt], ]; pub static EDIT_COLLECTION_BLOCKS: [ActiveRadarrBlock; 7] = [ ActiveRadarrBlock::EditCollectionPrompt, @@ -374,13 +374,13 @@ pub static EDIT_COLLECTION_BLOCKS: [ActiveRadarrBlock; 7] = [ ActiveRadarrBlock::EditCollectionToggleSearchOnAdd, ActiveRadarrBlock::EditCollectionToggleMonitored, ]; -pub static EDIT_COLLECTION_SELECTION_BLOCKS: [ActiveRadarrBlock; 6] = [ - ActiveRadarrBlock::EditCollectionToggleMonitored, - ActiveRadarrBlock::EditCollectionSelectMinimumAvailability, - ActiveRadarrBlock::EditCollectionSelectQualityProfile, - ActiveRadarrBlock::EditCollectionRootFolderPathInput, - ActiveRadarrBlock::EditCollectionToggleSearchOnAdd, - ActiveRadarrBlock::EditCollectionConfirmPrompt, +pub const EDIT_COLLECTION_SELECTION_BLOCKS: &[&[ActiveRadarrBlock]] = &[ + &[ActiveRadarrBlock::EditCollectionToggleMonitored], + &[ActiveRadarrBlock::EditCollectionSelectMinimumAvailability], + &[ActiveRadarrBlock::EditCollectionSelectQualityProfile], + &[ActiveRadarrBlock::EditCollectionRootFolderPathInput], + &[ActiveRadarrBlock::EditCollectionToggleSearchOnAdd], + &[ActiveRadarrBlock::EditCollectionConfirmPrompt], ]; pub static EDIT_MOVIE_BLOCKS: [ActiveRadarrBlock; 7] = [ ActiveRadarrBlock::EditMoviePrompt, @@ -391,13 +391,13 @@ pub static EDIT_MOVIE_BLOCKS: [ActiveRadarrBlock; 7] = [ ActiveRadarrBlock::EditMovieTagsInput, ActiveRadarrBlock::EditMovieToggleMonitored, ]; -pub static EDIT_MOVIE_SELECTION_BLOCKS: [ActiveRadarrBlock; 6] = [ - ActiveRadarrBlock::EditMovieToggleMonitored, - ActiveRadarrBlock::EditMovieSelectMinimumAvailability, - ActiveRadarrBlock::EditMovieSelectQualityProfile, - ActiveRadarrBlock::EditMoviePathInput, - ActiveRadarrBlock::EditMovieTagsInput, - ActiveRadarrBlock::EditMovieConfirmPrompt, +pub const EDIT_MOVIE_SELECTION_BLOCKS: &[&[ActiveRadarrBlock]] = &[ + &[ActiveRadarrBlock::EditMovieToggleMonitored], + &[ActiveRadarrBlock::EditMovieSelectMinimumAvailability], + &[ActiveRadarrBlock::EditMovieSelectQualityProfile], + &[ActiveRadarrBlock::EditMoviePathInput], + &[ActiveRadarrBlock::EditMovieTagsInput], + &[ActiveRadarrBlock::EditMovieConfirmPrompt], ]; pub static DOWNLOADS_BLOCKS: [ActiveRadarrBlock; 3] = [ ActiveRadarrBlock::Downloads, @@ -426,10 +426,10 @@ pub static DELETE_MOVIE_BLOCKS: [ActiveRadarrBlock; 4] = [ ActiveRadarrBlock::DeleteMovieToggleDeleteFile, ActiveRadarrBlock::DeleteMovieToggleAddListExclusion, ]; -pub static DELETE_MOVIE_SELECTION_BLOCKS: [ActiveRadarrBlock; 3] = [ - ActiveRadarrBlock::DeleteMovieToggleDeleteFile, - ActiveRadarrBlock::DeleteMovieToggleAddListExclusion, - ActiveRadarrBlock::DeleteMovieConfirmPrompt, +pub const DELETE_MOVIE_SELECTION_BLOCKS: &[&[ActiveRadarrBlock]] = &[ + &[ActiveRadarrBlock::DeleteMovieToggleDeleteFile], + &[ActiveRadarrBlock::DeleteMovieToggleAddListExclusion], + &[ActiveRadarrBlock::DeleteMovieConfirmPrompt], ]; pub static EDIT_INDEXER_BLOCKS: [ActiveRadarrBlock; 10] = [ ActiveRadarrBlock::EditIndexerPrompt, @@ -443,29 +443,49 @@ pub static EDIT_INDEXER_BLOCKS: [ActiveRadarrBlock; 10] = [ ActiveRadarrBlock::EditIndexerUrlInput, ActiveRadarrBlock::EditIndexerTagsInput, ]; -pub static EDIT_INDEXER_TORRENT_SELECTION_BLOCKS: [ActiveRadarrBlock; 10] = [ - ActiveRadarrBlock::EditIndexerNameInput, - ActiveRadarrBlock::EditIndexerToggleEnableRss, - ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch, - ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch, - ActiveRadarrBlock::EditIndexerConfirmPrompt, - ActiveRadarrBlock::EditIndexerUrlInput, - ActiveRadarrBlock::EditIndexerApiKeyInput, - ActiveRadarrBlock::EditIndexerSeedRatioInput, - ActiveRadarrBlock::EditIndexerTagsInput, - ActiveRadarrBlock::EditIndexerConfirmPrompt, +pub const EDIT_INDEXER_TORRENT_SELECTION_BLOCKS: &[&[ActiveRadarrBlock]] = &[ + &[ + ActiveRadarrBlock::EditIndexerNameInput, + ActiveRadarrBlock::EditIndexerUrlInput, + ], + &[ + ActiveRadarrBlock::EditIndexerToggleEnableRss, + ActiveRadarrBlock::EditIndexerApiKeyInput, + ], + &[ + ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch, + ActiveRadarrBlock::EditIndexerSeedRatioInput, + ], + &[ + ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch, + ActiveRadarrBlock::EditIndexerTagsInput, + ], + &[ + ActiveRadarrBlock::EditIndexerConfirmPrompt, + ActiveRadarrBlock::EditIndexerConfirmPrompt, + ], ]; -pub static EDIT_INDEXER_NZB_SELECTION_BLOCKS: [ActiveRadarrBlock; 10] = [ - ActiveRadarrBlock::EditIndexerNameInput, - ActiveRadarrBlock::EditIndexerToggleEnableRss, - ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch, - ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch, - ActiveRadarrBlock::EditIndexerConfirmPrompt, - ActiveRadarrBlock::EditIndexerUrlInput, - ActiveRadarrBlock::EditIndexerApiKeyInput, - ActiveRadarrBlock::EditIndexerTagsInput, - ActiveRadarrBlock::EditIndexerConfirmPrompt, - ActiveRadarrBlock::EditIndexerConfirmPrompt, +pub const EDIT_INDEXER_NZB_SELECTION_BLOCKS: &[&[ActiveRadarrBlock]] = &[ + &[ + ActiveRadarrBlock::EditIndexerNameInput, + ActiveRadarrBlock::EditIndexerUrlInput, + ], + &[ + ActiveRadarrBlock::EditIndexerToggleEnableRss, + ActiveRadarrBlock::EditIndexerApiKeyInput, + ], + &[ + ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch, + ActiveRadarrBlock::EditIndexerTagsInput, + ], + &[ + ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch, + ActiveRadarrBlock::EditIndexerConfirmPrompt, + ], + &[ + ActiveRadarrBlock::EditIndexerConfirmPrompt, + ActiveRadarrBlock::EditIndexerConfirmPrompt, + ], ]; pub static INDEXER_SETTINGS_BLOCKS: [ActiveRadarrBlock; 10] = [ ActiveRadarrBlock::AllIndexerSettingsPrompt, @@ -479,17 +499,27 @@ pub static INDEXER_SETTINGS_BLOCKS: [ActiveRadarrBlock; 10] = [ ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags, ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput, ]; -pub static INDEXER_SETTINGS_SELECTION_BLOCKS: [ActiveRadarrBlock; 10] = [ - ActiveRadarrBlock::IndexerSettingsMinimumAgeInput, - ActiveRadarrBlock::IndexerSettingsRetentionInput, - ActiveRadarrBlock::IndexerSettingsMaximumSizeInput, - ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags, - ActiveRadarrBlock::IndexerSettingsConfirmPrompt, - ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput, - ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput, - ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput, - ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs, - ActiveRadarrBlock::IndexerSettingsConfirmPrompt, +pub const INDEXER_SETTINGS_SELECTION_BLOCKS: &[&[ActiveRadarrBlock]] = &[ + &[ + ActiveRadarrBlock::IndexerSettingsMinimumAgeInput, + ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput, + ], + &[ + ActiveRadarrBlock::IndexerSettingsRetentionInput, + ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput, + ], + &[ + ActiveRadarrBlock::IndexerSettingsMaximumSizeInput, + ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput, + ], + &[ + ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags, + ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs, + ], + &[ + ActiveRadarrBlock::IndexerSettingsConfirmPrompt, + ActiveRadarrBlock::IndexerSettingsConfirmPrompt, + ], ]; pub static SYSTEM_DETAILS_BLOCKS: [ActiveRadarrBlock; 5] = [ ActiveRadarrBlock::SystemLogs, diff --git a/src/models/servarr_data/radarr/radarr_data_tests.rs b/src/models/servarr_data/radarr/radarr_data_tests.rs index 15eebb5..6d4a07d 100644 --- a/src/models/servarr_data/radarr/radarr_data_tests.rs +++ b/src/models/servarr_data/radarr/radarr_data_tests.rs @@ -468,27 +468,27 @@ mod tests { assert_eq!( add_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::AddMovieSelectRootFolder + &[ActiveRadarrBlock::AddMovieSelectRootFolder] ); assert_eq!( add_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::AddMovieSelectMonitor + &[ActiveRadarrBlock::AddMovieSelectMonitor] ); assert_eq!( add_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::AddMovieSelectMinimumAvailability + &[ActiveRadarrBlock::AddMovieSelectMinimumAvailability] ); assert_eq!( add_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::AddMovieSelectQualityProfile + &[ActiveRadarrBlock::AddMovieSelectQualityProfile] ); assert_eq!( add_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::AddMovieTagsInput + &[ActiveRadarrBlock::AddMovieTagsInput] ); assert_eq!( add_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::AddMovieConfirmPrompt + &[ActiveRadarrBlock::AddMovieConfirmPrompt] ); assert_eq!(add_movie_block_iter.next(), None); } @@ -499,27 +499,27 @@ mod tests { assert_eq!( edit_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditMovieToggleMonitored + &[ActiveRadarrBlock::EditMovieToggleMonitored] ); assert_eq!( edit_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditMovieSelectMinimumAvailability + &[ActiveRadarrBlock::EditMovieSelectMinimumAvailability] ); assert_eq!( edit_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditMovieSelectQualityProfile + &[ActiveRadarrBlock::EditMovieSelectQualityProfile] ); assert_eq!( edit_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditMoviePathInput + &[ActiveRadarrBlock::EditMoviePathInput] ); assert_eq!( edit_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditMovieTagsInput + &[ActiveRadarrBlock::EditMovieTagsInput] ); assert_eq!( edit_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditMovieConfirmPrompt + &[ActiveRadarrBlock::EditMovieConfirmPrompt] ); assert_eq!(edit_movie_block_iter.next(), None); } @@ -530,27 +530,27 @@ mod tests { assert_eq!( edit_collection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditCollectionToggleMonitored + &[ActiveRadarrBlock::EditCollectionToggleMonitored] ); assert_eq!( edit_collection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditCollectionSelectMinimumAvailability + &[ActiveRadarrBlock::EditCollectionSelectMinimumAvailability] ); assert_eq!( edit_collection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditCollectionSelectQualityProfile + &[ActiveRadarrBlock::EditCollectionSelectQualityProfile] ); assert_eq!( edit_collection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditCollectionRootFolderPathInput + &[ActiveRadarrBlock::EditCollectionRootFolderPathInput] ); assert_eq!( edit_collection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditCollectionToggleSearchOnAdd + &[ActiveRadarrBlock::EditCollectionToggleSearchOnAdd] ); assert_eq!( edit_collection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditCollectionConfirmPrompt + &[ActiveRadarrBlock::EditCollectionConfirmPrompt] ); assert_eq!(edit_collection_block_iter.next(), None); } @@ -561,15 +561,15 @@ mod tests { assert_eq!( delete_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::DeleteMovieToggleDeleteFile + &[ActiveRadarrBlock::DeleteMovieToggleDeleteFile] ); assert_eq!( delete_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::DeleteMovieToggleAddListExclusion + &[ActiveRadarrBlock::DeleteMovieToggleAddListExclusion] ); assert_eq!( delete_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::DeleteMovieConfirmPrompt + &[ActiveRadarrBlock::DeleteMovieConfirmPrompt] ); assert_eq!(delete_movie_block_iter.next(), None); } @@ -581,43 +581,38 @@ mod tests { assert_eq!( edit_indexer_torrent_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerNameInput + &[ + ActiveRadarrBlock::EditIndexerNameInput, + ActiveRadarrBlock::EditIndexerUrlInput, + ] ); assert_eq!( edit_indexer_torrent_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerToggleEnableRss + &[ + ActiveRadarrBlock::EditIndexerToggleEnableRss, + ActiveRadarrBlock::EditIndexerApiKeyInput, + ] ); assert_eq!( edit_indexer_torrent_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch + &[ + ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch, + ActiveRadarrBlock::EditIndexerSeedRatioInput, + ] ); assert_eq!( edit_indexer_torrent_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch + &[ + ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch, + ActiveRadarrBlock::EditIndexerTagsInput, + ] ); assert_eq!( edit_indexer_torrent_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerConfirmPrompt - ); - assert_eq!( - edit_indexer_torrent_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerUrlInput - ); - assert_eq!( - edit_indexer_torrent_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerApiKeyInput - ); - assert_eq!( - edit_indexer_torrent_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerSeedRatioInput - ); - assert_eq!( - edit_indexer_torrent_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerTagsInput - ); - assert_eq!( - edit_indexer_torrent_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerConfirmPrompt + &[ + ActiveRadarrBlock::EditIndexerConfirmPrompt, + ActiveRadarrBlock::EditIndexerConfirmPrompt, + ] ); assert_eq!(edit_indexer_torrent_selection_block_iter.next(), None); } @@ -628,43 +623,38 @@ mod tests { assert_eq!( edit_indexer_nzb_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerNameInput + &[ + ActiveRadarrBlock::EditIndexerNameInput, + ActiveRadarrBlock::EditIndexerUrlInput, + ] ); assert_eq!( edit_indexer_nzb_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerToggleEnableRss + &[ + ActiveRadarrBlock::EditIndexerToggleEnableRss, + ActiveRadarrBlock::EditIndexerApiKeyInput, + ] ); assert_eq!( edit_indexer_nzb_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch + &[ + ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch, + ActiveRadarrBlock::EditIndexerTagsInput, + ] ); assert_eq!( edit_indexer_nzb_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch + &[ + ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch, + ActiveRadarrBlock::EditIndexerConfirmPrompt, + ] ); assert_eq!( edit_indexer_nzb_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerConfirmPrompt - ); - assert_eq!( - edit_indexer_nzb_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerUrlInput - ); - assert_eq!( - edit_indexer_nzb_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerApiKeyInput - ); - assert_eq!( - edit_indexer_nzb_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerTagsInput - ); - assert_eq!( - edit_indexer_nzb_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerConfirmPrompt - ); - assert_eq!( - edit_indexer_nzb_selection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditIndexerConfirmPrompt + &[ + ActiveRadarrBlock::EditIndexerConfirmPrompt, + ActiveRadarrBlock::EditIndexerConfirmPrompt, + ] ); assert_eq!(edit_indexer_nzb_selection_block_iter.next(), None); } @@ -675,43 +665,38 @@ mod tests { assert_eq!( indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsMinimumAgeInput + &[ + ActiveRadarrBlock::IndexerSettingsMinimumAgeInput, + ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput, + ] ); assert_eq!( indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsRetentionInput + &[ + ActiveRadarrBlock::IndexerSettingsRetentionInput, + ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput, + ] ); assert_eq!( indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsMaximumSizeInput + &[ + ActiveRadarrBlock::IndexerSettingsMaximumSizeInput, + ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput, + ] ); assert_eq!( indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags + &[ + ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags, + ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs, + ] ); assert_eq!( indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsConfirmPrompt - ); - assert_eq!( - indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput - ); - assert_eq!( - indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput - ); - assert_eq!( - indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput - ); - assert_eq!( - indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs - ); - assert_eq!( - indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsConfirmPrompt + &[ + ActiveRadarrBlock::IndexerSettingsConfirmPrompt, + ActiveRadarrBlock::IndexerSettingsConfirmPrompt, + ] ); assert_eq!(indexer_settings_block_iter.next(), None); } diff --git a/src/ui/sonarr_ui/mod.rs b/src/ui/sonarr_ui/mod.rs index fe95448..18a8fce 100644 --- a/src/ui/sonarr_ui/mod.rs +++ b/src/ui/sonarr_ui/mod.rs @@ -169,7 +169,7 @@ fn draw_downloads_context(f: &mut Frame<'_>, app: &App<'_>, area: Rect) { f.render_widget(block, area); let max_items = ((((area.height as f64 / 2.0).floor() * 2.0) as i64) / 2) - 1; - let items = cmp::min(downloads_vec.len(), max_items.abs() as usize); + let items = cmp::min(downloads_vec.len(), max_items.unsigned_abs() as usize); let download_item_areas = Layout::vertical( iter::repeat(Constraint::Length(2)) .take(items)