From 906e09315264a8d720b013f666de374bf324c226 Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Tue, 17 Dec 2024 22:22:32 -0700 Subject: [PATCH] fix(sonarr): Pass the blocklist item ID alongside the DeleteBlocklistItem event when publishing to the networking channel --- src/cli/sonarr/delete_command_handler.rs | 2 +- .../sonarr/delete_command_handler_tests.rs | 2 +- src/cli/sonarr/sonarr_command_tests.rs | 2 +- .../blocklist/blocklist_handler_tests.rs | 19 +++++++++++++-- src/handlers/sonarr_handlers/blocklist/mod.rs | 14 +++++++++-- src/network/sonarr_network.rs | 24 ++++--------------- src/network/sonarr_network_tests.rs | 6 ++--- 7 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/cli/sonarr/delete_command_handler.rs b/src/cli/sonarr/delete_command_handler.rs index 1bf03b2..8be2770 100644 --- a/src/cli/sonarr/delete_command_handler.rs +++ b/src/cli/sonarr/delete_command_handler.rs @@ -94,7 +94,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, SonarrDeleteCommand> for SonarrDeleteComm SonarrDeleteCommand::BlocklistItem { blocklist_item_id } => { let resp = self .network - .handle_network_event(SonarrEvent::DeleteBlocklistItem(Some(blocklist_item_id)).into()) + .handle_network_event(SonarrEvent::DeleteBlocklistItem(blocklist_item_id).into()) .await?; serde_json::to_string_pretty(&resp)? } diff --git a/src/cli/sonarr/delete_command_handler_tests.rs b/src/cli/sonarr/delete_command_handler_tests.rs index 9813e3a..2c420cd 100644 --- a/src/cli/sonarr/delete_command_handler_tests.rs +++ b/src/cli/sonarr/delete_command_handler_tests.rs @@ -301,7 +301,7 @@ mod tests { mock_network .expect_handle_network_event() .with(eq::( - SonarrEvent::DeleteBlocklistItem(Some(expected_blocklist_item_id)).into(), + SonarrEvent::DeleteBlocklistItem(expected_blocklist_item_id).into(), )) .times(1) .returning(|_| { diff --git a/src/cli/sonarr/sonarr_command_tests.rs b/src/cli/sonarr/sonarr_command_tests.rs index 7599274..e43ac3f 100644 --- a/src/cli/sonarr/sonarr_command_tests.rs +++ b/src/cli/sonarr/sonarr_command_tests.rs @@ -346,7 +346,7 @@ mod tests { mock_network .expect_handle_network_event() .with(eq::( - SonarrEvent::DeleteBlocklistItem(Some(expected_blocklist_item_id)).into(), + SonarrEvent::DeleteBlocklistItem(expected_blocklist_item_id).into(), )) .times(1) .returning(|_| { diff --git a/src/handlers/sonarr_handlers/blocklist/blocklist_handler_tests.rs b/src/handlers/sonarr_handlers/blocklist/blocklist_handler_tests.rs index f8bcd9a..12263dd 100644 --- a/src/handlers/sonarr_handlers/blocklist/blocklist_handler_tests.rs +++ b/src/handlers/sonarr_handlers/blocklist/blocklist_handler_tests.rs @@ -161,7 +161,7 @@ mod tests { #[case( ActiveSonarrBlock::Blocklist, ActiveSonarrBlock::DeleteBlocklistItemPrompt, - SonarrEvent::DeleteBlocklistItem(None) + SonarrEvent::DeleteBlocklistItem(3) )] #[case( ActiveSonarrBlock::Blocklist, @@ -361,7 +361,7 @@ mod tests { #[case( ActiveSonarrBlock::Blocklist, ActiveSonarrBlock::DeleteBlocklistItemPrompt, - SonarrEvent::DeleteBlocklistItem(None) + SonarrEvent::DeleteBlocklistItem(3) )] #[case( ActiveSonarrBlock::Blocklist, @@ -512,6 +512,21 @@ mod tests { } }) } + + #[test] + fn test_extract_blocklist_item_id() { + let mut app = App::default(); + app.data.sonarr_data.blocklist.set_items(blocklist_vec()); + + let blocklist_item_id = BlocklistHandler::with( + DEFAULT_KEYBINDINGS.esc.key, + &mut app, + ActiveSonarrBlock::Blocklist, + None, + ).extract_blocklist_item_id(); + + assert_eq!(blocklist_item_id, 3); + } #[test] fn test_blocklist_handler_not_ready_when_loading() { diff --git a/src/handlers/sonarr_handlers/blocklist/mod.rs b/src/handlers/sonarr_handlers/blocklist/mod.rs index 9843558..6c855c3 100644 --- a/src/handlers/sonarr_handlers/blocklist/mod.rs +++ b/src/handlers/sonarr_handlers/blocklist/mod.rs @@ -28,6 +28,16 @@ impl<'a, 'b> BlocklistHandler<'a, 'b> { self.app.data.sonarr_data.blocklist, BlocklistItem ); + + fn extract_blocklist_item_id(&self) -> i64 { + self + .app + .data + .sonarr_data + .blocklist + .current_selection() + .id + } } impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveSonarrBlock> for BlocklistHandler<'a, 'b> { @@ -99,7 +109,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveSonarrBlock> for BlocklistHandler<'a, ActiveSonarrBlock::DeleteBlocklistItemPrompt => { if self.app.data.sonarr_data.prompt_confirm { self.app.data.sonarr_data.prompt_confirm_action = - Some(SonarrEvent::DeleteBlocklistItem(None)); + Some(SonarrEvent::DeleteBlocklistItem(self.extract_blocklist_item_id())); } self.app.pop_navigation_stack(); @@ -152,7 +162,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveSonarrBlock> for BlocklistHandler<'a, if key == DEFAULT_KEYBINDINGS.confirm.key { self.app.data.sonarr_data.prompt_confirm = true; self.app.data.sonarr_data.prompt_confirm_action = - Some(SonarrEvent::DeleteBlocklistItem(None)); + Some(SonarrEvent::DeleteBlocklistItem(self.extract_blocklist_item_id())); self.app.pop_navigation_stack(); } diff --git a/src/network/sonarr_network.rs b/src/network/sonarr_network.rs index fb32a2a..6bd5280 100644 --- a/src/network/sonarr_network.rs +++ b/src/network/sonarr_network.rs @@ -42,7 +42,7 @@ pub enum SonarrEvent { AddSeries(AddSeriesBody), AddTag(String), ClearBlocklist, - DeleteBlocklistItem(Option), + DeleteBlocklistItem(i64), DeleteDownload(Option), DeleteEpisodeFile(Option), DeleteIndexer(Option), @@ -459,30 +459,16 @@ impl<'a, 'b> Network<'a, 'b> { .await } - async fn delete_sonarr_blocklist_item(&mut self, blocklist_item_id: Option) -> Result<()> { - let event = SonarrEvent::DeleteBlocklistItem(None); - let id = if let Some(b_id) = blocklist_item_id { - b_id - } else { - self - .app - .lock() - .await - .data - .sonarr_data - .blocklist - .current_selection() - .id - }; - - info!("Deleting Sonarr blocklist item for item with id: {id}"); + async fn delete_sonarr_blocklist_item(&mut self, blocklist_item_id: i64) -> Result<()> { + let event = SonarrEvent::DeleteBlocklistItem(blocklist_item_id); + info!("Deleting Sonarr blocklist item for item with id: {blocklist_item_id}"); let request_props = self .request_props_from( event, RequestMethod::Delete, None::<()>, - Some(format!("/{id}")), + Some(format!("/{blocklist_item_id}")), None, ) .await; diff --git a/src/network/sonarr_network_tests.rs b/src/network/sonarr_network_tests.rs index 0db2ba6..017dac4 100644 --- a/src/network/sonarr_network_tests.rs +++ b/src/network/sonarr_network_tests.rs @@ -281,7 +281,7 @@ mod test { #[rstest] #[case(SonarrEvent::ClearBlocklist, "/blocklist/bulk")] - #[case(SonarrEvent::DeleteBlocklistItem(None), "/blocklist")] + #[case(SonarrEvent::DeleteBlocklistItem(0), "/blocklist")] #[case(SonarrEvent::HealthCheck, "/health")] #[case(SonarrEvent::GetBlocklist, "/blocklist?page=1&pageSize=10000")] #[case(SonarrEvent::GetDiskSpace, "/diskspace")] @@ -540,7 +540,7 @@ mod test { None, None, None, - SonarrEvent::DeleteBlocklistItem(None), + SonarrEvent::DeleteBlocklistItem(1), Some("/1"), None, ) @@ -555,7 +555,7 @@ mod test { let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); assert!(network - .handle_sonarr_event(SonarrEvent::DeleteBlocklistItem(None)) + .handle_sonarr_event(SonarrEvent::DeleteBlocklistItem(1)) .await .is_ok());