From 5f94dbcabe183145d45a55c0a4035242b263dbbc Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Tue, 17 Dec 2024 23:59:49 -0700 Subject: [PATCH] fix(sonarr): Pass series ID alongside all GetEpisodeFiles events when publishing to the networking channel --- src/app/sonarr/mod.rs | 4 +- src/app/sonarr/sonarr_tests.rs | 2 +- src/cli/sonarr/list_command_handler.rs | 2 +- src/cli/sonarr/list_command_handler_tests.rs | 2 +- src/network/sonarr_network.rs | 9 ++- src/network/sonarr_network_tests.rs | 63 ++------------------ 6 files changed, 15 insertions(+), 67 deletions(-) diff --git a/src/app/sonarr/mod.rs b/src/app/sonarr/mod.rs index 491c8c3..5edda06 100644 --- a/src/app/sonarr/mod.rs +++ b/src/app/sonarr/mod.rs @@ -46,7 +46,9 @@ impl<'a> App<'a> { .dispatch_network_event(SonarrEvent::GetEpisodes(self.extract_series_id().await).into()) .await; self - .dispatch_network_event(SonarrEvent::GetEpisodeFiles(None).into()) + .dispatch_network_event( + SonarrEvent::GetEpisodeFiles(self.extract_series_id().await).into(), + ) .await; self .dispatch_network_event(SonarrEvent::GetDownloads.into()) diff --git a/src/app/sonarr/sonarr_tests.rs b/src/app/sonarr/sonarr_tests.rs index b98540a..91b7281 100644 --- a/src/app/sonarr/sonarr_tests.rs +++ b/src/app/sonarr/sonarr_tests.rs @@ -97,7 +97,7 @@ mod tests { ); assert_eq!( sync_network_rx.recv().await.unwrap(), - SonarrEvent::GetEpisodeFiles(None).into() + SonarrEvent::GetEpisodeFiles(1).into() ); assert_eq!( sync_network_rx.recv().await.unwrap(), diff --git a/src/cli/sonarr/list_command_handler.rs b/src/cli/sonarr/list_command_handler.rs index fb0231c..cabb616 100644 --- a/src/cli/sonarr/list_command_handler.rs +++ b/src/cli/sonarr/list_command_handler.rs @@ -170,7 +170,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, SonarrListCommand> for SonarrListCommandH SonarrListCommand::EpisodeFiles { series_id } => { let resp = self .network - .handle_network_event(SonarrEvent::GetEpisodeFiles(Some(series_id)).into()) + .handle_network_event(SonarrEvent::GetEpisodeFiles(series_id).into()) .await?; serde_json::to_string_pretty(&resp)? } diff --git a/src/cli/sonarr/list_command_handler_tests.rs b/src/cli/sonarr/list_command_handler_tests.rs index ee4f47b..8958a84 100644 --- a/src/cli/sonarr/list_command_handler_tests.rs +++ b/src/cli/sonarr/list_command_handler_tests.rs @@ -355,7 +355,7 @@ mod tests { mock_network .expect_handle_network_event() .with(eq::( - SonarrEvent::GetEpisodeFiles(Some(expected_series_id)).into(), + SonarrEvent::GetEpisodeFiles(expected_series_id).into(), )) .times(1) .returning(|_| { diff --git a/src/network/sonarr_network.rs b/src/network/sonarr_network.rs index 6b479b6..41d76d7 100644 --- a/src/network/sonarr_network.rs +++ b/src/network/sonarr_network.rs @@ -61,7 +61,7 @@ pub enum SonarrEvent { GetIndexers, GetEpisodeDetails(i64), GetEpisodes(i64), - GetEpisodeFiles(Option), + GetEpisodeFiles(i64), GetEpisodeHistory(Option), GetLanguageProfiles, GetLogs(Option), @@ -1206,10 +1206,9 @@ impl<'a, 'b> Network<'a, 'b> { .await } - async fn get_episode_files(&mut self, series_id: Option) -> Result> { + async fn get_episode_files(&mut self, series_id: i64) -> Result> { let event = SonarrEvent::GetEpisodeFiles(series_id); - let (id, series_id_param) = self.extract_series_id(series_id).await; - info!("Fetching episodes files for Sonarr series with ID: {id}"); + info!("Fetching episodes files for Sonarr series with ID: {series_id}"); let request_props = self .request_props_from( @@ -1217,7 +1216,7 @@ impl<'a, 'b> Network<'a, 'b> { RequestMethod::Get, None::<()>, None, - Some(series_id_param), + Some(format!("seriesId={series_id}")), ) .await; diff --git a/src/network/sonarr_network_tests.rs b/src/network/sonarr_network_tests.rs index 703aaf0..2c922b1 100644 --- a/src/network/sonarr_network_tests.rs +++ b/src/network/sonarr_network_tests.rs @@ -267,7 +267,7 @@ mod test { #[rstest] fn test_resource_episode_file( - #[values(SonarrEvent::GetEpisodeFiles(None), SonarrEvent::DeleteEpisodeFile(0))] + #[values(SonarrEvent::GetEpisodeFiles(0), SonarrEvent::DeleteEpisodeFile(0))] event: SonarrEvent, ) { assert_str_eq!(event.resource(), "/episodefile"); @@ -2163,7 +2163,7 @@ mod test { None, Some(json!([episode_file()])), None, - SonarrEvent::GetEpisodeFiles(None), + SonarrEvent::GetEpisodeFiles(1), None, Some("seriesId=1"), ) @@ -2183,7 +2183,7 @@ mod test { let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); if let SonarrSerdeable::EpisodeFiles(episode_files) = network - .handle_sonarr_event(SonarrEvent::GetEpisodeFiles(None)) + .handle_sonarr_event(SonarrEvent::GetEpisodeFiles(1)) .await .unwrap() { @@ -2212,7 +2212,7 @@ mod test { None, Some(json!([episode_file()])), None, - SonarrEvent::GetEpisodeFiles(None), + SonarrEvent::GetEpisodeFiles(1), None, Some("seriesId=1"), ) @@ -2230,7 +2230,7 @@ mod test { let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); if let SonarrSerdeable::EpisodeFiles(episode_files) = network - .handle_sonarr_event(SonarrEvent::GetEpisodeFiles(None)) + .handle_sonarr_event(SonarrEvent::GetEpisodeFiles(1)) .await .unwrap() { @@ -2259,59 +2259,6 @@ mod test { } } - #[tokio::test] - async fn test_handle_get_episode_files_event_uses_provided_series_id() { - let episode_file = EpisodeFile { - id: 2, - ..episode_file() - }; - let (async_server, app_arc, _server) = mock_servarr_api( - RequestMethod::Get, - None, - Some(json!([episode_file.clone()])), - None, - SonarrEvent::GetEpisodeFiles(Some(2)), - None, - Some("seriesId=2"), - ) - .await; - app_arc.lock().await.data.sonarr_data.season_details_modal = - Some(SeasonDetailsModal::default()); - app_arc - .lock() - .await - .data - .sonarr_data - .series - .set_items(vec![Series { - id: 1, - ..Series::default() - }]); - let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); - - if let SonarrSerdeable::EpisodeFiles(episode_files) = network - .handle_sonarr_event(SonarrEvent::GetEpisodeFiles(Some(2))) - .await - .unwrap() - { - async_server.assert_async().await; - assert_eq!( - app_arc - .lock() - .await - .data - .sonarr_data - .season_details_modal - .as_ref() - .unwrap() - .episode_files - .items, - vec![episode_file.clone()] - ); - assert_eq!(episode_files, vec![episode_file]); - } - } - #[tokio::test] async fn test_handle_get_sonarr_host_config_event() { let host_config_response = json!({