aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs160
1 files changed, 0 insertions, 160 deletions
diff --git a/MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs b/MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs
deleted file mode 100644
index 91abbe34c..000000000
--- a/MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Sorting;
-using MediaBrowser.Model.Querying;
-using System;
-
-namespace MediaBrowser.Server.Implementations.Sorting
-{
- class AiredEpisodeOrderComparer : IBaseItemComparer
- {
- /// <summary>
- /// Compares the specified x.
- /// </summary>
- /// <param name="x">The x.</param>
- /// <param name="y">The y.</param>
- /// <returns>System.Int32.</returns>
- public int Compare(BaseItem x, BaseItem y)
- {
- if (x.PremiereDate.HasValue && y.PremiereDate.HasValue)
- {
- var val = DateTime.Compare(x.PremiereDate.Value, y.PremiereDate.Value);
-
- if (val != 0)
- {
- //return val;
- }
- }
-
- var episode1 = x as Episode;
- var episode2 = y as Episode;
-
- if (episode1 == null)
- {
- if (episode2 == null)
- {
- return 0;
- }
-
- return 1;
- }
-
- if (episode2 == null)
- {
- return -1;
- }
-
- return Compare(episode1, episode2);
- }
-
- private int Compare(Episode x, Episode y)
- {
- var isXSpecial = (x.ParentIndexNumber ?? -1) == 0;
- var isYSpecial = (y.ParentIndexNumber ?? -1) == 0;
-
- if (isXSpecial && isYSpecial)
- {
- return CompareSpecials(x, y);
- }
-
- if (!isXSpecial && !isYSpecial)
- {
- return CompareEpisodes(x, y);
- }
-
- if (!isXSpecial)
- {
- return CompareEpisodeToSpecial(x, y);
- }
-
- return CompareEpisodeToSpecial(y, x) * -1;
- }
-
- private int CompareEpisodeToSpecial(Episode x, Episode y)
- {
- // http://thetvdb.com/wiki/index.php?title=Special_Episodes
-
- var xSeason = x.ParentIndexNumber ?? -1;
- var ySeason = y.AirsAfterSeasonNumber ?? y.AirsBeforeSeasonNumber ?? -1;
-
- if (xSeason != ySeason)
- {
- return xSeason.CompareTo(ySeason);
- }
-
- // Special comes after episode
- if (y.AirsAfterSeasonNumber.HasValue)
- {
- return -1;
- }
-
- var yEpisode = y.AirsBeforeEpisodeNumber;
-
- // Special comes before the season
- if (!yEpisode.HasValue)
- {
- return 1;
- }
-
- // Compare episode number
- var xEpisode = x.IndexNumber;
-
- if (!xEpisode.HasValue)
- {
- // Can't really compare if this happens
- return 0;
- }
-
- // Special comes before episode
- if (xEpisode.Value == yEpisode.Value)
- {
- return 1;
- }
-
- return xEpisode.Value.CompareTo(yEpisode.Value);
- }
-
- private int CompareSpecials(Episode x, Episode y)
- {
- return GetSpecialCompareValue(x).CompareTo(GetSpecialCompareValue(y));
- }
-
- private int GetSpecialCompareValue(Episode item)
- {
- // First sort by season number
- // Since there are three sort orders, pad with 9 digits (3 for each, figure 1000 episode buffer should be enough)
- var val = (item.AirsAfterSeasonNumber ?? item.AirsBeforeSeasonNumber ?? 0) * 1000000000;
-
- // Second sort order is if it airs after the season
- if (item.AirsAfterSeasonNumber.HasValue)
- {
- val += 1000000;
- }
-
- // Third level is the episode number
- val += (item.AirsBeforeEpisodeNumber ?? 0) * 1000;
-
- // Finally, if that's still the same, last resort is the special number itself
- val += item.IndexNumber ?? 0;
-
- return val;
- }
-
- private int CompareEpisodes(Episode x, Episode y)
- {
- var xValue = (x.ParentIndexNumber ?? -1) * 1000 + (x.IndexNumber ?? -1);
- var yValue = (y.ParentIndexNumber ?? -1) * 1000 + (y.IndexNumber ?? -1);
-
- return xValue.CompareTo(yValue);
- }
-
- /// <summary>
- /// Gets the name.
- /// </summary>
- /// <value>The name.</value>
- public string Name
- {
- get { return ItemSortBy.AiredEpisodeOrder; }
- }
- }
-}