From 7fdec15ba9683e5c437ed849d59177cdad6eb0a7 Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Fri, 22 Nov 2024 19:18:42 -0700 Subject: [PATCH] feat(network): Support for updating Sonarr downloads --- src/network/radarr_network.rs | 9 ++++++--- src/network/radarr_network_tests.rs | 2 +- src/network/sonarr_network.rs | 24 +++++++++++++++++++++++- src/network/sonarr_network_tests.rs | 27 ++++++++++++++++++++++++++- 4 files changed, 56 insertions(+), 6 deletions(-) diff --git a/src/network/radarr_network.rs b/src/network/radarr_network.rs index b8c46ad..51b3441 100644 --- a/src/network/radarr_network.rs +++ b/src/network/radarr_network.rs @@ -273,7 +273,10 @@ impl<'a, 'b> Network<'a, 'b> { .await .map(RadarrSerdeable::from), RadarrEvent::UpdateCollections => self.update_collections().await.map(RadarrSerdeable::from), - RadarrEvent::UpdateDownloads => self.update_downloads().await.map(RadarrSerdeable::from), + RadarrEvent::UpdateDownloads => self + .update_radarr_downloads() + .await + .map(RadarrSerdeable::from), } } @@ -2214,8 +2217,8 @@ impl<'a, 'b> Network<'a, 'b> { .await } - async fn update_downloads(&mut self) -> Result { - info!("Updating downloads"); + async fn update_radarr_downloads(&mut self) -> Result { + info!("Updating Radarr downloads"); let event = RadarrEvent::UpdateDownloads; let body = CommandBody { name: "RefreshMonitoredDownloads".to_owned(), diff --git a/src/network/radarr_network_tests.rs b/src/network/radarr_network_tests.rs index 6d22fa7..33e6f1e 100644 --- a/src/network/radarr_network_tests.rs +++ b/src/network/radarr_network_tests.rs @@ -1301,7 +1301,7 @@ mod test { } #[tokio::test] - async fn test_handle_update_downloads_event() { + async fn test_handle_update_radarr_downloads_event() { let (async_server, app_arc, _server) = mock_servarr_api( RequestMethod::Post, Some(json!({ diff --git a/src/network/sonarr_network.rs b/src/network/sonarr_network.rs index 43729d1..4603f88 100644 --- a/src/network/sonarr_network.rs +++ b/src/network/sonarr_network.rs @@ -78,6 +78,7 @@ pub enum SonarrEvent { TriggerAutomaticSeriesSearch(Option), UpdateAllSeries, UpdateAndScanSeries(Option), + UpdateDownloads, } impl NetworkResource for SonarrEvent { @@ -102,7 +103,8 @@ impl NetworkResource for SonarrEvent { | SonarrEvent::TriggerAutomaticSeasonSearch(_) | SonarrEvent::TriggerAutomaticEpisodeSearch(_) | SonarrEvent::UpdateAllSeries - | SonarrEvent::UpdateAndScanSeries(_) => "/command", + | SonarrEvent::UpdateAndScanSeries(_) + | SonarrEvent::UpdateDownloads => "/command", SonarrEvent::GetRootFolders | SonarrEvent::DeleteRootFolder(_) | SonarrEvent::AddRootFolder(_) => "/rootfolder", @@ -267,6 +269,10 @@ impl<'a, 'b> Network<'a, 'b> { .update_and_scan_series(series_id) .await .map(SonarrSerdeable::from), + SonarrEvent::UpdateDownloads => self + .update_sonarr_downloads() + .await + .map(SonarrSerdeable::from), } } @@ -1568,6 +1574,22 @@ impl<'a, 'b> Network<'a, 'b> { .await } + async fn update_sonarr_downloads(&mut self) -> Result { + info!("Updating Sonarr downloads"); + let event = SonarrEvent::UpdateDownloads; + let body = CommandBody { + name: "RefreshMonitoredDownloads".to_owned(), + }; + + let request_props = self + .request_props_from(event, RequestMethod::Post, Some(body), None, None) + .await; + + self + .handle_request::(request_props, |_, _| ()) + .await + } + async fn extract_series_id(&mut self, series_id: Option) -> (i64, String) { let series_id = if let Some(id) = series_id { id diff --git a/src/network/sonarr_network_tests.rs b/src/network/sonarr_network_tests.rs index e183f4f..aa3a254 100644 --- a/src/network/sonarr_network_tests.rs +++ b/src/network/sonarr_network_tests.rs @@ -170,7 +170,8 @@ mod test { SonarrEvent::TriggerAutomaticSeasonSearch(None), SonarrEvent::TriggerAutomaticSeriesSearch(None), SonarrEvent::UpdateAllSeries, - SonarrEvent::UpdateAndScanSeries(None) + SonarrEvent::UpdateAndScanSeries(None), + SonarrEvent::UpdateDownloads )] event: SonarrEvent, ) { @@ -4578,6 +4579,30 @@ mod test { async_server.assert_async().await; } + #[tokio::test] + async fn test_handle_update_sonarr_downloads_event() { + let (async_server, app_arc, _server) = mock_servarr_api( + RequestMethod::Post, + Some(json!({ + "name": "RefreshMonitoredDownloads" + })), + Some(json!({})), + None, + SonarrEvent::UpdateDownloads, + None, + None, + ) + .await; + let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); + + assert!(network + .handle_sonarr_event(SonarrEvent::UpdateDownloads) + .await + .is_ok()); + + async_server.assert_async().await; + } + #[tokio::test] async fn test_extract_series_id() { let app_arc = Arc::new(Mutex::new(App::default()));