Finished Radarr integration
This commit is contained in:
@@ -37,16 +37,7 @@ public class RadarrController : Controller
|
|||||||
_httpClient.DefaultRequestHeaders.Add("X-Api-Key", Configuration.RadarrAPIKey);
|
_httpClient.DefaultRequestHeaders.Add("X-Api-Key", Configuration.RadarrAPIKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost("deleteMovieFromRadarr")]
|
private async Task<ObjectResult> GetRadarrMovieInfo(MovieInfo movieInfo){
|
||||||
public async Task<IActionResult> DeleteMovieFromRadarr([FromBody] MovieInfo movieInfo){
|
|
||||||
|
|
||||||
if (movieInfo == null || string.IsNullOrEmpty(movieInfo.TmdbId))
|
|
||||||
{
|
|
||||||
return BadRequest("Invalid movie information provided.");
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var uriBuilder = new UriBuilder($"{Configuration.RadarrAddress}/api/v3/movie");
|
var uriBuilder = new UriBuilder($"{Configuration.RadarrAddress}/api/v3/movie");
|
||||||
var query = HttpUtility.ParseQueryString(uriBuilder.Query);
|
var query = HttpUtility.ParseQueryString(uriBuilder.Query);
|
||||||
|
|
||||||
@@ -69,6 +60,39 @@ public class RadarrController : Controller
|
|||||||
|
|
||||||
return Ok(movie);
|
return Ok(movie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPost("deleteMovieFromRadarr")]
|
||||||
|
public async Task<IActionResult> DeleteMovieFromRadarr([FromBody] MovieInfo movieInfo){
|
||||||
|
|
||||||
|
if (movieInfo == null || string.IsNullOrEmpty(movieInfo.TmdbId))
|
||||||
|
{
|
||||||
|
return BadRequest("Invalid movie information provided.");
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var radarrMovieInfoResult = await GetRadarrMovieInfo(movieInfo).ConfigureAwait(false);
|
||||||
|
|
||||||
|
if(radarrMovieInfoResult.StatusCode != StatusCodes.Status200OK || radarrMovieInfoResult.Value is not RadarrMovie){
|
||||||
|
return radarrMovieInfoResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
catch (HttpRequestException e)
|
||||||
{
|
{
|
||||||
return StatusCode(StatusCodes.Status500InternalServerError, $"An unexpected error occurred. {e.Message}");
|
return StatusCode(StatusCodes.Status500InternalServerError, $"An unexpected error occurred. {e.Message}");
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
document.addEventListener('pageshow', async () => {
|
document.addEventListener('pageshow', async () => {
|
||||||
|
await refreshFrontEnd();
|
||||||
|
});
|
||||||
|
|
||||||
|
const refreshFrontEnd = async () => {
|
||||||
await updateMediaCleanerState();
|
await updateMediaCleanerState();
|
||||||
|
|
||||||
var moviesTitle = document.getElementById("moviesTitle");
|
var moviesTitle = document.getElementById("moviesTitle");
|
||||||
@@ -11,7 +15,7 @@ document.addEventListener('pageshow', async () => {
|
|||||||
addClickHandlersToLinks();
|
addClickHandlersToLinks();
|
||||||
addClickHandlersToDeleteButtons();
|
addClickHandlersToDeleteButtons();
|
||||||
finishLoading();
|
finishLoading();
|
||||||
});
|
}
|
||||||
|
|
||||||
const getMediaCleanerSeriesInfo = async () => {
|
const getMediaCleanerSeriesInfo = async () => {
|
||||||
const response = await fetch("/mediacleaner/state/getSeriesInfo");
|
const response = await fetch("/mediacleaner/state/getSeriesInfo");
|
||||||
@@ -187,7 +191,6 @@ const getCheckedMedia = (table) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const deleteMovieFromRadarrApi = async (movie) => {
|
const deleteMovieFromRadarrApi = async (movie) => {
|
||||||
console.log("Movie to post: ", movie);
|
|
||||||
const response = await fetch("/radarr/deleteMovieFromRadarr", {
|
const response = await fetch("/radarr/deleteMovieFromRadarr", {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: {
|
headers: {
|
||||||
@@ -199,23 +202,13 @@ const deleteMovieFromRadarrApi = async (movie) => {
|
|||||||
if(!response.ok){
|
if(!response.ok){
|
||||||
throw new Error(`Response status: ${response.status}`)
|
throw new Error(`Response status: ${response.status}`)
|
||||||
}
|
}
|
||||||
return console.log("Response: ", response.json());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const deleteFromRadarr = async () => {
|
const deleteFromRadarr = async () => {
|
||||||
// Get all movies with checked checkboxes
|
// Get all movies with checked checkboxes
|
||||||
const selectedMovies = getCheckedMedia(moviesTable);
|
const selectedMovies = getCheckedMedia(moviesTable);
|
||||||
selectedMovies.forEach(async movie => await deleteMovieFromRadarrApi(movie));
|
selectedMovies.forEach(async movie => await deleteMovieFromRadarrApi(movie));
|
||||||
// Need to GET first for movieIds?
|
refreshFrontEnd();
|
||||||
// /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!")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const deleteFromSonarr = () => {
|
const deleteFromSonarr = () => {
|
||||||
@@ -232,11 +225,14 @@ const deleteFromSonarr = () => {
|
|||||||
|
|
||||||
const finishLoading = () => {
|
const finishLoading = () => {
|
||||||
const loadingElement = document.getElementById("loading");
|
const loadingElement = document.getElementById("loading");
|
||||||
|
|
||||||
const homepage = document.getElementById("homepage");
|
const homepage = document.getElementById("homepage");
|
||||||
loadingElement.style.visibility = "hidden";
|
loadingElement.style.visibility = "hidden";
|
||||||
homepage.style.visibility = "visible";
|
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";
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user