diff --git a/src/network/radarr_network.rs b/src/network/radarr_network.rs index f7599a0..0b9e087 100644 --- a/src/network/radarr_network.rs +++ b/src/network/radarr_network.rs @@ -167,7 +167,7 @@ impl<'a, 'b> Network<'a, 'b> { self.delete_movie(params).await.map(RadarrSerdeable::from) } RadarrEvent::DeleteRootFolder(root_folder_id) => self - .delete_root_folder(root_folder_id) + .delete_radarr_root_folder(root_folder_id) .await .map(RadarrSerdeable::from), RadarrEvent::DeleteTag(tag_id) => self.delete_tag(tag_id).await.map(RadarrSerdeable::from), @@ -618,7 +618,7 @@ impl<'a, 'b> Network<'a, 'b> { resp } - async fn delete_root_folder(&mut self, root_folder_id: Option) -> Result<()> { + async fn delete_radarr_root_folder(&mut self, root_folder_id: Option) -> Result<()> { let event = RadarrEvent::DeleteRootFolder(None); let id = if let Some(rf_id) = root_folder_id { rf_id diff --git a/src/network/radarr_network_tests.rs b/src/network/radarr_network_tests.rs index 8b83ad5..b1f6219 100644 --- a/src/network/radarr_network_tests.rs +++ b/src/network/radarr_network_tests.rs @@ -3333,7 +3333,7 @@ mod test { } #[tokio::test] - async fn test_handle_delete_root_folder_event() { + async fn test_handle_delete_radarr_root_folder_event() { let (async_server, app_arc, _server) = mock_servarr_api( RequestMethod::Delete, None, @@ -3362,7 +3362,7 @@ mod test { } #[tokio::test] - async fn test_handle_delete_root_folder_event_uses_provided_id() { + async fn test_handle_delete_radarr_root_folder_event_uses_provided_id() { let (async_server, app_arc, _server) = mock_servarr_api( RequestMethod::Delete, None, diff --git a/src/network/sonarr_network.rs b/src/network/sonarr_network.rs index a5a1c7b..b51406d 100644 --- a/src/network/sonarr_network.rs +++ b/src/network/sonarr_network.rs @@ -35,6 +35,7 @@ pub enum SonarrEvent { DeleteBlocklistItem(Option), DeleteDownload(Option), DeleteIndexer(Option), + DeleteRootFolder(Option), GetAllIndexerSettings, GetBlocklist, GetDownloads, @@ -73,7 +74,7 @@ impl NetworkResource for SonarrEvent { SonarrEvent::GetLogs(_) => "/log", SonarrEvent::GetQualityProfiles => "/qualityprofile", SonarrEvent::GetQueuedEvents => "/command", - SonarrEvent::GetRootFolders => "/rootfolder", + SonarrEvent::GetRootFolders | SonarrEvent::DeleteRootFolder(_) => "/rootfolder", SonarrEvent::GetSeasonReleases(_) | SonarrEvent::GetEpisodeReleases(_) => "/release", SonarrEvent::GetSeriesHistory(_) => "/history/series", SonarrEvent::GetStatus => "/system/status", @@ -115,6 +116,10 @@ impl<'a, 'b> Network<'a, 'b> { .delete_sonarr_indexer(indexer_id) .await .map(SonarrSerdeable::from), + SonarrEvent::DeleteRootFolder(root_folder_id) => self + .delete_sonarr_root_folder(root_folder_id) + .await + .map(SonarrSerdeable::from), SonarrEvent::GetBlocklist => self.get_sonarr_blocklist().await.map(SonarrSerdeable::from), SonarrEvent::GetDownloads => self.get_sonarr_downloads().await.map(SonarrSerdeable::from), SonarrEvent::GetEpisodes(series_id) => self @@ -313,6 +318,39 @@ impl<'a, 'b> Network<'a, 'b> { .await } + async fn delete_sonarr_root_folder(&mut self, root_folder_id: Option) -> Result<()> { + let event = SonarrEvent::DeleteRootFolder(None); + let id = if let Some(rf_id) = root_folder_id { + rf_id + } else { + self + .app + .lock() + .await + .data + .sonarr_data + .root_folders + .current_selection() + .id + }; + + info!("Deleting Sonarr root folder for folder with id: {id}"); + + let request_props = self + .request_props_from( + event, + RequestMethod::Delete, + None::<()>, + Some(format!("/{id}")), + None, + ) + .await; + + self + .handle_request::<(), ()>(request_props, |_, _| ()) + .await + } + async fn get_all_sonarr_indexer_settings(&mut self) -> Result { info!("Fetching Sonarr indexer settings"); let event = SonarrEvent::GetAllIndexerSettings; diff --git a/src/network/sonarr_network_tests.rs b/src/network/sonarr_network_tests.rs index 7da3f0a..e2c026a 100644 --- a/src/network/sonarr_network_tests.rs +++ b/src/network/sonarr_network_tests.rs @@ -173,7 +173,9 @@ mod test { } #[rstest] - fn test_resource_root_folder(#[values(SonarrEvent::GetRootFolders)] event: SonarrEvent) { + fn test_resource_root_folder( + #[values(SonarrEvent::GetRootFolders, SonarrEvent::DeleteRootFolder(None))] event: SonarrEvent, + ) { assert_str_eq!(event.resource(), "/rootfolder"); } @@ -384,6 +386,57 @@ mod test { async_server.assert_async().await; } + #[tokio::test] + async fn test_handle_delete_sonarr_root_folder_event() { + let (async_server, app_arc, _server) = mock_servarr_api( + RequestMethod::Delete, + None, + None, + None, + SonarrEvent::DeleteRootFolder(None), + Some("/1"), + None, + ) + .await; + app_arc + .lock() + .await + .data + .sonarr_data + .root_folders + .set_items(vec![root_folder()]); + let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); + + assert!(network + .handle_sonarr_event(SonarrEvent::DeleteRootFolder(None)) + .await + .is_ok()); + + async_server.assert_async().await; + } + + #[tokio::test] + async fn test_handle_delete_sonarr_root_folder_event_uses_provided_id() { + let (async_server, app_arc, _server) = mock_servarr_api( + RequestMethod::Delete, + None, + None, + None, + SonarrEvent::DeleteRootFolder(None), + Some("/1"), + None, + ) + .await; + let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); + + assert!(network + .handle_sonarr_event(SonarrEvent::DeleteRootFolder(Some(1))) + .await + .is_ok()); + + async_server.assert_async().await; + } + #[rstest] #[tokio::test] async fn test_handle_get_sonarr_blocklist_event(#[values(true, false)] use_custom_sorting: bool) {