mirror of
https://github.com/Radarr/Radarr.git
synced 2024-11-05 10:32:35 +01:00
Merge pull request #1096 from geogolem/refactorFilteringExpression
refactor so that filteringExpressions are constructed in one place
This commit is contained in:
commit
3d9fd3ff25
@ -116,56 +116,9 @@ private PagingResource<MovieResource> GetMoviePaged(PagingResource<MovieResource
|
||||
{
|
||||
var pagingSpec = pagingResource.MapToPagingSpec<MovieResource, Core.Tv.Movie>();
|
||||
|
||||
if (pagingResource.FilterKey == "monitored" && pagingResource.FilterValue == "false")
|
||||
{
|
||||
pagingSpec.FilterExpression = v => v.Monitored == false;
|
||||
}
|
||||
else if (pagingResource.FilterKey == "monitored")
|
||||
{
|
||||
pagingSpec.FilterExpression = v => v.Monitored == true;
|
||||
}
|
||||
pagingSpec.FilterExpression = _moviesService.ConstructFilterExpression(pagingResource.FilterKey, pagingResource.FilterValue, pagingResource.FilterType);
|
||||
|
||||
if (pagingResource.FilterKey == "status")
|
||||
{
|
||||
switch (pagingResource.FilterValue)
|
||||
{
|
||||
case "released":
|
||||
pagingSpec.FilterExpression = v => v.Status == MovieStatusType.Released;
|
||||
break;
|
||||
case "inCinemas":
|
||||
pagingSpec.FilterExpression = v => v.Status == MovieStatusType.InCinemas;
|
||||
break;
|
||||
case "announced":
|
||||
pagingSpec.FilterExpression = v => v.Status == MovieStatusType.Announced;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (pagingResource.FilterKey == "downloaded")
|
||||
{
|
||||
pagingSpec.FilterExpression = v => v.MovieFileId == 0;
|
||||
}
|
||||
|
||||
if (pagingResource.FilterKey == "title")
|
||||
{
|
||||
if (pagingResource.FilterValue == string.Empty || pagingResource.FilterValue == null)
|
||||
{
|
||||
pagingSpec.FilterExpression = v => true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pagingResource.FilterType == "contains")
|
||||
{
|
||||
pagingSpec.FilterExpression = v => v.CleanTitle.Contains(pagingResource.FilterValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
pagingSpec.FilterExpression = v => v.CleanTitle == pagingResource.FilterValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ApplyToPage(_moviesService.Paged, pagingSpec, MovieResourceMapper.ToResource);
|
||||
return ApplyToPage(_moviesService.Paged, pagingSpec, MovieResourceMapper.ToResource);
|
||||
}
|
||||
|
||||
protected MovieResource MapToResource(Core.Tv.Movie movies)
|
||||
|
@ -41,7 +41,7 @@ public interface IMovieService
|
||||
bool MoviePathExists(string folder);
|
||||
void RemoveAddOptions(Movie movie);
|
||||
List<Movie> MoviesWithFiles(int movieId);
|
||||
System.Linq.Expressions.Expression<Func<Core.Tv.Movie, bool>> ConstructFilterExpression(string FilterKey, string FilterValue);
|
||||
System.Linq.Expressions.Expression<Func<Core.Tv.Movie, bool>> ConstructFilterExpression(string FilterKey, string FilterValue, string filterType = null);
|
||||
}
|
||||
|
||||
public class MovieService : IMovieService, IHandle<MovieFileAddedEvent>,
|
||||
@ -69,42 +69,65 @@ public MovieService(IMovieRepository movieRepository,
|
||||
}
|
||||
|
||||
|
||||
public System.Linq.Expressions.Expression<Func<Core.Tv.Movie, bool>> ConstructFilterExpression(string FilterKey, string FilterValue)
|
||||
public System.Linq.Expressions.Expression<Func<Core.Tv.Movie, bool>> ConstructFilterExpression(string FilterKey, string FilterValue, string FilterType = null)
|
||||
{
|
||||
if (FilterKey == "all" && FilterValue == "all")
|
||||
{
|
||||
return v => v.Monitored == true || v.Monitored == false;
|
||||
}
|
||||
else if (FilterKey == "monitored" && FilterValue == "false")
|
||||
//if (FilterKey == "all" && FilterValue == "all")
|
||||
//{
|
||||
// return v => v.Monitored == true || v.Monitored == false;
|
||||
//}
|
||||
if (FilterKey == "moviemonitored" && FilterValue == "false")
|
||||
{
|
||||
return v => v.Monitored == false;
|
||||
}
|
||||
else if (FilterKey == "monitored" && FilterValue == "true")
|
||||
else if (FilterKey == "moviemonitored" && FilterValue == "true")
|
||||
{
|
||||
return v => v.Monitored == true;
|
||||
}
|
||||
else if (FilterKey == "moviestatus" && FilterValue == "available")
|
||||
else if (FilterKey == "moviestatus")
|
||||
{
|
||||
//TODO: might need to handle PreDB here
|
||||
return v => v.Monitored == true &&
|
||||
switch (FilterValue)
|
||||
{
|
||||
case "released":
|
||||
return v => v.Status == MovieStatusType.Released;
|
||||
break;
|
||||
case "inCinemas":
|
||||
return v => v.Status == MovieStatusType.InCinemas;
|
||||
break;
|
||||
case "announced":
|
||||
return v => v.Status == MovieStatusType.Announced;
|
||||
break;
|
||||
case "available":
|
||||
return v => v.Monitored == true &&
|
||||
((v.MinimumAvailability == MovieStatusType.Released && v.Status >= MovieStatusType.Released) ||
|
||||
(v.MinimumAvailability == MovieStatusType.InCinemas && v.Status >= MovieStatusType.InCinemas) ||
|
||||
(v.MinimumAvailability == MovieStatusType.Announced && v.Status >= MovieStatusType.Announced) ||
|
||||
(v.MinimumAvailability == MovieStatusType.PreDB && v.Status >= MovieStatusType.Released));
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (FilterKey == "moviestatus" && FilterValue == "announced")
|
||||
else if (FilterKey == "moviedownloaded")
|
||||
{
|
||||
return v => v.Status == MovieStatusType.Announced;
|
||||
return v => v.MovieFileId == 0;
|
||||
}
|
||||
else if (FilterKey == "moviestatus" && FilterValue == "incinemas")
|
||||
else if (FilterKey == "title")
|
||||
{
|
||||
return v => v.Status == MovieStatusType.InCinemas;
|
||||
if (FilterValue == string.Empty || FilterValue == null)
|
||||
{
|
||||
return v => true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (FilterType == "contains")
|
||||
{
|
||||
return v => v.CleanTitle.Contains(FilterValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
return v => v.CleanTitle == FilterValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (FilterKey == "moviestatus" && FilterValue == "released")
|
||||
{
|
||||
return v => v.Status == MovieStatusType.Released;
|
||||
}
|
||||
return v => v.Monitored == true;
|
||||
return v => true;
|
||||
}
|
||||
|
||||
public Movie GetMovie(int movieId)
|
||||
|
@ -19,33 +19,33 @@ var filterModes = {
|
||||
null
|
||||
],
|
||||
'continuing' : [
|
||||
'status',
|
||||
'moviestatus',
|
||||
'continuing'
|
||||
],
|
||||
'ended' : [
|
||||
'status',
|
||||
'moviestatus',
|
||||
'ended'
|
||||
],
|
||||
'monitored' : [
|
||||
'monitored',
|
||||
'moviemonitored',
|
||||
true
|
||||
],
|
||||
'missing' : [
|
||||
'downloaded',
|
||||
'moviedownloaded',
|
||||
false
|
||||
],
|
||||
'released' : [
|
||||
"status",
|
||||
"moviestatus",
|
||||
"released",
|
||||
//function(model) { return model.getStatus() == "released"; }
|
||||
],
|
||||
'announced' : [
|
||||
"status",
|
||||
"moviestatus",
|
||||
"announced",
|
||||
//function(model) { return model.getStatus() == "announced"; }
|
||||
],
|
||||
'cinemas' : [
|
||||
"status",
|
||||
"moviestatus",
|
||||
"inCinemas",
|
||||
//function(model) { return model.getStatus() == "inCinemas"; }
|
||||
]
|
||||
|
@ -31,11 +31,11 @@ var Collection = PagableCollection.extend({
|
||||
|
||||
filterModes : {
|
||||
'monitored' : [
|
||||
'monitored',
|
||||
'moviemonitored',
|
||||
'true'
|
||||
],
|
||||
'unmonitored' : [
|
||||
'monitored',
|
||||
'moviemonitored',
|
||||
'false'
|
||||
],
|
||||
'announced' : [
|
||||
@ -44,7 +44,7 @@ var Collection = PagableCollection.extend({
|
||||
],
|
||||
'incinemas' : [
|
||||
'moviestatus',
|
||||
'incinemas'
|
||||
'inCinemas'
|
||||
],
|
||||
'released' : [
|
||||
'moviestatus',
|
||||
@ -77,4 +77,4 @@ var Collection = PagableCollection.extend({
|
||||
Collection = AsFilteredCollection.call(Collection);
|
||||
Collection = AsSortedCollection.call(Collection);
|
||||
|
||||
module.exports = AsPersistedStateCollection.call(Collection);
|
||||
module.exports = AsPersistedStateCollection.call(Collection);
|
||||
|
@ -30,11 +30,11 @@ var Collection = PagableCollection.extend({
|
||||
|
||||
filterModes : {
|
||||
'monitored' : [
|
||||
'monitored',
|
||||
'moviemonitored',
|
||||
'true'
|
||||
],
|
||||
'unmonitored' : [
|
||||
'monitored',
|
||||
'moviemonitored',
|
||||
'false'
|
||||
],
|
||||
'announced' : [
|
||||
@ -43,7 +43,7 @@ var Collection = PagableCollection.extend({
|
||||
],
|
||||
'incinemas' : [
|
||||
'moviestatus',
|
||||
'incinemas'
|
||||
'inCinemas'
|
||||
],
|
||||
'released' : [
|
||||
'moviestatus',
|
||||
|
Loading…
Reference in New Issue
Block a user