diff --git a/Jellyfin.Plugin.MediaCleaner/Controllers/RadarrController.cs b/Jellyfin.Plugin.MediaCleaner/Controllers/RadarrController.cs index e6d538b..cb2f8c8 100644 --- a/Jellyfin.Plugin.MediaCleaner/Controllers/RadarrController.cs +++ b/Jellyfin.Plugin.MediaCleaner/Controllers/RadarrController.cs @@ -37,6 +37,30 @@ public class RadarrController : Controller _httpClient.DefaultRequestHeaders.Add("X-Api-Key", Configuration.RadarrAPIKey); } + private async Task GetRadarrMovieInfo(MovieInfo movieInfo){ + var uriBuilder = new UriBuilder($"{Configuration.RadarrAddress}/api/v3/movie"); + var query = HttpUtility.ParseQueryString(uriBuilder.Query); + + 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>(responseBody); + var movie = movies?.FirstOrDefault(); + + if (movie == null) + { + return NotFound("Movie not found in Radarr library."); + } + + return Ok(movie); + } + [HttpPost("deleteMovieFromRadarr")] public async Task DeleteMovieFromRadarr([FromBody] MovieInfo movieInfo){ @@ -47,27 +71,27 @@ public class RadarrController : Controller try { - var uriBuilder = new UriBuilder($"{Configuration.RadarrAddress}/api/v3/movie"); - var query = HttpUtility.ParseQueryString(uriBuilder.Query); + var radarrMovieInfoResult = await GetRadarrMovieInfo(movieInfo).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>(responseBody); - var movie = movies?.FirstOrDefault(); - - if (movie == null) - { - return NotFound("Movie not found in Radarr library."); + if(radarrMovieInfoResult.StatusCode != StatusCodes.Status200OK || radarrMovieInfoResult.Value is not RadarrMovie){ + return radarrMovieInfoResult; } - return Ok(movie); + RadarrMovie movie = (RadarrMovie)radarrMovieInfoResult.Value; + + var uriBuilder = new UriBuilder($"{Configuration.RadarrAddress}/api/v3/movie/{movie.Id}"); + var query = HttpUtility.ParseQueryString(uriBuilder.Query); + + 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(); } catch (HttpRequestException e) { diff --git a/Jellyfin.Plugin.MediaCleaner/Pages/home.js b/Jellyfin.Plugin.MediaCleaner/Pages/home.js index 7d23683..8bca92b 100644 --- a/Jellyfin.Plugin.MediaCleaner/Pages/home.js +++ b/Jellyfin.Plugin.MediaCleaner/Pages/home.js @@ -1,4 +1,8 @@ document.addEventListener('pageshow', async () => { + await refreshFrontEnd(); +}); + +const refreshFrontEnd = async () => { await updateMediaCleanerState(); var moviesTitle = document.getElementById("moviesTitle"); @@ -11,7 +15,7 @@ document.addEventListener('pageshow', async () => { addClickHandlersToLinks(); addClickHandlersToDeleteButtons(); finishLoading(); -}); +} const getMediaCleanerSeriesInfo = async () => { const response = await fetch("/mediacleaner/state/getSeriesInfo"); @@ -187,7 +191,6 @@ const getCheckedMedia = (table) => { } const deleteMovieFromRadarrApi = async (movie) => { - console.log("Movie to post: ", movie); const response = await fetch("/radarr/deleteMovieFromRadarr", { method: "POST", headers: { @@ -199,23 +202,13 @@ const deleteMovieFromRadarrApi = async (movie) => { if(!response.ok){ throw new Error(`Response status: ${response.status}`) } - return console.log("Response: ", response.json()); } const deleteFromRadarr = async () => { // Get all movies with checked checkboxes const selectedMovies = getCheckedMedia(moviesTable); selectedMovies.forEach(async movie => await deleteMovieFromRadarrApi(movie)); - // Need to GET first for movieIds? - // /api/v3/movie?tmdbId=383275 - - // Likely need to use Movie DELETE endpoint (/api/v3/movie/{id}) - // Payload: - // { - // "id": id - // "deleteFiles": true - // } - console.log("Delete from Radarr!") + refreshFrontEnd(); } const deleteFromSonarr = () => { @@ -232,11 +225,14 @@ const deleteFromSonarr = () => { const finishLoading = () => { const loadingElement = document.getElementById("loading"); - const homepage = document.getElementById("homepage"); loadingElement.style.visibility = "hidden"; homepage.style.visibility = "visible"; - - console.log("Loading element: ", loadingElement); - console.log("Homepage element: ", homepage); +} + +const startLoading = () => { + const loadingElement = document.getElementById("loading"); + const homepage = document.getElementById("homepage"); + loadingElement.style.visibility = "visible"; + homepage.style.visibility = "hidden"; }