From d96316577a6d23152f20d1133666132e1a00ba9c Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Fri, 22 Nov 2024 15:35:30 -0700 Subject: [PATCH] feat(cli): Support for listing all Sonarr tags --- src/cli/radarr/delete_command_handler.rs | 12 +++---- src/cli/radarr/edit_command_handler.rs | 8 ++--- src/cli/radarr/get_command_handler.rs | 12 +++---- src/cli/radarr/list_command_handler.rs | 24 +++++++------- src/cli/radarr/mod.rs | 16 +++++----- src/cli/radarr/refresh_command_handler.rs | 8 ++--- src/cli/sonarr/delete_command_handler.rs | 8 ++--- src/cli/sonarr/get_command_handler.rs | 12 +++---- src/cli/sonarr/list_command_handler.rs | 33 +++++++++++++------- src/cli/sonarr/list_command_handler_tests.rs | 4 ++- 10 files changed, 74 insertions(+), 63 deletions(-) diff --git a/src/cli/radarr/delete_command_handler.rs b/src/cli/radarr/delete_command_handler.rs index 8568c88..2f10c57 100644 --- a/src/cli/radarr/delete_command_handler.rs +++ b/src/cli/radarr/delete_command_handler.rs @@ -89,21 +89,21 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrDeleteCommand> for RadarrDeleteComm RadarrDeleteCommand::BlocklistItem { blocklist_item_id } => { let resp = self .network - .handle_network_event((RadarrEvent::DeleteBlocklistItem(Some(blocklist_item_id))).into()) + .handle_network_event(RadarrEvent::DeleteBlocklistItem(Some(blocklist_item_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrDeleteCommand::Download { download_id } => { let resp = self .network - .handle_network_event((RadarrEvent::DeleteDownload(Some(download_id))).into()) + .handle_network_event(RadarrEvent::DeleteDownload(Some(download_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrDeleteCommand::Indexer { indexer_id } => { let resp = self .network - .handle_network_event((RadarrEvent::DeleteIndexer(Some(indexer_id))).into()) + .handle_network_event(RadarrEvent::DeleteIndexer(Some(indexer_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } @@ -119,21 +119,21 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrDeleteCommand> for RadarrDeleteComm }; let resp = self .network - .handle_network_event((RadarrEvent::DeleteMovie(Some(delete_movie_params))).into()) + .handle_network_event(RadarrEvent::DeleteMovie(Some(delete_movie_params)).into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrDeleteCommand::RootFolder { root_folder_id } => { let resp = self .network - .handle_network_event((RadarrEvent::DeleteRootFolder(Some(root_folder_id))).into()) + .handle_network_event(RadarrEvent::DeleteRootFolder(Some(root_folder_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrDeleteCommand::Tag { tag_id } => { let resp = self .network - .handle_network_event((RadarrEvent::DeleteTag(tag_id)).into()) + .handle_network_event(RadarrEvent::DeleteTag(tag_id).into()) .await?; serde_json::to_string_pretty(&resp)? } diff --git a/src/cli/radarr/edit_command_handler.rs b/src/cli/radarr/edit_command_handler.rs index f3396c9..ca731d3 100644 --- a/src/cli/radarr/edit_command_handler.rs +++ b/src/cli/radarr/edit_command_handler.rs @@ -390,7 +390,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrEditCommand> for RadarrEditCommandH }; self .network - .handle_network_event((RadarrEvent::EditAllIndexerSettings(Some(params))).into()) + .handle_network_event(RadarrEvent::EditAllIndexerSettings(Some(params)).into()) .await?; "All indexer settings updated".to_owned() } else { @@ -420,7 +420,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrEditCommand> for RadarrEditCommandH }; self .network - .handle_network_event((RadarrEvent::EditCollection(Some(edit_collection_params))).into()) + .handle_network_event(RadarrEvent::EditCollection(Some(edit_collection_params)).into()) .await?; "Collection updated".to_owned() } @@ -461,7 +461,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrEditCommand> for RadarrEditCommandH self .network - .handle_network_event((RadarrEvent::EditIndexer(Some(edit_indexer_params))).into()) + .handle_network_event(RadarrEvent::EditIndexer(Some(edit_indexer_params)).into()) .await?; "Indexer updated".to_owned() } @@ -488,7 +488,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrEditCommand> for RadarrEditCommandH self .network - .handle_network_event((RadarrEvent::EditMovie(Some(edit_movie_params))).into()) + .handle_network_event(RadarrEvent::EditMovie(Some(edit_movie_params)).into()) .await?; "Movie Updated".to_owned() } diff --git a/src/cli/radarr/get_command_handler.rs b/src/cli/radarr/get_command_handler.rs index 4df2595..4fe2830 100644 --- a/src/cli/radarr/get_command_handler.rs +++ b/src/cli/radarr/get_command_handler.rs @@ -76,42 +76,42 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrGetCommand> for RadarrGetCommandHan RadarrGetCommand::AllIndexerSettings => { let resp = self .network - .handle_network_event((RadarrEvent::GetAllIndexerSettings).into()) + .handle_network_event(RadarrEvent::GetAllIndexerSettings.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrGetCommand::HostConfig => { let resp = self .network - .handle_network_event((RadarrEvent::GetHostConfig).into()) + .handle_network_event(RadarrEvent::GetHostConfig.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrGetCommand::MovieDetails { movie_id } => { let resp = self .network - .handle_network_event((RadarrEvent::GetMovieDetails(Some(movie_id))).into()) + .handle_network_event(RadarrEvent::GetMovieDetails(Some(movie_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrGetCommand::MovieHistory { movie_id } => { let resp = self .network - .handle_network_event((RadarrEvent::GetMovieHistory(Some(movie_id))).into()) + .handle_network_event(RadarrEvent::GetMovieHistory(Some(movie_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrGetCommand::SecurityConfig => { let resp = self .network - .handle_network_event((RadarrEvent::GetSecurityConfig).into()) + .handle_network_event(RadarrEvent::GetSecurityConfig.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrGetCommand::SystemStatus => { let resp = self .network - .handle_network_event((RadarrEvent::GetStatus).into()) + .handle_network_event(RadarrEvent::GetStatus.into()) .await?; serde_json::to_string_pretty(&resp)? } diff --git a/src/cli/radarr/list_command_handler.rs b/src/cli/radarr/list_command_handler.rs index 0fc4dfb..d2b9019 100644 --- a/src/cli/radarr/list_command_handler.rs +++ b/src/cli/radarr/list_command_handler.rs @@ -91,28 +91,28 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrListCommand> for RadarrListCommandH RadarrListCommand::Blocklist => { let resp = self .network - .handle_network_event((RadarrEvent::GetBlocklist).into()) + .handle_network_event(RadarrEvent::GetBlocklist.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrListCommand::Collections => { let resp = self .network - .handle_network_event((RadarrEvent::GetCollections).into()) + .handle_network_event(RadarrEvent::GetCollections.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrListCommand::Downloads => { let resp = self .network - .handle_network_event((RadarrEvent::GetDownloads).into()) + .handle_network_event(RadarrEvent::GetDownloads.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrListCommand::Indexers => { let resp = self .network - .handle_network_event((RadarrEvent::GetIndexers).into()) + .handle_network_event(RadarrEvent::GetIndexers.into()) .await?; serde_json::to_string_pretty(&resp)? } @@ -136,56 +136,56 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrListCommand> for RadarrListCommandH RadarrListCommand::Movies => { let resp = self .network - .handle_network_event((RadarrEvent::GetMovies).into()) + .handle_network_event(RadarrEvent::GetMovies.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrListCommand::MovieCredits { movie_id } => { let resp = self .network - .handle_network_event((RadarrEvent::GetMovieCredits(Some(movie_id))).into()) + .handle_network_event(RadarrEvent::GetMovieCredits(Some(movie_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrListCommand::QualityProfiles => { let resp = self .network - .handle_network_event((RadarrEvent::GetQualityProfiles).into()) + .handle_network_event(RadarrEvent::GetQualityProfiles.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrListCommand::QueuedEvents => { let resp = self .network - .handle_network_event((RadarrEvent::GetQueuedEvents).into()) + .handle_network_event(RadarrEvent::GetQueuedEvents.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrListCommand::RootFolders => { let resp = self .network - .handle_network_event((RadarrEvent::GetRootFolders).into()) + .handle_network_event(RadarrEvent::GetRootFolders.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrListCommand::Tags => { let resp = self .network - .handle_network_event((RadarrEvent::GetTags).into()) + .handle_network_event(RadarrEvent::GetTags.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrListCommand::Tasks => { let resp = self .network - .handle_network_event((RadarrEvent::GetTasks).into()) + .handle_network_event(RadarrEvent::GetTasks.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrListCommand::Updates => { let resp = self .network - .handle_network_event((RadarrEvent::GetUpdates).into()) + .handle_network_event(RadarrEvent::GetUpdates.into()) .await?; serde_json::to_string_pretty(&resp)? } diff --git a/src/cli/radarr/mod.rs b/src/cli/radarr/mod.rs index 2bb9e34..cd64155 100644 --- a/src/cli/radarr/mod.rs +++ b/src/cli/radarr/mod.rs @@ -193,7 +193,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrCommand> for RadarrCliHandler<'a, ' .await?; let resp = self .network - .handle_network_event((RadarrEvent::ClearBlocklist).into()) + .handle_network_event(RadarrEvent::ClearBlocklist.into()) .await?; serde_json::to_string_pretty(&resp)? } @@ -209,7 +209,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrCommand> for RadarrCliHandler<'a, ' }; let resp = self .network - .handle_network_event((RadarrEvent::DownloadRelease(Some(params))).into()) + .handle_network_event(RadarrEvent::DownloadRelease(Some(params)).into()) .await?; serde_json::to_string_pretty(&resp)? } @@ -217,42 +217,42 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrCommand> for RadarrCliHandler<'a, ' println!("Searching for releases. This may take a minute..."); let resp = self .network - .handle_network_event((RadarrEvent::GetReleases(Some(movie_id))).into()) + .handle_network_event(RadarrEvent::GetReleases(Some(movie_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrCommand::SearchNewMovie { query } => { let resp = self .network - .handle_network_event((RadarrEvent::SearchNewMovie(Some(query))).into()) + .handle_network_event(RadarrEvent::SearchNewMovie(Some(query)).into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrCommand::StartTask { task_name } => { let resp = self .network - .handle_network_event((RadarrEvent::StartTask(Some(task_name))).into()) + .handle_network_event(RadarrEvent::StartTask(Some(task_name)).into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrCommand::TestIndexer { indexer_id } => { let resp = self .network - .handle_network_event((RadarrEvent::TestIndexer(Some(indexer_id))).into()) + .handle_network_event(RadarrEvent::TestIndexer(Some(indexer_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrCommand::TestAllIndexers => { let resp = self .network - .handle_network_event((RadarrEvent::TestAllIndexers).into()) + .handle_network_event(RadarrEvent::TestAllIndexers.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrCommand::TriggerAutomaticSearch { movie_id } => { let resp = self .network - .handle_network_event((RadarrEvent::TriggerAutomaticSearch(Some(movie_id))).into()) + .handle_network_event(RadarrEvent::TriggerAutomaticSearch(Some(movie_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } diff --git a/src/cli/radarr/refresh_command_handler.rs b/src/cli/radarr/refresh_command_handler.rs index 201be01..3101a98 100644 --- a/src/cli/radarr/refresh_command_handler.rs +++ b/src/cli/radarr/refresh_command_handler.rs @@ -67,28 +67,28 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrRefreshCommand> RadarrRefreshCommand::AllMovies => { let resp = self .network - .handle_network_event((RadarrEvent::UpdateAllMovies).into()) + .handle_network_event(RadarrEvent::UpdateAllMovies.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrRefreshCommand::Collections => { let resp = self .network - .handle_network_event((RadarrEvent::UpdateCollections).into()) + .handle_network_event(RadarrEvent::UpdateCollections.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrRefreshCommand::Downloads => { let resp = self .network - .handle_network_event((RadarrEvent::UpdateDownloads).into()) + .handle_network_event(RadarrEvent::UpdateDownloads.into()) .await?; serde_json::to_string_pretty(&resp)? } RadarrRefreshCommand::Movie { movie_id } => { let resp = self .network - .handle_network_event((RadarrEvent::UpdateAndScan(Some(movie_id))).into()) + .handle_network_event(RadarrEvent::UpdateAndScan(Some(movie_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } diff --git a/src/cli/sonarr/delete_command_handler.rs b/src/cli/sonarr/delete_command_handler.rs index 0e1cd55..038830e 100644 --- a/src/cli/sonarr/delete_command_handler.rs +++ b/src/cli/sonarr/delete_command_handler.rs @@ -74,28 +74,28 @@ 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(Some(blocklist_item_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrDeleteCommand::Download { download_id } => { let resp = self .network - .handle_network_event((SonarrEvent::DeleteDownload(Some(download_id))).into()) + .handle_network_event(SonarrEvent::DeleteDownload(Some(download_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrDeleteCommand::Indexer { indexer_id } => { let resp = self .network - .handle_network_event((SonarrEvent::DeleteIndexer(Some(indexer_id))).into()) + .handle_network_event(SonarrEvent::DeleteIndexer(Some(indexer_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrDeleteCommand::RootFolder { root_folder_id } => { let resp = self .network - .handle_network_event((SonarrEvent::DeleteRootFolder(Some(root_folder_id))).into()) + .handle_network_event(SonarrEvent::DeleteRootFolder(Some(root_folder_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } diff --git a/src/cli/sonarr/get_command_handler.rs b/src/cli/sonarr/get_command_handler.rs index 091ef87..37e3101 100644 --- a/src/cli/sonarr/get_command_handler.rs +++ b/src/cli/sonarr/get_command_handler.rs @@ -76,42 +76,42 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, SonarrGetCommand> for SonarrGetCommandHan SonarrGetCommand::AllIndexerSettings => { let resp = self .network - .handle_network_event((SonarrEvent::GetAllIndexerSettings).into()) + .handle_network_event(SonarrEvent::GetAllIndexerSettings.into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrGetCommand::EpisodeDetails { episode_id } => { let resp = self .network - .handle_network_event((SonarrEvent::GetEpisodeDetails(Some(episode_id))).into()) + .handle_network_event(SonarrEvent::GetEpisodeDetails(Some(episode_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrGetCommand::HostConfig => { let resp = self .network - .handle_network_event((SonarrEvent::GetHostConfig).into()) + .handle_network_event(SonarrEvent::GetHostConfig.into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrGetCommand::SecurityConfig => { let resp = self .network - .handle_network_event((SonarrEvent::GetSecurityConfig).into()) + .handle_network_event(SonarrEvent::GetSecurityConfig.into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrGetCommand::SeriesDetails { series_id } => { let resp = self .network - .handle_network_event((SonarrEvent::GetSeriesDetails(Some(series_id))).into()) + .handle_network_event(SonarrEvent::GetSeriesDetails(Some(series_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrGetCommand::SystemStatus => { let resp = self .network - .handle_network_event((SonarrEvent::GetStatus).into()) + .handle_network_event(SonarrEvent::GetStatus.into()) .await?; serde_json::to_string_pretty(&resp)? } diff --git a/src/cli/sonarr/list_command_handler.rs b/src/cli/sonarr/list_command_handler.rs index 92ec8c9..2e2b85e 100644 --- a/src/cli/sonarr/list_command_handler.rs +++ b/src/cli/sonarr/list_command_handler.rs @@ -61,9 +61,9 @@ pub enum SonarrListCommand { QualityProfiles, #[command(about = "List all queued events")] QueuedEvents, - #[command(about = "List all series in your Sonarr library")] #[command(about = "List all root folders in Sonarr")] RootFolders, + #[command(about = "List all series in your Sonarr library")] Series, #[command(about = "Fetch all history events for the series with the given ID")] SeriesHistory { @@ -74,6 +74,8 @@ pub enum SonarrListCommand { )] series_id: i64, }, + #[command(about = "List all Sonarr tags")] + Tags, } impl From for Command { @@ -106,42 +108,42 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, SonarrListCommand> for SonarrListCommandH SonarrListCommand::Blocklist => { let resp = self .network - .handle_network_event((SonarrEvent::GetBlocklist).into()) + .handle_network_event(SonarrEvent::GetBlocklist.into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrListCommand::Downloads => { let resp = self .network - .handle_network_event((SonarrEvent::GetDownloads).into()) + .handle_network_event(SonarrEvent::GetDownloads.into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrListCommand::Episodes { series_id } => { let resp = self .network - .handle_network_event((SonarrEvent::GetEpisodes(Some(series_id))).into()) + .handle_network_event(SonarrEvent::GetEpisodes(Some(series_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrListCommand::EpisodeHistory { episode_id } => { let resp = self .network - .handle_network_event((SonarrEvent::GetEpisodeHistory(Some(episode_id))).into()) + .handle_network_event(SonarrEvent::GetEpisodeHistory(Some(episode_id)).into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrListCommand::History { events: items } => { let resp = self .network - .handle_network_event((SonarrEvent::GetHistory(Some(items))).into()) + .handle_network_event(SonarrEvent::GetHistory(Some(items)).into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrListCommand::Indexers => { let resp = self .network - .handle_network_event((SonarrEvent::GetIndexers).into()) + .handle_network_event(SonarrEvent::GetIndexers.into()) .await?; serde_json::to_string_pretty(&resp)? } @@ -165,35 +167,42 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, SonarrListCommand> for SonarrListCommandH SonarrListCommand::QualityProfiles => { let resp = self .network - .handle_network_event((SonarrEvent::GetQualityProfiles).into()) + .handle_network_event(SonarrEvent::GetQualityProfiles.into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrListCommand::QueuedEvents => { let resp = self .network - .handle_network_event((SonarrEvent::GetQueuedEvents).into()) + .handle_network_event(SonarrEvent::GetQueuedEvents.into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrListCommand::RootFolders => { let resp = self .network - .handle_network_event((SonarrEvent::GetRootFolders).into()) + .handle_network_event(SonarrEvent::GetRootFolders.into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrListCommand::Series => { let resp = self .network - .handle_network_event((SonarrEvent::ListSeries).into()) + .handle_network_event(SonarrEvent::ListSeries.into()) .await?; serde_json::to_string_pretty(&resp)? } SonarrListCommand::SeriesHistory { series_id } => { let resp = self .network - .handle_network_event((SonarrEvent::GetSeriesHistory(Some(series_id))).into()) + .handle_network_event(SonarrEvent::GetSeriesHistory(Some(series_id)).into()) + .await?; + serde_json::to_string_pretty(&resp)? + } + SonarrListCommand::Tags => { + let resp = self + .network + .handle_network_event(SonarrEvent::GetTags.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 b8ed298..41d8a1f 100644 --- a/src/cli/sonarr/list_command_handler_tests.rs +++ b/src/cli/sonarr/list_command_handler_tests.rs @@ -31,7 +31,8 @@ mod tests { "quality-profiles", "indexers", "queued-events", - "root-folders" + "root-folders", + "tags" )] subcommand: &str, ) { @@ -202,6 +203,7 @@ mod tests { #[case(SonarrListCommand::QueuedEvents, SonarrEvent::GetQueuedEvents)] #[case(SonarrListCommand::RootFolders, SonarrEvent::GetRootFolders)] #[case(SonarrListCommand::Series, SonarrEvent::ListSeries)] + #[case(SonarrListCommand::Tags, SonarrEvent::GetTags)] #[tokio::test] async fn test_handle_list_command( #[case] list_command: SonarrListCommand,