refactor(BlockSelectionState): Refactored so selection of blocks in 2x2 grids is more intuitive and added left() and right() methods to aid this effort.

This commit is contained in:
2024-11-30 12:22:46 -07:00
parent 9b2040059d
commit f7c96d81e9
27 changed files with 472 additions and 387 deletions
+13
View File
@@ -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();
}
};
}
@@ -111,7 +111,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for CollectionDetailsHan
.into(), .into(),
); );
self.app.data.radarr_data.selected_block = 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()); 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.edit_collection_modal = Some((&self.app.data.radarr_data).into());
self.app.data.radarr_data.selected_block = self.app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS);
} }
} }
} }
@@ -171,12 +171,12 @@ mod tests {
.set_items(vec![CollectionMovie::default()]); .set_items(vec![CollectionMovie::default()]);
app.data.radarr_data.quality_profile_map = app.data.radarr_data.quality_profile_map =
BiMap::from_iter([(1, "B - Test 2".to_owned()), (0, "A - Test 1".to_owned())]); 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 app
.data .data
.radarr_data .radarr_data
.selected_block .selected_block
.set_index(ADD_MOVIE_SELECTION_BLOCKS.len() - 1); .set_index(0, ADD_MOVIE_SELECTION_BLOCKS.len() - 1);
CollectionDetailsHandler::with( CollectionDetailsHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -65,9 +65,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for EditCollectionHandle
.unwrap() .unwrap()
.quality_profile_list .quality_profile_list
.scroll_up(), .scroll_up(),
ActiveRadarrBlock::EditCollectionPrompt => { ActiveRadarrBlock::EditCollectionPrompt => self.app.data.radarr_data.selected_block.up(),
self.app.data.radarr_data.selected_block.previous()
}
_ => (), _ => (),
} }
} }
@@ -92,7 +90,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for EditCollectionHandle
.unwrap() .unwrap()
.quality_profile_list .quality_profile_list
.scroll_down(), .scroll_down(),
ActiveRadarrBlock::EditCollectionPrompt => self.app.data.radarr_data.selected_block.next(), ActiveRadarrBlock::EditCollectionPrompt => self.app.data.radarr_data.selected_block.down(),
_ => (), _ => (),
} }
} }
@@ -149,8 +149,8 @@ mod tests {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.edit_collection_modal = Some(EditCollectionModal::default()); app.data.radarr_data.edit_collection_modal = Some(EditCollectionModal::default());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.next(); app.data.radarr_data.selected_block.down();
EditCollectionHandler::with(key, &mut app, ActiveRadarrBlock::EditCollectionPrompt, None) EditCollectionHandler::with(key, &mut app, ActiveRadarrBlock::EditCollectionPrompt, None)
.handle(); .handle();
@@ -176,8 +176,8 @@ mod tests {
app.is_loading = true; app.is_loading = true;
app.data.radarr_data.edit_collection_modal = Some(EditCollectionModal::default()); app.data.radarr_data.edit_collection_modal = Some(EditCollectionModal::default());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.next(); app.data.radarr_data.selected_block.down();
EditCollectionHandler::with(key, &mut app, ActiveRadarrBlock::EditCollectionPrompt, None) EditCollectionHandler::with(key, &mut app, ActiveRadarrBlock::EditCollectionPrompt, None)
.handle(); .handle();
@@ -494,12 +494,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::Collections.into()); app.push_navigation_stack(ActiveRadarrBlock::Collections.into());
app.push_navigation_stack(ActiveRadarrBlock::EditCollectionPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::EditCollectionPrompt.into());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .selected_block
.set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1);
EditCollectionHandler::with( EditCollectionHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -524,12 +524,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::EditCollectionPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::EditCollectionPrompt.into());
app.data.radarr_data.prompt_confirm = true; app.data.radarr_data.prompt_confirm = true;
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .selected_block
.set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1);
EditCollectionHandler::with( EditCollectionHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -559,12 +559,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::EditCollectionPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::EditCollectionPrompt.into());
app.data.radarr_data.prompt_confirm = true; app.data.radarr_data.prompt_confirm = true;
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .selected_block
.set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1);
EditCollectionHandler::with( EditCollectionHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -591,7 +591,7 @@ mod tests {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.edit_collection_modal = Some(EditCollectionModal::default()); app.data.radarr_data.edit_collection_modal = Some(EditCollectionModal::default());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS);
app.push_navigation_stack(current_route); app.push_navigation_stack(current_route);
EditCollectionHandler::with( EditCollectionHandler::with(
@@ -644,12 +644,12 @@ mod tests {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.edit_collection_modal = Some(EditCollectionModal::default()); app.data.radarr_data.edit_collection_modal = Some(EditCollectionModal::default());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .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); app.push_navigation_stack(current_route);
EditCollectionHandler::with( EditCollectionHandler::with(
@@ -711,8 +711,8 @@ mod tests {
.into(), .into(),
); );
app.data.radarr_data.selected_block = 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(index); app.data.radarr_data.selected_block.set_index(0, index);
EditCollectionHandler::with( EditCollectionHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -923,12 +923,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::Collections.into()); app.push_navigation_stack(ActiveRadarrBlock::Collections.into());
app.push_navigation_stack(ActiveRadarrBlock::EditCollectionPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::EditCollectionPrompt.into());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_COLLECTION_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_COLLECTION_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .selected_block
.set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1);
EditCollectionHandler::with( EditCollectionHandler::with(
DEFAULT_KEYBINDINGS.confirm.key, DEFAULT_KEYBINDINGS.confirm.key,
@@ -334,7 +334,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for CollectionsHandler<'
self.app.data.radarr_data.edit_collection_modal = self.app.data.radarr_data.edit_collection_modal =
Some((&self.app.data.radarr_data).into()); Some((&self.app.data.radarr_data).into());
self.app.data.radarr_data.selected_block = 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 => { _ if key == DEFAULT_KEYBINDINGS.update.key => {
self self
@@ -4,7 +4,7 @@ use crate::event::Key;
use crate::handlers::{handle_prompt_toggle, KeyEventHandler}; use crate::handlers::{handle_prompt_toggle, KeyEventHandler};
use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, EDIT_INDEXER_BLOCKS}; use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, EDIT_INDEXER_BLOCKS};
use crate::network::radarr_network::RadarrEvent; 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)] #[cfg(test)]
#[path = "edit_indexer_handler_tests.rs"] #[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) { fn handle_scroll_up(&mut self) {
if self.active_radarr_block == ActiveRadarrBlock::EditIndexerPrompt { 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) { fn handle_scroll_down(&mut self) {
if self.active_radarr_block == ActiveRadarrBlock::EditIndexerPrompt { 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) { fn handle_left_right_action(&mut self) {
match self.active_radarr_block { match self.active_radarr_block {
ActiveRadarrBlock::EditIndexerPrompt => { ActiveRadarrBlock::EditIndexerPrompt => {
if self.app.data.radarr_data.selected_block.get_active_block() handle_prompt_left_right_keys!(
== ActiveRadarrBlock::EditIndexerConfirmPrompt self,
{ ActiveRadarrBlock::EditIndexerConfirmPrompt,
handle_prompt_toggle(self.app, self.key); radarr_data
} 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;
}
} }
ActiveRadarrBlock::EditIndexerNameInput => { ActiveRadarrBlock::EditIndexerNameInput => {
handle_text_box_left_right_keys!( handle_text_box_left_right_keys!(
@@ -25,8 +25,8 @@ mod tests {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default());
app.data.radarr_data.selected_block = 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.next(); app.data.radarr_data.selected_block.down();
EditIndexerHandler::with(key, &mut app, ActiveRadarrBlock::EditIndexerPrompt, None).handle(); EditIndexerHandler::with(key, &mut app, ActiveRadarrBlock::EditIndexerPrompt, None).handle();
@@ -51,8 +51,8 @@ mod tests {
app.is_loading = true; app.is_loading = true;
app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default());
app.data.radarr_data.selected_block = 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.next(); app.data.radarr_data.selected_block.down();
EditIndexerHandler::with(key, &mut app, ActiveRadarrBlock::EditIndexerPrompt, None).handle(); 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) { fn test_left_right_prompt_toggle(#[values(Key::Left, Key::Right)] key: Key) {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.selected_block = 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.index = EDIT_INDEXER_TORRENT_SELECTION_BLOCKS.len() - 1; app.data.radarr_data.selected_block.y = EDIT_INDEXER_TORRENT_SELECTION_BLOCKS.len() - 1;
EditIndexerHandler::with(key, &mut app, ActiveRadarrBlock::EditIndexerPrompt, None).handle(); EditIndexerHandler::with(key, &mut app, ActiveRadarrBlock::EditIndexerPrompt, None).handle();
@@ -381,14 +381,14 @@ mod tests {
)] )]
fn test_left_right_block_toggle_torrents( fn test_left_right_block_toggle_torrents(
#[values(Key::Left, Key::Right)] key: Key, #[values(Key::Left, Key::Right)] key: Key,
#[case] starting_index: usize, #[case] starting_y_index: usize,
#[case] left_block: ActiveRadarrBlock, #[case] left_block: ActiveRadarrBlock,
#[case] right_block: ActiveRadarrBlock, #[case] right_block: ActiveRadarrBlock,
) { ) {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.selected_block = 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.index = starting_index; app.data.radarr_data.selected_block.y = starting_y_index;
assert_eq!( assert_eq!(
app.data.radarr_data.selected_block.get_active_block(), app.data.radarr_data.selected_block.get_active_block(),
@@ -428,14 +428,14 @@ mod tests {
)] )]
fn test_left_right_block_toggle_nzb( fn test_left_right_block_toggle_nzb(
#[values(Key::Left, Key::Right)] key: Key, #[values(Key::Left, Key::Right)] key: Key,
#[case] starting_index: usize, #[case] starting_y_index: usize,
#[case] left_block: ActiveRadarrBlock, #[case] left_block: ActiveRadarrBlock,
#[case] right_block: ActiveRadarrBlock, #[case] right_block: ActiveRadarrBlock,
) { ) {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_INDEXER_NZB_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_INDEXER_NZB_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.index = starting_index; app.data.radarr_data.selected_block.y = starting_y_index;
assert_eq!( assert_eq!(
app.data.radarr_data.selected_block.get_active_block(), app.data.radarr_data.selected_block.get_active_block(),
@@ -463,8 +463,8 @@ mod tests {
) { ) {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_INDEXER_NZB_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_INDEXER_NZB_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.index = 3; app.data.radarr_data.selected_block.y = 3;
app.data.radarr_data.prompt_confirm = false; app.data.radarr_data.prompt_confirm = false;
assert_eq!( assert_eq!(
@@ -765,12 +765,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::Indexers.into()); app.push_navigation_stack(ActiveRadarrBlock::Indexers.into());
app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .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.edit_indexer_modal = Some(EditIndexerModal::default());
EditIndexerHandler::with( EditIndexerHandler::with(
@@ -793,12 +793,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::Indexers.into()); app.push_navigation_stack(ActiveRadarrBlock::Indexers.into());
app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .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.edit_indexer_modal = Some(EditIndexerModal::default());
app.data.radarr_data.prompt_confirm = true; app.data.radarr_data.prompt_confirm = true;
@@ -846,25 +846,26 @@ mod tests {
} }
#[rstest] #[rstest]
#[case(0, ActiveRadarrBlock::EditIndexerNameInput)] #[case(0, 0, ActiveRadarrBlock::EditIndexerNameInput)]
#[case(5, ActiveRadarrBlock::EditIndexerUrlInput)] #[case(0, 1, ActiveRadarrBlock::EditIndexerUrlInput)]
#[case(6, ActiveRadarrBlock::EditIndexerApiKeyInput)] #[case(1, 1, ActiveRadarrBlock::EditIndexerApiKeyInput)]
#[case(7, ActiveRadarrBlock::EditIndexerSeedRatioInput)] #[case(2, 1, ActiveRadarrBlock::EditIndexerSeedRatioInput)]
#[case(8, ActiveRadarrBlock::EditIndexerTagsInput)] #[case(3, 1, ActiveRadarrBlock::EditIndexerTagsInput)]
fn test_edit_indexer_prompt_submit_input_fields( fn test_edit_indexer_prompt_submit_input_fields(
#[case] starting_index: usize, #[case] starting_y: usize,
#[case] starting_x: usize,
#[case] block: ActiveRadarrBlock, #[case] block: ActiveRadarrBlock,
) { ) {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default());
app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .selected_block
.set_index(starting_index); .set_index(starting_x, starting_y);
EditIndexerHandler::with( EditIndexerHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -883,8 +884,8 @@ mod tests {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default());
app.data.radarr_data.selected_block = 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(1); app.data.radarr_data.selected_block.set_index(0, 1);
app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into());
EditIndexerHandler::with( EditIndexerHandler::with(
@@ -935,8 +936,8 @@ mod tests {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default());
app.data.radarr_data.selected_block = 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(2); app.data.radarr_data.selected_block.set_index(0, 2);
app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into());
EditIndexerHandler::with( EditIndexerHandler::with(
@@ -987,8 +988,8 @@ mod tests {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default()); app.data.radarr_data.edit_indexer_modal = Some(EditIndexerModal::default());
app.data.radarr_data.selected_block = 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(3); app.data.radarr_data.selected_block.set_index(0, 3);
app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into());
EditIndexerHandler::with( EditIndexerHandler::with(
@@ -1560,12 +1561,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::Indexers.into()); app.push_navigation_stack(ActiveRadarrBlock::Indexers.into());
app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::EditIndexerPrompt.into());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .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.edit_indexer_modal = Some(EditIndexerModal::default());
EditIndexerHandler::with( EditIndexerHandler::with(
@@ -6,7 +6,7 @@ use crate::models::servarr_data::radarr::radarr_data::{
ActiveRadarrBlock, INDEXER_SETTINGS_BLOCKS, ActiveRadarrBlock, INDEXER_SETTINGS_BLOCKS,
}; };
use crate::network::radarr_network::RadarrEvent; 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)] #[cfg(test)]
#[path = "edit_indexer_settings_handler_tests.rs"] #[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(); let indexer_settings = self.app.data.radarr_data.indexer_settings.as_mut().unwrap();
match self.active_radarr_block { match self.active_radarr_block {
ActiveRadarrBlock::AllIndexerSettingsPrompt => { ActiveRadarrBlock::AllIndexerSettingsPrompt => {
self.app.data.radarr_data.selected_block.previous(); self.app.data.radarr_data.selected_block.up();
} }
ActiveRadarrBlock::IndexerSettingsMinimumAgeInput => { ActiveRadarrBlock::IndexerSettingsMinimumAgeInput => {
indexer_settings.minimum_age += 1; 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(); let indexer_settings = self.app.data.radarr_data.indexer_settings.as_mut().unwrap();
match self.active_radarr_block { match self.active_radarr_block {
ActiveRadarrBlock::AllIndexerSettingsPrompt => { ActiveRadarrBlock::AllIndexerSettingsPrompt => {
self.app.data.radarr_data.selected_block.next() self.app.data.radarr_data.selected_block.down()
} }
ActiveRadarrBlock::IndexerSettingsMinimumAgeInput => { ActiveRadarrBlock::IndexerSettingsMinimumAgeInput => {
if indexer_settings.minimum_age > 0 { 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) { fn handle_left_right_action(&mut self) {
match self.active_radarr_block { match self.active_radarr_block {
ActiveRadarrBlock::AllIndexerSettingsPrompt => { ActiveRadarrBlock::AllIndexerSettingsPrompt => {
if self.app.data.radarr_data.selected_block.get_active_block() handle_prompt_left_right_keys!(
== ActiveRadarrBlock::IndexerSettingsConfirmPrompt self,
{ ActiveRadarrBlock::IndexerSettingsConfirmPrompt,
handle_prompt_toggle(self.app, self.key); radarr_data
} 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;
}
} }
ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput => { ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput => {
handle_text_box_left_right_keys!( handle_text_box_left_right_keys!(
@@ -98,8 +98,8 @@ mod tests {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.data.radarr_data.indexer_settings = Some(IndexerSettings::default());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.next(); app.data.radarr_data.selected_block.down();
IndexerSettingsHandler::with( IndexerSettingsHandler::with(
key, key,
@@ -130,8 +130,8 @@ mod tests {
app.is_loading = true; app.is_loading = true;
app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.data.radarr_data.indexer_settings = Some(IndexerSettings::default());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.next(); app.data.radarr_data.selected_block.down();
IndexerSettingsHandler::with( IndexerSettingsHandler::with(
key, key,
@@ -276,8 +276,8 @@ mod tests {
fn test_left_right_prompt_toggle(#[values(Key::Left, Key::Right)] key: Key) { fn test_left_right_prompt_toggle(#[values(Key::Left, Key::Right)] key: Key) {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.index = INDEXER_SETTINGS_SELECTION_BLOCKS.len() - 1; app.data.radarr_data.selected_block.y = INDEXER_SETTINGS_SELECTION_BLOCKS.len() - 1;
IndexerSettingsHandler::with( IndexerSettingsHandler::with(
key, key,
@@ -323,14 +323,14 @@ mod tests {
)] )]
fn test_left_right_block_toggle( fn test_left_right_block_toggle(
#[values(Key::Left, Key::Right)] key: Key, #[values(Key::Left, Key::Right)] key: Key,
#[case] starting_index: usize, #[case] starting_y_index: usize,
#[case] left_block: ActiveRadarrBlock, #[case] left_block: ActiveRadarrBlock,
#[case] right_block: ActiveRadarrBlock, #[case] right_block: ActiveRadarrBlock,
) { ) {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS);
app.data.radarr_data.selected_block.index = starting_index; app.data.radarr_data.selected_block.y = starting_y_index;
assert_eq!( assert_eq!(
app.data.radarr_data.selected_block.get_active_block(), 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::Indexers.into());
app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .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.indexer_settings = Some(IndexerSettings::default());
IndexerSettingsHandler::with( IndexerSettingsHandler::with(
@@ -466,12 +466,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::Indexers.into()); app.push_navigation_stack(ActiveRadarrBlock::Indexers.into());
app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .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.indexer_settings = Some(IndexerSettings::default());
app.data.radarr_data.prompt_confirm = true; app.data.radarr_data.prompt_confirm = true;
@@ -517,21 +517,26 @@ mod tests {
} }
#[rstest] #[rstest]
#[case(ActiveRadarrBlock::IndexerSettingsMinimumAgeInput, 0)] #[case(ActiveRadarrBlock::IndexerSettingsMinimumAgeInput, 0, 0)]
#[case(ActiveRadarrBlock::IndexerSettingsRetentionInput, 1)] #[case(ActiveRadarrBlock::IndexerSettingsRetentionInput, 1, 0)]
#[case(ActiveRadarrBlock::IndexerSettingsMaximumSizeInput, 2)] #[case(ActiveRadarrBlock::IndexerSettingsMaximumSizeInput, 2, 0)]
#[case(ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput, 5)] #[case(ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput, 0, 1)]
#[case(ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput, 6)] #[case(ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput, 1, 1)]
fn test_edit_indexer_settings_prompt_submit_selected_block( fn test_edit_indexer_settings_prompt_submit_selected_block(
#[case] selected_block: ActiveRadarrBlock, #[case] selected_block: ActiveRadarrBlock,
#[case] index: usize, #[case] y_index: usize,
#[case] x_index: usize,
) { ) {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.data.radarr_data.indexer_settings = Some(IndexerSettings::default());
app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into());
app.data.radarr_data.selected_block = 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(index); app
.data
.radarr_data
.selected_block
.set_index(x_index, y_index);
IndexerSettingsHandler::with( IndexerSettingsHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -546,15 +551,19 @@ mod tests {
#[rstest] #[rstest]
fn test_edit_indexer_settings_prompt_submit_selected_block_no_op_when_not_ready( 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(); let mut app = App::default();
app.is_loading = true; app.is_loading = true;
app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.data.radarr_data.indexer_settings = Some(IndexerSettings::default());
app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into());
app.data.radarr_data.selected_block = 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(index); app
.data
.radarr_data
.selected_block
.set_index(index.1, index.0);
IndexerSettingsHandler::with( IndexerSettingsHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -576,8 +585,8 @@ mod tests {
app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.data.radarr_data.indexer_settings = Some(IndexerSettings::default());
app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into());
app.data.radarr_data.selected_block = 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(7); app.data.radarr_data.selected_block.set_index(1, 2);
IndexerSettingsHandler::with( IndexerSettingsHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -599,8 +608,8 @@ mod tests {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.data.radarr_data.indexer_settings = Some(IndexerSettings::default());
app.data.radarr_data.selected_block = 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(3); app.data.radarr_data.selected_block.set_index(0, 3);
app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into());
IndexerSettingsHandler::with( IndexerSettingsHandler::with(
@@ -653,8 +662,8 @@ mod tests {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.indexer_settings = Some(IndexerSettings::default()); app.data.radarr_data.indexer_settings = Some(IndexerSettings::default());
app.data.radarr_data.selected_block = 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(8); app.data.radarr_data.selected_block.set_index(1, 3);
app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into());
IndexerSettingsHandler::with( IndexerSettingsHandler::with(
@@ -922,12 +931,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::Indexers.into()); app.push_navigation_stack(ActiveRadarrBlock::Indexers.into());
app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block =
BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .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.indexer_settings = Some(IndexerSettings::default());
IndexerSettingsHandler::with( IndexerSettingsHandler::with(
@@ -311,12 +311,12 @@ mod tests {
if torrent_protocol { if torrent_protocol {
assert_eq!( assert_eq!(
app.data.radarr_data.selected_block.blocks, app.data.radarr_data.selected_block.blocks,
&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS EDIT_INDEXER_TORRENT_SELECTION_BLOCKS
); );
} else { } else {
assert_eq!( assert_eq!(
app.data.radarr_data.selected_block.blocks, 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!( assert_eq!(
app.data.radarr_data.selected_block.blocks, app.data.radarr_data.selected_block.blocks,
&INDEXER_SETTINGS_SELECTION_BLOCKS INDEXER_SETTINGS_SELECTION_BLOCKS
); );
} }
+3 -3
View File
@@ -141,10 +141,10 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for IndexersHandler<'a,
.protocol; .protocol;
if protocol == "torrent" { if protocol == "torrent" {
self.app.data.radarr_data.selected_block = self.app.data.radarr_data.selected_block =
BlockSelectionState::new(&EDIT_INDEXER_TORRENT_SELECTION_BLOCKS); BlockSelectionState::new(EDIT_INDEXER_TORRENT_SELECTION_BLOCKS);
} else { } else {
self.app.data.radarr_data.selected_block = 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 .app
.push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into()); .push_navigation_stack(ActiveRadarrBlock::AllIndexerSettingsPrompt.into());
self.app.data.radarr_data.selected_block = self.app.data.radarr_data.selected_block =
BlockSelectionState::new(&INDEXER_SETTINGS_SELECTION_BLOCKS); BlockSelectionState::new(INDEXER_SETTINGS_SELECTION_BLOCKS);
} }
_ => (), _ => (),
}, },
@@ -91,7 +91,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for AddMovieHandler<'a,
.unwrap() .unwrap()
.root_folder_list .root_folder_list
.scroll_up(), .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() .unwrap()
.root_folder_list .root_folder_list
.scroll_down(), .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()); .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.add_movie_modal = Some((&self.app.data.radarr_data).into());
self.app.data.radarr_data.selected_block = self.app.data.radarr_data.selected_block =
BlockSelectionState::new(&ADD_MOVIE_SELECTION_BLOCKS); BlockSelectionState::new(ADD_MOVIE_SELECTION_BLOCKS);
} }
} }
ActiveRadarrBlock::AddMoviePrompt => { ActiveRadarrBlock::AddMoviePrompt => {
@@ -380,8 +380,8 @@ mod tests {
#[rstest] #[rstest]
fn test_add_movie_prompt_scroll(#[values(Key::Up, Key::Down)] key: Key) { fn test_add_movie_prompt_scroll(#[values(Key::Up, Key::Down)] key: Key) {
let mut app = App::default(); let mut app = App::default();
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.next(); app.data.radarr_data.selected_block.down();
AddMovieHandler::with(key, &mut app, ActiveRadarrBlock::AddMoviePrompt, None).handle(); 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) { fn test_add_movie_prompt_scroll_no_op_when_not_ready(#[values(Key::Up, Key::Down)] key: Key) {
let mut app = App::default(); let mut app = App::default();
app.is_loading = true; app.is_loading = 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.next(); app.data.radarr_data.selected_block.down();
AddMovieHandler::with(key, &mut app, ActiveRadarrBlock::AddMoviePrompt, None).handle(); AddMovieHandler::with(key, &mut app, ActiveRadarrBlock::AddMoviePrompt, None).handle();
@@ -1170,12 +1170,12 @@ mod tests {
let mut app = App::default(); let mut app = App::default();
app.push_navigation_stack(ActiveRadarrBlock::Movies.into()); app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
app.push_navigation_stack(ActiveRadarrBlock::AddMoviePrompt.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 app
.data .data
.radarr_data .radarr_data
.selected_block .selected_block
.set_index(ADD_MOVIE_SELECTION_BLOCKS.len() - 1); .set_index(0, ADD_MOVIE_SELECTION_BLOCKS.len() - 1);
AddMovieHandler::with( AddMovieHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -1196,12 +1196,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::Movies.into()); app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
app.push_navigation_stack(ActiveRadarrBlock::AddMoviePrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::AddMoviePrompt.into());
app.data.radarr_data.prompt_confirm = true; 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 app
.data .data
.radarr_data .radarr_data
.selected_block .selected_block
.set_index(ADD_MOVIE_SELECTION_BLOCKS.len() - 1); .set_index(0, ADD_MOVIE_SELECTION_BLOCKS.len() - 1);
AddMovieHandler::with( AddMovieHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -1227,7 +1227,7 @@ mod tests {
#[case(ActiveRadarrBlock::AddMovieTagsInput, 4)] #[case(ActiveRadarrBlock::AddMovieTagsInput, 4)]
fn test_add_movie_prompt_selected_block_submit( fn test_add_movie_prompt_selected_block_submit(
#[case] selected_block: ActiveRadarrBlock, #[case] selected_block: ActiveRadarrBlock,
#[case] index: usize, #[case] y_index: usize,
) { ) {
let mut app = App::default(); let mut app = App::default();
app.push_navigation_stack( app.push_navigation_stack(
@@ -1237,8 +1237,8 @@ mod tests {
) )
.into(), .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(index); app.data.radarr_data.selected_block.set_index(0, y_index);
AddMovieHandler::with( AddMovieHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -1594,12 +1594,12 @@ mod tests {
app.data.radarr_data.add_movie_modal = Some(AddMovieModal::default()); app.data.radarr_data.add_movie_modal = Some(AddMovieModal::default());
app.push_navigation_stack(ActiveRadarrBlock::Movies.into()); app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
app.push_navigation_stack(ActiveRadarrBlock::AddMoviePrompt.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 app
.data .data
.radarr_data .radarr_data
.selected_block .selected_block
.set_index(ADD_MOVIE_SELECTION_BLOCKS.len() - 1); .set_index(0, ADD_MOVIE_SELECTION_BLOCKS.len() - 1);
AddMovieHandler::with( AddMovieHandler::with(
DEFAULT_KEYBINDINGS.confirm.key, DEFAULT_KEYBINDINGS.confirm.key,
@@ -45,13 +45,13 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for DeleteMovieHandler<'
fn handle_scroll_up(&mut self) { fn handle_scroll_up(&mut self) {
if self.active_radarr_block == ActiveRadarrBlock::DeleteMoviePrompt { 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) { fn handle_scroll_down(&mut self) {
if self.active_radarr_block == ActiveRadarrBlock::DeleteMoviePrompt { if self.active_radarr_block == ActiveRadarrBlock::DeleteMoviePrompt {
self.app.data.radarr_data.selected_block.next(); self.app.data.radarr_data.selected_block.down();
} }
} }
@@ -21,9 +21,8 @@ mod tests {
#[rstest] #[rstest]
fn test_delete_movie_prompt_scroll(#[values(Key::Up, Key::Down)] key: Key) { fn test_delete_movie_prompt_scroll(#[values(Key::Up, Key::Down)] key: Key) {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS);
BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS); app.data.radarr_data.selected_block.down();
app.data.radarr_data.selected_block.next();
DeleteMovieHandler::with(key, &mut app, ActiveRadarrBlock::DeleteMoviePrompt, None).handle(); DeleteMovieHandler::with(key, &mut app, ActiveRadarrBlock::DeleteMoviePrompt, None).handle();
@@ -46,9 +45,8 @@ mod tests {
) { ) {
let mut app = App::default(); let mut app = App::default();
app.is_loading = true; app.is_loading = true;
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS);
BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS); app.data.radarr_data.selected_block.down();
app.data.radarr_data.selected_block.next();
DeleteMovieHandler::with(key, &mut app, ActiveRadarrBlock::DeleteMoviePrompt, None).handle(); DeleteMovieHandler::with(key, &mut app, ActiveRadarrBlock::DeleteMoviePrompt, None).handle();
@@ -94,13 +92,12 @@ mod tests {
let mut app = App::default(); let mut app = App::default();
app.push_navigation_stack(ActiveRadarrBlock::Movies.into()); app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
app.push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into());
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS);
BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .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.delete_movie_files = true;
app.data.radarr_data.add_list_exclusion = 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.prompt_confirm = true;
app.data.radarr_data.delete_movie_files = true; app.data.radarr_data.delete_movie_files = true;
app.data.radarr_data.add_list_exclusion = true; app.data.radarr_data.add_list_exclusion = true;
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS);
BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .selected_block
.set_index(DELETE_MOVIE_SELECTION_BLOCKS.len() - 1); .set_index(0, DELETE_MOVIE_SELECTION_BLOCKS.len() - 1);
DeleteMovieHandler::with( DeleteMovieHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -187,8 +183,7 @@ mod tests {
fn test_delete_movie_toggle_delete_files_submit() { fn test_delete_movie_toggle_delete_files_submit() {
let current_route = ActiveRadarrBlock::DeleteMoviePrompt.into(); let current_route = ActiveRadarrBlock::DeleteMoviePrompt.into();
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS);
BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS);
app.push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into());
DeleteMovieHandler::with( DeleteMovieHandler::with(
@@ -263,13 +258,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into());
app.data.radarr_data.delete_movie_files = true; app.data.radarr_data.delete_movie_files = true;
app.data.radarr_data.add_list_exclusion = true; app.data.radarr_data.add_list_exclusion = true;
app.data.radarr_data.selected_block = app.data.radarr_data.selected_block = BlockSelectionState::new(DELETE_MOVIE_SELECTION_BLOCKS);
BlockSelectionState::new(&DELETE_MOVIE_SELECTION_BLOCKS);
app app
.data .data
.radarr_data .radarr_data
.selected_block .selected_block
.set_index(DELETE_MOVIE_SELECTION_BLOCKS.len() - 1); .set_index(0, DELETE_MOVIE_SELECTION_BLOCKS.len() - 1);
DeleteMovieHandler::with( DeleteMovieHandler::with(
DEFAULT_KEYBINDINGS.confirm.key, DEFAULT_KEYBINDINGS.confirm.key,
@@ -65,7 +65,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for EditMovieHandler<'a,
.unwrap() .unwrap()
.quality_profile_list .quality_profile_list
.scroll_up(), .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() .unwrap()
.quality_profile_list .quality_profile_list
.scroll_down(), .scroll_down(),
ActiveRadarrBlock::EditMoviePrompt => self.app.data.radarr_data.selected_block.next(), ActiveRadarrBlock::EditMoviePrompt => self.app.data.radarr_data.selected_block.down(),
_ => (), _ => (),
} }
} }
@@ -146,8 +146,8 @@ mod tests {
fn test_edit_movie_prompt_scroll(#[values(Key::Up, Key::Down)] key: Key) { fn test_edit_movie_prompt_scroll(#[values(Key::Up, Key::Down)] key: Key) {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::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.data.radarr_data.selected_block.next(); app.data.radarr_data.selected_block.down();
EditMovieHandler::with(key, &mut app, ActiveRadarrBlock::EditMoviePrompt, None).handle(); EditMovieHandler::with(key, &mut app, ActiveRadarrBlock::EditMoviePrompt, None).handle();
@@ -169,8 +169,8 @@ mod tests {
let mut app = App::default(); let mut app = App::default();
app.is_loading = true; app.is_loading = true;
app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::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.data.radarr_data.selected_block.next(); app.data.radarr_data.selected_block.down();
EditMovieHandler::with(key, &mut app, ActiveRadarrBlock::EditMoviePrompt, None).handle(); 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.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default());
app.push_navigation_stack(ActiveRadarrBlock::Movies.into()); app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
app.push_navigation_stack(ActiveRadarrBlock::EditMoviePrompt.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 app
.data .data
.radarr_data .radarr_data
.selected_block .selected_block
.set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1);
EditMovieHandler::with( EditMovieHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -647,12 +647,12 @@ mod tests {
app.push_navigation_stack(ActiveRadarrBlock::Movies.into()); app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
app.push_navigation_stack(ActiveRadarrBlock::EditMoviePrompt.into()); app.push_navigation_stack(ActiveRadarrBlock::EditMoviePrompt.into());
app.data.radarr_data.prompt_confirm = true; 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 app
.data .data
.radarr_data .radarr_data
.selected_block .selected_block
.set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1);
EditMovieHandler::with( EditMovieHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -704,7 +704,7 @@ mod tests {
)); ));
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::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); app.push_navigation_stack(current_route);
EditMovieHandler::with( EditMovieHandler::with(
@@ -755,7 +755,7 @@ mod tests {
#[case(ActiveRadarrBlock::EditMovieTagsInput, 4)] #[case(ActiveRadarrBlock::EditMovieTagsInput, 4)]
fn test_edit_movie_prompt_selected_block_submit( fn test_edit_movie_prompt_selected_block_submit(
#[case] selected_block: ActiveRadarrBlock, #[case] selected_block: ActiveRadarrBlock,
#[case] index: usize, #[case] y_index: usize,
) { ) {
let mut app = App::default(); let mut app = App::default();
app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default()); app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default());
@@ -766,8 +766,8 @@ mod tests {
) )
.into(), .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(index); app.data.radarr_data.selected_block.set_index(0, y_index);
EditMovieHandler::with( EditMovieHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -792,7 +792,7 @@ mod tests {
#[rstest] #[rstest]
fn test_edit_movie_prompt_selected_block_submit_no_op_when_not_ready( 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(); let mut app = App::default();
app.is_loading = true; app.is_loading = true;
@@ -804,8 +804,8 @@ mod tests {
) )
.into(), .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(index); app.data.radarr_data.selected_block.set_index(0, y_index);
EditMovieHandler::with( EditMovieHandler::with(
SUBMIT_KEY, SUBMIT_KEY,
@@ -1061,12 +1061,12 @@ mod tests {
app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default()); app.data.radarr_data.edit_movie_modal = Some(EditMovieModal::default());
app.push_navigation_stack(ActiveRadarrBlock::Movies.into()); app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
app.push_navigation_stack(ActiveRadarrBlock::EditMoviePrompt.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 app
.data .data
.radarr_data .radarr_data
.selected_block .selected_block
.set_index(EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1); .set_index(0, EDIT_COLLECTION_SELECTION_BLOCKS.len() - 1);
EditMovieHandler::with( EditMovieHandler::with(
DEFAULT_KEYBINDINGS.confirm.key, DEFAULT_KEYBINDINGS.confirm.key,
@@ -375,7 +375,7 @@ mod tests {
); );
assert_eq!( assert_eq!(
app.data.radarr_data.selected_block.blocks, app.data.radarr_data.selected_block.blocks,
&DELETE_MOVIE_SELECTION_BLOCKS DELETE_MOVIE_SELECTION_BLOCKS
); );
} }
+2 -2
View File
@@ -194,7 +194,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for LibraryHandler<'a, '
.app .app
.push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into()); .push_navigation_stack(ActiveRadarrBlock::DeleteMoviePrompt.into());
self.app.data.radarr_data.selected_block = 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.edit_movie_modal = Some((&self.app.data.radarr_data).into());
self.app.data.radarr_data.selected_block = 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 => { _ if key == DEFAULT_KEYBINDINGS.add.key => {
self self
@@ -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.edit_movie_modal = Some((&self.app.data.radarr_data).into());
self.app.data.radarr_data.selected_block = 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 => { _ if key == DEFAULT_KEYBINDINGS.update.key => {
self self
@@ -111,7 +111,7 @@ mod utils {
); );
assert_eq!( assert_eq!(
app.data.radarr_data.selected_block.blocks, app.data.radarr_data.selected_block.blocks,
&EDIT_MOVIE_SELECTION_BLOCKS EDIT_MOVIE_SELECTION_BLOCKS
); );
}; };
} }
@@ -224,7 +224,7 @@ mod utils {
); );
assert_eq!( assert_eq!(
app.data.radarr_data.selected_block.blocks, app.data.radarr_data.selected_block.blocks,
&EDIT_COLLECTION_SELECTION_BLOCKS EDIT_COLLECTION_SELECTION_BLOCKS
); );
}; };
} }
+29 -15
View File
@@ -320,33 +320,46 @@ pub struct BlockSelectionState<'a, T>
where where
T: Sized + Clone + Copy + Default, T: Sized + Clone + Copy + Default,
{ {
pub blocks: &'a [T], pub blocks: &'a [&'a [T]],
pub index: usize, pub x: usize,
pub y: usize,
} }
impl<'a, T> BlockSelectionState<'a, T> impl<'a, T> BlockSelectionState<'a, T>
where where
T: Sized + Clone + Copy + Default, T: Sized + Clone + Copy + Default,
{ {
pub fn new(blocks: &'a [T]) -> BlockSelectionState<'a, T> { pub fn new(blocks: &'a [&'a [T]]) -> BlockSelectionState<'a, T> {
BlockSelectionState { blocks, index: 0 } BlockSelectionState { blocks, x: 0, y: 0 }
} }
pub fn get_active_block(&self) -> T { pub fn get_active_block(&self) -> T {
self.blocks[self.index] self.blocks[self.y][self.x]
} }
pub fn next(&mut self) { pub fn left(&mut self) {
self.index = (self.index + 1) % self.blocks.len(); if self.x > 0 {
} self.x -= 1;
pub fn previous(&mut self) {
if self.index > 0 {
self.index -= 1;
} else { } 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)] #[cfg(test)]
@@ -354,8 +367,9 @@ impl<'a, T> BlockSelectionState<'a, T>
where where
T: Sized + Clone + Copy + Default, T: Sized + Clone + Copy + Default,
{ {
pub fn set_index(&mut self, index: usize) { pub fn set_index(&mut self, x: usize, y: usize) {
self.index = index; self.x = x;
self.y = y;
} }
} }
+84 -35
View File
@@ -17,14 +17,7 @@ mod tests {
BlockSelectionState, HorizontallyScrollableText, Scrollable, ScrollableText, TabRoute, TabState, BlockSelectionState, HorizontallyScrollableText, Scrollable, ScrollableText, TabRoute, TabState,
}; };
const BLOCKS: [ActiveRadarrBlock; 6] = [ const BLOCKS: &[&[i32]] = &[&[11, 12], &[21, 22], &[31, 32]];
ActiveRadarrBlock::AddMovieSelectRootFolder,
ActiveRadarrBlock::AddMovieSelectMonitor,
ActiveRadarrBlock::AddMovieSelectMinimumAvailability,
ActiveRadarrBlock::AddMovieSelectQualityProfile,
ActiveRadarrBlock::AddMovieTagsInput,
ActiveRadarrBlock::AddMovieConfirmPrompt,
];
#[test] #[test]
fn test_scrollable_text_with_string() { fn test_scrollable_text_with_string() {
@@ -577,17 +570,19 @@ mod tests {
#[test] #[test]
fn test_block_selection_state_new() { 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] #[test]
fn test_block_selection_state_get_active_block() { fn test_block_selection_state_get_active_block() {
let second_block = BLOCKS[1]; let second_block = BLOCKS[1][1];
let block_selection_state = BlockSelectionState { let block_selection_state = BlockSelectionState {
blocks: &BLOCKS, blocks: BLOCKS,
index: 1, x: 1,
y: 1,
}; };
let active_block = block_selection_state.get_active_block(); let active_block = block_selection_state.get_active_block();
@@ -596,41 +591,95 @@ mod tests {
} }
#[test] #[test]
fn test_block_selection_state_next() { fn test_block_selection_state_down() {
let blocks = [ let mut block_selection_state = BlockSelectionState::new(BLOCKS);
ActiveRadarrBlock::AddMovieSelectRootFolder,
ActiveRadarrBlock::AddMovieSelectMonitor,
];
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] #[test]
fn test_block_selection_state_previous() { fn test_block_selection_state_up() {
let blocks = [ let mut block_selection_state = BlockSelectionState::new(BLOCKS);
ActiveRadarrBlock::AddMovieSelectRootFolder,
ActiveRadarrBlock::AddMovieSelectMonitor,
];
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] #[test]
+88 -58
View File
@@ -357,13 +357,13 @@ pub static ADD_MOVIE_BLOCKS: [ActiveRadarrBlock; 10] = [
ActiveRadarrBlock::AddMovieAlreadyInLibrary, ActiveRadarrBlock::AddMovieAlreadyInLibrary,
ActiveRadarrBlock::AddMovieTagsInput, ActiveRadarrBlock::AddMovieTagsInput,
]; ];
pub static ADD_MOVIE_SELECTION_BLOCKS: [ActiveRadarrBlock; 6] = [ pub const ADD_MOVIE_SELECTION_BLOCKS: &[&[ActiveRadarrBlock]] = &[
ActiveRadarrBlock::AddMovieSelectRootFolder, &[ActiveRadarrBlock::AddMovieSelectRootFolder],
ActiveRadarrBlock::AddMovieSelectMonitor, &[ActiveRadarrBlock::AddMovieSelectMonitor],
ActiveRadarrBlock::AddMovieSelectMinimumAvailability, &[ActiveRadarrBlock::AddMovieSelectMinimumAvailability],
ActiveRadarrBlock::AddMovieSelectQualityProfile, &[ActiveRadarrBlock::AddMovieSelectQualityProfile],
ActiveRadarrBlock::AddMovieTagsInput, &[ActiveRadarrBlock::AddMovieTagsInput],
ActiveRadarrBlock::AddMovieConfirmPrompt, &[ActiveRadarrBlock::AddMovieConfirmPrompt],
]; ];
pub static EDIT_COLLECTION_BLOCKS: [ActiveRadarrBlock; 7] = [ pub static EDIT_COLLECTION_BLOCKS: [ActiveRadarrBlock; 7] = [
ActiveRadarrBlock::EditCollectionPrompt, ActiveRadarrBlock::EditCollectionPrompt,
@@ -374,13 +374,13 @@ pub static EDIT_COLLECTION_BLOCKS: [ActiveRadarrBlock; 7] = [
ActiveRadarrBlock::EditCollectionToggleSearchOnAdd, ActiveRadarrBlock::EditCollectionToggleSearchOnAdd,
ActiveRadarrBlock::EditCollectionToggleMonitored, ActiveRadarrBlock::EditCollectionToggleMonitored,
]; ];
pub static EDIT_COLLECTION_SELECTION_BLOCKS: [ActiveRadarrBlock; 6] = [ pub const EDIT_COLLECTION_SELECTION_BLOCKS: &[&[ActiveRadarrBlock]] = &[
ActiveRadarrBlock::EditCollectionToggleMonitored, &[ActiveRadarrBlock::EditCollectionToggleMonitored],
ActiveRadarrBlock::EditCollectionSelectMinimumAvailability, &[ActiveRadarrBlock::EditCollectionSelectMinimumAvailability],
ActiveRadarrBlock::EditCollectionSelectQualityProfile, &[ActiveRadarrBlock::EditCollectionSelectQualityProfile],
ActiveRadarrBlock::EditCollectionRootFolderPathInput, &[ActiveRadarrBlock::EditCollectionRootFolderPathInput],
ActiveRadarrBlock::EditCollectionToggleSearchOnAdd, &[ActiveRadarrBlock::EditCollectionToggleSearchOnAdd],
ActiveRadarrBlock::EditCollectionConfirmPrompt, &[ActiveRadarrBlock::EditCollectionConfirmPrompt],
]; ];
pub static EDIT_MOVIE_BLOCKS: [ActiveRadarrBlock; 7] = [ pub static EDIT_MOVIE_BLOCKS: [ActiveRadarrBlock; 7] = [
ActiveRadarrBlock::EditMoviePrompt, ActiveRadarrBlock::EditMoviePrompt,
@@ -391,13 +391,13 @@ pub static EDIT_MOVIE_BLOCKS: [ActiveRadarrBlock; 7] = [
ActiveRadarrBlock::EditMovieTagsInput, ActiveRadarrBlock::EditMovieTagsInput,
ActiveRadarrBlock::EditMovieToggleMonitored, ActiveRadarrBlock::EditMovieToggleMonitored,
]; ];
pub static EDIT_MOVIE_SELECTION_BLOCKS: [ActiveRadarrBlock; 6] = [ pub const EDIT_MOVIE_SELECTION_BLOCKS: &[&[ActiveRadarrBlock]] = &[
ActiveRadarrBlock::EditMovieToggleMonitored, &[ActiveRadarrBlock::EditMovieToggleMonitored],
ActiveRadarrBlock::EditMovieSelectMinimumAvailability, &[ActiveRadarrBlock::EditMovieSelectMinimumAvailability],
ActiveRadarrBlock::EditMovieSelectQualityProfile, &[ActiveRadarrBlock::EditMovieSelectQualityProfile],
ActiveRadarrBlock::EditMoviePathInput, &[ActiveRadarrBlock::EditMoviePathInput],
ActiveRadarrBlock::EditMovieTagsInput, &[ActiveRadarrBlock::EditMovieTagsInput],
ActiveRadarrBlock::EditMovieConfirmPrompt, &[ActiveRadarrBlock::EditMovieConfirmPrompt],
]; ];
pub static DOWNLOADS_BLOCKS: [ActiveRadarrBlock; 3] = [ pub static DOWNLOADS_BLOCKS: [ActiveRadarrBlock; 3] = [
ActiveRadarrBlock::Downloads, ActiveRadarrBlock::Downloads,
@@ -426,10 +426,10 @@ pub static DELETE_MOVIE_BLOCKS: [ActiveRadarrBlock; 4] = [
ActiveRadarrBlock::DeleteMovieToggleDeleteFile, ActiveRadarrBlock::DeleteMovieToggleDeleteFile,
ActiveRadarrBlock::DeleteMovieToggleAddListExclusion, ActiveRadarrBlock::DeleteMovieToggleAddListExclusion,
]; ];
pub static DELETE_MOVIE_SELECTION_BLOCKS: [ActiveRadarrBlock; 3] = [ pub const DELETE_MOVIE_SELECTION_BLOCKS: &[&[ActiveRadarrBlock]] = &[
ActiveRadarrBlock::DeleteMovieToggleDeleteFile, &[ActiveRadarrBlock::DeleteMovieToggleDeleteFile],
ActiveRadarrBlock::DeleteMovieToggleAddListExclusion, &[ActiveRadarrBlock::DeleteMovieToggleAddListExclusion],
ActiveRadarrBlock::DeleteMovieConfirmPrompt, &[ActiveRadarrBlock::DeleteMovieConfirmPrompt],
]; ];
pub static EDIT_INDEXER_BLOCKS: [ActiveRadarrBlock; 10] = [ pub static EDIT_INDEXER_BLOCKS: [ActiveRadarrBlock; 10] = [
ActiveRadarrBlock::EditIndexerPrompt, ActiveRadarrBlock::EditIndexerPrompt,
@@ -443,29 +443,49 @@ pub static EDIT_INDEXER_BLOCKS: [ActiveRadarrBlock; 10] = [
ActiveRadarrBlock::EditIndexerUrlInput, ActiveRadarrBlock::EditIndexerUrlInput,
ActiveRadarrBlock::EditIndexerTagsInput, ActiveRadarrBlock::EditIndexerTagsInput,
]; ];
pub static EDIT_INDEXER_TORRENT_SELECTION_BLOCKS: [ActiveRadarrBlock; 10] = [ pub const EDIT_INDEXER_TORRENT_SELECTION_BLOCKS: &[&[ActiveRadarrBlock]] = &[
ActiveRadarrBlock::EditIndexerNameInput, &[
ActiveRadarrBlock::EditIndexerToggleEnableRss, ActiveRadarrBlock::EditIndexerNameInput,
ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch, ActiveRadarrBlock::EditIndexerUrlInput,
ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch, ],
ActiveRadarrBlock::EditIndexerConfirmPrompt, &[
ActiveRadarrBlock::EditIndexerUrlInput, ActiveRadarrBlock::EditIndexerToggleEnableRss,
ActiveRadarrBlock::EditIndexerApiKeyInput, ActiveRadarrBlock::EditIndexerApiKeyInput,
ActiveRadarrBlock::EditIndexerSeedRatioInput, ],
ActiveRadarrBlock::EditIndexerTagsInput, &[
ActiveRadarrBlock::EditIndexerConfirmPrompt, ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch,
ActiveRadarrBlock::EditIndexerSeedRatioInput,
],
&[
ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch,
ActiveRadarrBlock::EditIndexerTagsInput,
],
&[
ActiveRadarrBlock::EditIndexerConfirmPrompt,
ActiveRadarrBlock::EditIndexerConfirmPrompt,
],
]; ];
pub static EDIT_INDEXER_NZB_SELECTION_BLOCKS: [ActiveRadarrBlock; 10] = [ pub const EDIT_INDEXER_NZB_SELECTION_BLOCKS: &[&[ActiveRadarrBlock]] = &[
ActiveRadarrBlock::EditIndexerNameInput, &[
ActiveRadarrBlock::EditIndexerToggleEnableRss, ActiveRadarrBlock::EditIndexerNameInput,
ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch, ActiveRadarrBlock::EditIndexerUrlInput,
ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch, ],
ActiveRadarrBlock::EditIndexerConfirmPrompt, &[
ActiveRadarrBlock::EditIndexerUrlInput, ActiveRadarrBlock::EditIndexerToggleEnableRss,
ActiveRadarrBlock::EditIndexerApiKeyInput, ActiveRadarrBlock::EditIndexerApiKeyInput,
ActiveRadarrBlock::EditIndexerTagsInput, ],
ActiveRadarrBlock::EditIndexerConfirmPrompt, &[
ActiveRadarrBlock::EditIndexerConfirmPrompt, ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch,
ActiveRadarrBlock::EditIndexerTagsInput,
],
&[
ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch,
ActiveRadarrBlock::EditIndexerConfirmPrompt,
],
&[
ActiveRadarrBlock::EditIndexerConfirmPrompt,
ActiveRadarrBlock::EditIndexerConfirmPrompt,
],
]; ];
pub static INDEXER_SETTINGS_BLOCKS: [ActiveRadarrBlock; 10] = [ pub static INDEXER_SETTINGS_BLOCKS: [ActiveRadarrBlock; 10] = [
ActiveRadarrBlock::AllIndexerSettingsPrompt, ActiveRadarrBlock::AllIndexerSettingsPrompt,
@@ -479,17 +499,27 @@ pub static INDEXER_SETTINGS_BLOCKS: [ActiveRadarrBlock; 10] = [
ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags, ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags,
ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput, ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput,
]; ];
pub static INDEXER_SETTINGS_SELECTION_BLOCKS: [ActiveRadarrBlock; 10] = [ pub const INDEXER_SETTINGS_SELECTION_BLOCKS: &[&[ActiveRadarrBlock]] = &[
ActiveRadarrBlock::IndexerSettingsMinimumAgeInput, &[
ActiveRadarrBlock::IndexerSettingsRetentionInput, ActiveRadarrBlock::IndexerSettingsMinimumAgeInput,
ActiveRadarrBlock::IndexerSettingsMaximumSizeInput, ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput,
ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags, ],
ActiveRadarrBlock::IndexerSettingsConfirmPrompt, &[
ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput, ActiveRadarrBlock::IndexerSettingsRetentionInput,
ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput, ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput,
ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput, ],
ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs, &[
ActiveRadarrBlock::IndexerSettingsConfirmPrompt, ActiveRadarrBlock::IndexerSettingsMaximumSizeInput,
ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput,
],
&[
ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags,
ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs,
],
&[
ActiveRadarrBlock::IndexerSettingsConfirmPrompt,
ActiveRadarrBlock::IndexerSettingsConfirmPrompt,
],
]; ];
pub static SYSTEM_DETAILS_BLOCKS: [ActiveRadarrBlock; 5] = [ pub static SYSTEM_DETAILS_BLOCKS: [ActiveRadarrBlock; 5] = [
ActiveRadarrBlock::SystemLogs, ActiveRadarrBlock::SystemLogs,
@@ -468,27 +468,27 @@ mod tests {
assert_eq!( assert_eq!(
add_movie_block_iter.next().unwrap(), add_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::AddMovieSelectRootFolder &[ActiveRadarrBlock::AddMovieSelectRootFolder]
); );
assert_eq!( assert_eq!(
add_movie_block_iter.next().unwrap(), add_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::AddMovieSelectMonitor &[ActiveRadarrBlock::AddMovieSelectMonitor]
); );
assert_eq!( assert_eq!(
add_movie_block_iter.next().unwrap(), add_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::AddMovieSelectMinimumAvailability &[ActiveRadarrBlock::AddMovieSelectMinimumAvailability]
); );
assert_eq!( assert_eq!(
add_movie_block_iter.next().unwrap(), add_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::AddMovieSelectQualityProfile &[ActiveRadarrBlock::AddMovieSelectQualityProfile]
); );
assert_eq!( assert_eq!(
add_movie_block_iter.next().unwrap(), add_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::AddMovieTagsInput &[ActiveRadarrBlock::AddMovieTagsInput]
); );
assert_eq!( assert_eq!(
add_movie_block_iter.next().unwrap(), add_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::AddMovieConfirmPrompt &[ActiveRadarrBlock::AddMovieConfirmPrompt]
); );
assert_eq!(add_movie_block_iter.next(), None); assert_eq!(add_movie_block_iter.next(), None);
} }
@@ -499,27 +499,27 @@ mod tests {
assert_eq!( assert_eq!(
edit_movie_block_iter.next().unwrap(), edit_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditMovieToggleMonitored &[ActiveRadarrBlock::EditMovieToggleMonitored]
); );
assert_eq!( assert_eq!(
edit_movie_block_iter.next().unwrap(), edit_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditMovieSelectMinimumAvailability &[ActiveRadarrBlock::EditMovieSelectMinimumAvailability]
); );
assert_eq!( assert_eq!(
edit_movie_block_iter.next().unwrap(), edit_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditMovieSelectQualityProfile &[ActiveRadarrBlock::EditMovieSelectQualityProfile]
); );
assert_eq!( assert_eq!(
edit_movie_block_iter.next().unwrap(), edit_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditMoviePathInput &[ActiveRadarrBlock::EditMoviePathInput]
); );
assert_eq!( assert_eq!(
edit_movie_block_iter.next().unwrap(), edit_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditMovieTagsInput &[ActiveRadarrBlock::EditMovieTagsInput]
); );
assert_eq!( assert_eq!(
edit_movie_block_iter.next().unwrap(), edit_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditMovieConfirmPrompt &[ActiveRadarrBlock::EditMovieConfirmPrompt]
); );
assert_eq!(edit_movie_block_iter.next(), None); assert_eq!(edit_movie_block_iter.next(), None);
} }
@@ -530,27 +530,27 @@ mod tests {
assert_eq!( assert_eq!(
edit_collection_block_iter.next().unwrap(), edit_collection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditCollectionToggleMonitored &[ActiveRadarrBlock::EditCollectionToggleMonitored]
); );
assert_eq!( assert_eq!(
edit_collection_block_iter.next().unwrap(), edit_collection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditCollectionSelectMinimumAvailability &[ActiveRadarrBlock::EditCollectionSelectMinimumAvailability]
); );
assert_eq!( assert_eq!(
edit_collection_block_iter.next().unwrap(), edit_collection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditCollectionSelectQualityProfile &[ActiveRadarrBlock::EditCollectionSelectQualityProfile]
); );
assert_eq!( assert_eq!(
edit_collection_block_iter.next().unwrap(), edit_collection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditCollectionRootFolderPathInput &[ActiveRadarrBlock::EditCollectionRootFolderPathInput]
); );
assert_eq!( assert_eq!(
edit_collection_block_iter.next().unwrap(), edit_collection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditCollectionToggleSearchOnAdd &[ActiveRadarrBlock::EditCollectionToggleSearchOnAdd]
); );
assert_eq!( assert_eq!(
edit_collection_block_iter.next().unwrap(), edit_collection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditCollectionConfirmPrompt &[ActiveRadarrBlock::EditCollectionConfirmPrompt]
); );
assert_eq!(edit_collection_block_iter.next(), None); assert_eq!(edit_collection_block_iter.next(), None);
} }
@@ -561,15 +561,15 @@ mod tests {
assert_eq!( assert_eq!(
delete_movie_block_iter.next().unwrap(), delete_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::DeleteMovieToggleDeleteFile &[ActiveRadarrBlock::DeleteMovieToggleDeleteFile]
); );
assert_eq!( assert_eq!(
delete_movie_block_iter.next().unwrap(), delete_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::DeleteMovieToggleAddListExclusion &[ActiveRadarrBlock::DeleteMovieToggleAddListExclusion]
); );
assert_eq!( assert_eq!(
delete_movie_block_iter.next().unwrap(), delete_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::DeleteMovieConfirmPrompt &[ActiveRadarrBlock::DeleteMovieConfirmPrompt]
); );
assert_eq!(delete_movie_block_iter.next(), None); assert_eq!(delete_movie_block_iter.next(), None);
} }
@@ -581,43 +581,38 @@ mod tests {
assert_eq!( assert_eq!(
edit_indexer_torrent_selection_block_iter.next().unwrap(), edit_indexer_torrent_selection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditIndexerNameInput &[
ActiveRadarrBlock::EditIndexerNameInput,
ActiveRadarrBlock::EditIndexerUrlInput,
]
); );
assert_eq!( assert_eq!(
edit_indexer_torrent_selection_block_iter.next().unwrap(), edit_indexer_torrent_selection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditIndexerToggleEnableRss &[
ActiveRadarrBlock::EditIndexerToggleEnableRss,
ActiveRadarrBlock::EditIndexerApiKeyInput,
]
); );
assert_eq!( assert_eq!(
edit_indexer_torrent_selection_block_iter.next().unwrap(), edit_indexer_torrent_selection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch &[
ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch,
ActiveRadarrBlock::EditIndexerSeedRatioInput,
]
); );
assert_eq!( assert_eq!(
edit_indexer_torrent_selection_block_iter.next().unwrap(), edit_indexer_torrent_selection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch &[
ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch,
ActiveRadarrBlock::EditIndexerTagsInput,
]
); );
assert_eq!( assert_eq!(
edit_indexer_torrent_selection_block_iter.next().unwrap(), edit_indexer_torrent_selection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditIndexerConfirmPrompt &[
); ActiveRadarrBlock::EditIndexerConfirmPrompt,
assert_eq!( ActiveRadarrBlock::EditIndexerConfirmPrompt,
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
); );
assert_eq!(edit_indexer_torrent_selection_block_iter.next(), None); assert_eq!(edit_indexer_torrent_selection_block_iter.next(), None);
} }
@@ -628,43 +623,38 @@ mod tests {
assert_eq!( assert_eq!(
edit_indexer_nzb_selection_block_iter.next().unwrap(), edit_indexer_nzb_selection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditIndexerNameInput &[
ActiveRadarrBlock::EditIndexerNameInput,
ActiveRadarrBlock::EditIndexerUrlInput,
]
); );
assert_eq!( assert_eq!(
edit_indexer_nzb_selection_block_iter.next().unwrap(), edit_indexer_nzb_selection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditIndexerToggleEnableRss &[
ActiveRadarrBlock::EditIndexerToggleEnableRss,
ActiveRadarrBlock::EditIndexerApiKeyInput,
]
); );
assert_eq!( assert_eq!(
edit_indexer_nzb_selection_block_iter.next().unwrap(), edit_indexer_nzb_selection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch &[
ActiveRadarrBlock::EditIndexerToggleEnableAutomaticSearch,
ActiveRadarrBlock::EditIndexerTagsInput,
]
); );
assert_eq!( assert_eq!(
edit_indexer_nzb_selection_block_iter.next().unwrap(), edit_indexer_nzb_selection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch &[
ActiveRadarrBlock::EditIndexerToggleEnableInteractiveSearch,
ActiveRadarrBlock::EditIndexerConfirmPrompt,
]
); );
assert_eq!( assert_eq!(
edit_indexer_nzb_selection_block_iter.next().unwrap(), edit_indexer_nzb_selection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditIndexerConfirmPrompt &[
); ActiveRadarrBlock::EditIndexerConfirmPrompt,
assert_eq!( ActiveRadarrBlock::EditIndexerConfirmPrompt,
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
); );
assert_eq!(edit_indexer_nzb_selection_block_iter.next(), None); assert_eq!(edit_indexer_nzb_selection_block_iter.next(), None);
} }
@@ -675,43 +665,38 @@ mod tests {
assert_eq!( assert_eq!(
indexer_settings_block_iter.next().unwrap(), indexer_settings_block_iter.next().unwrap(),
&ActiveRadarrBlock::IndexerSettingsMinimumAgeInput &[
ActiveRadarrBlock::IndexerSettingsMinimumAgeInput,
ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput,
]
); );
assert_eq!( assert_eq!(
indexer_settings_block_iter.next().unwrap(), indexer_settings_block_iter.next().unwrap(),
&ActiveRadarrBlock::IndexerSettingsRetentionInput &[
ActiveRadarrBlock::IndexerSettingsRetentionInput,
ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput,
]
); );
assert_eq!( assert_eq!(
indexer_settings_block_iter.next().unwrap(), indexer_settings_block_iter.next().unwrap(),
&ActiveRadarrBlock::IndexerSettingsMaximumSizeInput &[
ActiveRadarrBlock::IndexerSettingsMaximumSizeInput,
ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput,
]
); );
assert_eq!( assert_eq!(
indexer_settings_block_iter.next().unwrap(), indexer_settings_block_iter.next().unwrap(),
&ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags &[
ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags,
ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs,
]
); );
assert_eq!( assert_eq!(
indexer_settings_block_iter.next().unwrap(), indexer_settings_block_iter.next().unwrap(),
&ActiveRadarrBlock::IndexerSettingsConfirmPrompt &[
); ActiveRadarrBlock::IndexerSettingsConfirmPrompt,
assert_eq!( ActiveRadarrBlock::IndexerSettingsConfirmPrompt,
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
); );
assert_eq!(indexer_settings_block_iter.next(), None); assert_eq!(indexer_settings_block_iter.next(), None);
} }
+1 -1
View File
@@ -169,7 +169,7 @@ fn draw_downloads_context(f: &mut Frame<'_>, app: &App<'_>, area: Rect) {
f.render_widget(block, area); f.render_widget(block, area);
let max_items = ((((area.height as f64 / 2.0).floor() * 2.0) as i64) / 2) - 1; 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( let download_item_areas = Layout::vertical(
iter::repeat(Constraint::Length(2)) iter::repeat(Constraint::Length(2))
.take(items) .take(items)