aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2017-03-21 13:31:40 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2017-03-21 13:31:40 -0400
commit2bac4f85ad1dfe23710554ceee5ffea093092157 (patch)
tree6f7f9193d977ffa760bd6e15f16bb4869d2ff25e
parentf1b1458ee8b94a5c75ed009581f5e9cb22ba70b7 (diff)
improve next up performance
-rw-r--r--Emby.Server.Implementations/TV/TVSeriesManager.cs29
-rw-r--r--MediaBrowser.Api/TvShowsService.cs9
-rw-r--r--MediaBrowser.Model/Querying/NextUpQuery.cs3
3 files changed, 28 insertions, 13 deletions
diff --git a/Emby.Server.Implementations/TV/TVSeriesManager.cs b/Emby.Server.Implementations/TV/TVSeriesManager.cs
index 9dfaa102a..b5e64bc23 100644
--- a/Emby.Server.Implementations/TV/TVSeriesManager.cs
+++ b/Emby.Server.Implementations/TV/TVSeriesManager.cs
@@ -77,7 +77,7 @@ namespace Emby.Server.Implementations.TV
// Avoid implicitly captured closure
var episodes = GetNextUpEpisodes(request, user, items);
- return GetResult(episodes, null, request);
+ return GetResult(episodes, request);
}
public QueryResult<BaseItem> GetNextUp(NextUpQuery request, List<Folder> parentsFolders)
@@ -128,7 +128,7 @@ namespace Emby.Server.Implementations.TV
// Avoid implicitly captured closure
var episodes = GetNextUpEpisodes(request, user, items);
- return GetResult(episodes, null, request);
+ return GetResult(episodes, request);
}
public IEnumerable<Episode> GetNextUpEpisodes(NextUpQuery request, User user, IEnumerable<string> seriesKeys)
@@ -163,8 +163,7 @@ namespace Emby.Server.Implementations.TV
return false;
})
.Select(i => i.Item2())
- .Where(i => i != null)
- .Take(request.Limit ?? int.MaxValue);
+ .Where(i => i != null);
}
private string GetUniqueSeriesKey(BaseItem series)
@@ -232,24 +231,30 @@ namespace Emby.Server.Implementations.TV
return new Tuple<DateTime, Func<Episode>>(DateTime.MinValue, getEpisode);
}
- private QueryResult<BaseItem> GetResult(IEnumerable<BaseItem> items, int? totalRecordLimit, NextUpQuery query)
+ private QueryResult<BaseItem> GetResult(IEnumerable<BaseItem> items, NextUpQuery query)
{
- var itemsArray = totalRecordLimit.HasValue ? items.Take(totalRecordLimit.Value).ToArray() : items.ToArray();
- var totalCount = itemsArray.Length;
+ int totalCount = 0;
- if (query.Limit.HasValue)
+ if (query.EnableTotalRecordCount)
{
- itemsArray = itemsArray.Skip(query.StartIndex ?? 0).Take(query.Limit.Value).ToArray();
+ var list = items.ToList();
+ totalCount = list.Count;
+ items = list;
}
- else if (query.StartIndex.HasValue)
+
+ if (query.StartIndex.HasValue)
+ {
+ items = items.Skip(query.StartIndex.Value);
+ }
+ if (query.Limit.HasValue)
{
- itemsArray = itemsArray.Skip(query.StartIndex.Value).ToArray();
+ items = items.Take(query.Limit.Value);
}
return new QueryResult<BaseItem>
{
TotalRecordCount = totalCount,
- Items = itemsArray
+ Items = items.ToArray()
};
}
}
diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs
index 71c5e732a..43fe74d5f 100644
--- a/MediaBrowser.Api/TvShowsService.cs
+++ b/MediaBrowser.Api/TvShowsService.cs
@@ -72,6 +72,12 @@ namespace MediaBrowser.Api
[ApiMember(Name = "EnableUserData", Description = "Optional, include user data", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")]
public bool? EnableUserData { get; set; }
+ public bool EnableTotalRecordCount { get; set; }
+
+ public GetNextUpEpisodes()
+ {
+ EnableTotalRecordCount = true;
+ }
}
[Route("/Shows/Upcoming", "GET", Summary = "Gets a list of upcoming episodes")]
@@ -376,7 +382,8 @@ namespace MediaBrowser.Api
ParentId = request.ParentId,
SeriesId = request.SeriesId,
StartIndex = request.StartIndex,
- UserId = request.UserId
+ UserId = request.UserId,
+ EnableTotalRecordCount = request.EnableTotalRecordCount
});
var user = _userManager.GetUserById(request.UserId);
diff --git a/MediaBrowser.Model/Querying/NextUpQuery.cs b/MediaBrowser.Model/Querying/NextUpQuery.cs
index b5f50bde0..e3b0d578a 100644
--- a/MediaBrowser.Model/Querying/NextUpQuery.cs
+++ b/MediaBrowser.Model/Querying/NextUpQuery.cs
@@ -55,9 +55,12 @@ namespace MediaBrowser.Model.Querying
/// <value>The enable image types.</value>
public ImageType[] EnableImageTypes { get; set; }
+ public bool EnableTotalRecordCount { get; set; }
+
public NextUpQuery()
{
EnableImageTypes = new ImageType[] {};
+ EnableTotalRecordCount = true;
}
}
}