aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2016-03-20 16:10:22 -0400
committerLuke <luke.pulverenti@gmail.com>2016-03-20 16:10:22 -0400
commitc22cf8db0e2ef23addae123e80b8ab83add4409d (patch)
treecb934d555f22003a9234cf83f1f1366ae3617271 /MediaBrowser.Controller
parentefed1b0cf6934bd6e70784669e2eef112d7babec (diff)
parent1a00ac0bbe51f8777bcec0ee9ae12f96468a542b (diff)
Merge pull request #1568 from MediaBrowser/dev
Dev
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs37
-rw-r--r--MediaBrowser.Controller/Entities/InternalItemsQuery.cs10
-rw-r--r--MediaBrowser.Controller/Entities/UserViewBuilder.cs43
3 files changed, 70 insertions, 20 deletions
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index efb784153..faa5f7dc5 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -1094,13 +1094,6 @@ namespace MediaBrowser.Controller.Entities
return true;
}
- // Apply year filter
- if (query.Years.Length > 0)
- {
- Logger.Debug("Query requires post-filtering due to Years");
- return true;
- }
-
// Apply official rating filter
if (query.OfficialRatings.Length > 0)
{
@@ -1127,24 +1120,12 @@ namespace MediaBrowser.Controller.Entities
return true;
}
- if (query.MinCommunityRating.HasValue)
- {
- Logger.Debug("Query requires post-filtering due to MinCommunityRating");
- return true;
- }
-
if (query.MinIndexNumber.HasValue)
{
Logger.Debug("Query requires post-filtering due to MinIndexNumber");
return true;
}
- if (query.Years.Length > 0)
- {
- Logger.Debug("Query requires post-filtering due to Years");
- return true;
- }
-
if (query.OfficialRatings.Length > 0)
{
Logger.Debug("Query requires post-filtering due to OfficialRatings");
@@ -1205,6 +1186,24 @@ namespace MediaBrowser.Controller.Entities
return true;
}
+ if (query.AirDays.Length > 0)
+ {
+ Logger.Debug("Query requires post-filtering due to AirDays");
+ return true;
+ }
+
+ if (query.SeriesStatuses.Length > 0)
+ {
+ Logger.Debug("Query requires post-filtering due to SeriesStatuses");
+ return true;
+ }
+
+ if (query.AiredDuringSeason.HasValue)
+ {
+ Logger.Debug("Query requires post-filtering due to AiredDuringSeason");
+ return true;
+ }
+
return false;
}
diff --git a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs
index 05031691c..2f98ac70d 100644
--- a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs
+++ b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs
@@ -97,23 +97,25 @@ namespace MediaBrowser.Controller.Entities
public int? MinPlayers { get; set; }
public int? MaxPlayers { get; set; }
public int? MinIndexNumber { get; set; }
+ public int? AiredDuringSeason { get; set; }
public double? MinCriticRating { get; set; }
public double? MinCommunityRating { get; set; }
public string[] ChannelIds { get; set; }
internal List<Guid> ItemIdsFromPersonFilters { get; set; }
+ public int? ParentIndexNumber { get; set; }
public int? MaxParentalRating { get; set; }
public bool? IsCurrentSchema { get; set; }
public bool? HasDeadParentId { get; set; }
public bool? IsOffline { get; set; }
- public LocationType? LocationType { get; set; }
public Guid? ParentId { get; set; }
public string[] AncestorIds { get; set; }
public string[] TopParentIds { get; set; }
+ public LocationType[] LocationTypes { get; set; }
public LocationType[] ExcludeLocationTypes { get; set; }
public string[] PresetViews { get; set; }
public SourceType[] SourceTypes { get; set; }
@@ -121,6 +123,9 @@ namespace MediaBrowser.Controller.Entities
public TrailerType[] TrailerTypes { get; set; }
public TrailerType[] ExcludeTrailerTypes { get; set; }
+ public DayOfWeek[] AirDays { get; set; }
+ public SeriesStatus[] SeriesStatuses { get; set; }
+
public InternalItemsQuery()
{
BlockUnratedItems = new UnratedItem[] { };
@@ -144,12 +149,15 @@ namespace MediaBrowser.Controller.Entities
AncestorIds = new string[] { };
TopParentIds = new string[] { };
ExcludeTags = new string[] { };
+ LocationTypes = new LocationType[] { };
ExcludeLocationTypes = new LocationType[] { };
PresetViews = new string[] { };
SourceTypes = new SourceType[] { };
ExcludeSourceTypes = new SourceType[] { };
TrailerTypes = new TrailerType[] { };
ExcludeTrailerTypes = new TrailerType[] { };
+ AirDays = new DayOfWeek[] { };
+ SeriesStatuses = new SeriesStatus[] { };
}
public InternalItemsQuery(User user)
diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs
index 4439b9c6d..645e6e37d 100644
--- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs
+++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs
@@ -1709,6 +1709,49 @@ namespace MediaBrowser.Controller.Entities
}
}
+ if (query.ParentIndexNumber.HasValue)
+ {
+ var filterValue = query.ParentIndexNumber.Value;
+
+ if (item.ParentIndexNumber.HasValue && item.ParentIndexNumber.Value != filterValue)
+ {
+ return false;
+ }
+ }
+
+ if (query.AirDays.Length > 0)
+ {
+ var ok = new[] { item }.OfType<Series>().Any(p => p.AirDays != null && query.AirDays.Any(d => p.AirDays.Contains(d)));
+ if (!ok)
+ {
+ return false;
+ }
+ }
+
+ if (query.SeriesStatuses.Length > 0)
+ {
+ var ok = new[] { item }.OfType<Series>().Any(p => p.Status.HasValue && query.SeriesStatuses.Contains(p.Status.Value));
+ if (!ok)
+ {
+ return false;
+ }
+ }
+
+ if (query.AiredDuringSeason.HasValue)
+ {
+ var episode = item as Episode;
+
+ if (episode == null)
+ {
+ return false;
+ }
+
+ if (!Series.FilterEpisodesBySeason(new[] { episode }, query.AiredDuringSeason.Value, true).Any())
+ {
+ return false;
+ }
+ }
+
return true;
}