New: Added new API endpoints to get missing and wanted movies

This commit is contained in:
nickern 2024-04-26 23:36:59 +02:00
parent 3db78079f3
commit 178525d8d7
5 changed files with 93 additions and 0 deletions

View File

@ -31,6 +31,7 @@ namespace NzbDrone.Core.Movies
List<int> GetRecommendations();
bool ExistsByMetadataId(int metadataId);
HashSet<int> AllMovieWithCollectionsTmdbIds();
List<Movie> FindMissing();
}
public class MovieRepository : BasicRepository<Movie>, IMovieRepository
@ -378,5 +379,10 @@ namespace NzbDrone.Core.Movies
return conn.Query<int>("SELECT \"TmdbId\" FROM \"MovieMetadata\" JOIN \"Movies\" ON (\"Movies\".\"MovieMetadataId\" = \"MovieMetadata\".\"Id\") WHERE \"CollectionTmdbId\" > 0").ToHashSet();
}
}
public List<Movie> FindMissing()
{
return Query(x => x.Monitored == true && x.MovieFileId == 0);
}
}
}

View File

@ -47,6 +47,8 @@ namespace NzbDrone.Core.Movies
void RemoveAddOptions(Movie movie);
bool ExistsByMetadataId(int metadataId);
HashSet<int> AllMovieWithCollectionsTmdbIds();
List<Movie> GetMissingMovies();
List<Movie> GetWantedMovies();
}
public class MovieService : IMovieService, IHandle<MovieFileAddedEvent>,
@ -412,5 +414,15 @@ namespace NzbDrone.Core.Movies
UpdateMovie(movie);
}
}
public List<Movie> GetMissingMovies()
{
return _movieRepository.FindMissing();
}
public List<Movie> GetWantedMovies()
{
return _movieRepository.FindMissing().Where(m => m.IsAvailable() == true).ToList();
}
}
}

View File

@ -0,0 +1,23 @@
using Microsoft.AspNetCore.Mvc;
using NzbDrone.Core.Movies;
using Radarr.Http;
namespace Radarr.Api.V3.Movies
{
[V3ApiController("missing")]
public class MissingController : Controller
{
private readonly IMovieService _movieService;
public MissingController(IMovieService movieService)
{
_movieService = movieService;
}
[HttpGet]
public MissingWantedResource GetMissing()
{
return _movieService.GetMissingMovies().ToResource();
}
}
}

View File

@ -0,0 +1,29 @@
using System.Collections.Generic;
using NzbDrone.Core.Movies;
using Radarr.Http.REST;
namespace Radarr.Api.V3.Movies
{
public class MissingWantedResource : RestResource
{
public int Total { get; set; }
public List<MovieResource> Movies { get; set; }
}
public static class MissingResourceMapper
{
public static MissingWantedResource ToResource(this List<Movie> model)
{
if (model == null)
{
return null;
}
return new MissingWantedResource
{
Total = model.Count,
Movies = model.ToResource(0)
};
}
}
}

View File

@ -0,0 +1,23 @@
using Microsoft.AspNetCore.Mvc;
using NzbDrone.Core.Movies;
using Radarr.Http;
namespace Radarr.Api.V3.Movies
{
[V3ApiController("wanted")]
public class WantedController : Controller
{
private readonly IMovieService _movieService;
public WantedController(IMovieService movieService)
{
_movieService = movieService;
}
[HttpGet]
public MissingWantedResource GetWanted()
{
return _movieService.GetWantedMovies().ToResource();
}
}
}