aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-11-20 16:08:12 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-11-20 16:08:12 -0500
commit71514af96be684dcbf432c5aca37712bbd773740 (patch)
tree9773616e9f3c34a56590a5525960214cf7cc1ca7
parentc3530e5e3255d2c2e8ec5fa4bc4635a21904235e (diff)
render channels page
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs55
-rw-r--r--MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs15
2 files changed, 48 insertions, 22 deletions
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs
index 4239869a5..3936014c5 100644
--- a/MediaBrowser.Api/UserLibrary/ItemsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs
@@ -206,7 +206,7 @@ namespace MediaBrowser.Api.UserLibrary
[ApiMember(Name = "AiredDuringSeason", Description = "Gets all episodes that aired during a season, including specials.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
public int? AiredDuringSeason { get; set; }
-
+
[ApiMember(Name = "MinPremiereDate", Description = "Optional. The minimum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
public string MinPremiereDate { get; set; }
@@ -1012,21 +1012,7 @@ namespace MediaBrowser.Api.UserLibrary
if (request.AiredDuringSeason.HasValue)
{
- var val = request.AiredDuringSeason.Value;
-
- items = items.Where(i =>
- {
- var episode = i as Episode;
-
- if (episode != null)
- {
- var seasonNumber = episode.AirsAfterSeasonNumber ?? episode.AirsBeforeSeasonNumber ?? episode.ParentIndexNumber;
-
- return episode.PremiereDate.HasValue && seasonNumber.HasValue && seasonNumber.Value == val;
- }
-
- return false;
- });
+ items = FilterByAiredDuringSeason(items, request.AiredDuringSeason.Value);
}
if (!string.IsNullOrEmpty(request.MinPremiereDate))
@@ -1046,6 +1032,43 @@ namespace MediaBrowser.Api.UserLibrary
return items;
}
+ private IEnumerable<BaseItem> FilterByAiredDuringSeason(IEnumerable<BaseItem> items, int seasonNumber)
+ {
+ var episodes = items.OfType<Episode>().ToList();
+
+ // We can only enforce the air date requirement if the episodes have air dates
+ var enforceAirDate = episodes.Any(i => i.PremiereDate.HasValue);
+
+ return episodes.Where(i =>
+ {
+ var episode = i;
+
+ if (episode != null)
+ {
+ var currentSeasonNumber = episode.AirsAfterSeasonNumber ?? episode.AirsBeforeSeasonNumber ?? episode.ParentIndexNumber;
+
+ // If this produced nothing, try and get it from the parent folder
+ if (!currentSeasonNumber.HasValue)
+ {
+ var season = episode.Parent as Season;
+ if (season != null)
+ {
+ currentSeasonNumber = season.IndexNumber;
+ }
+ }
+
+ if (enforceAirDate && !episode.PremiereDate.HasValue)
+ {
+ return false;
+ }
+
+ return currentSeasonNumber.HasValue && currentSeasonNumber.Value == seasonNumber;
+ }
+
+ return false;
+ });
+ }
+
/// <summary>
/// Determines whether the specified item has image.
/// </summary>
diff --git a/MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs b/MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs
index cec9743ba..23334aa41 100644
--- a/MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs
+++ b/MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs
@@ -1,8 +1,8 @@
-using System;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Sorting;
using MediaBrowser.Model.Querying;
+using System;
namespace MediaBrowser.Server.Implementations.Sorting
{
@@ -16,11 +16,14 @@ namespace MediaBrowser.Server.Implementations.Sorting
/// <returns>System.Int32.</returns>
public int Compare(BaseItem x, BaseItem y)
{
- var val = DateTime.Compare(x.PremiereDate ?? DateTime.MinValue, y.PremiereDate ?? DateTime.MinValue);
-
- if (val != 0)
+ if (x.PremiereDate.HasValue && y.PremiereDate.HasValue)
{
- return val;
+ var val = DateTime.Compare(x.PremiereDate.Value, y.PremiereDate.Value);
+
+ if (val != 0)
+ {
+ return val;
+ }
}
var episode1 = x as Episode;