Finished off sonarr integration (Non anime) and refactored requests into a Http helper.

This commit is contained in:
2026-03-07 23:22:06 -07:00
parent 11c241b149
commit 324d48e7cf
6 changed files with 291 additions and 28 deletions

View File

@@ -1,3 +1,4 @@
using Jellyfin.Plugin.MediaCleaner.Helpers;
using Jellyfin.Plugin.MediaCleaner.Models;
using Microsoft.AspNetCore.Mvc;
using System;
@@ -37,20 +38,16 @@ public class RadarrController : Controller
_httpClient.DefaultRequestHeaders.Add("X-Api-Key", Configuration.RadarrAPIKey);
}
private async Task<ObjectResult> GetRadarrMovieInfo(MovieInfo movieInfo){
var uriBuilder = new UriBuilder($"{Configuration.RadarrAddress}/api/v3/movie");
var query = HttpUtility.ParseQueryString(uriBuilder.Query);
private async Task<ObjectResult> GetRadarrMovieInfo(MovieInfo movieInfo)
{
var responseBody = await HttpHelper.SendHttpRequestAsync(
_httpClient,
Configuration.RadarrAddress,
HttpMethod.Get,
$"/api/v3/movie?tmdbId={Uri.EscapeDataString(movieInfo.TmdbId ?? string.Empty)}&excludeLocalCovers=false"
).ConfigureAwait(false);
query["tmdbId"] = movieInfo.TmdbId;
query["excludeLocalCovers"] = "false";
uriBuilder.Query = query.ToString();
var response = await _httpClient.GetAsync(uriBuilder.Uri).ConfigureAwait(false);
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
var movies = JsonSerializer.Deserialize<List<RadarrMovie>>(responseBody);
var movies = JsonSerializer.Deserialize<List<RadarrMovie>>(responseBody.GetRawText());
var movie = movies?.FirstOrDefault();
if (movie == null)
@@ -79,19 +76,15 @@ public class RadarrController : Controller
RadarrMovie movie = (RadarrMovie)radarrMovieInfoResult.Value;
var uriBuilder = new UriBuilder($"{Configuration.RadarrAddress}/api/v3/movie/{movie.Id}");
var query = HttpUtility.ParseQueryString(uriBuilder.Query);
var responseBody = await HttpHelper.SendHttpRequestAsync(
_httpClient,
Configuration.RadarrAddress,
HttpMethod.Delete,
$"/api/v3/movie/{movie.Id}?deleteFiles=true&addImportExclusion=true"
).ConfigureAwait(false);
query["deleteFiles"] = "true";
query["addImportExclusion"] = "true";
uriBuilder.Query = query.ToString();
using var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);
var response = await _httpClient.SendAsync(request).ConfigureAwait(false);
response.EnsureSuccessStatusCode();
return Ok();
// Radarr typically returns an empty body on successful delete.
return Ok(responseBody);
}
catch (HttpRequestException e)
{