aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-11-30 14:01:33 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-11-30 14:01:33 -0500
commitd7bdb744ca9d4b3955071dfe3c38ed631dbafbfd (patch)
treece244a359a57e7e53808e4f524b9e552cd67419a /MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs
parentf9ba260a19e12aff6562733023566943afb8cdd5 (diff)
add new image params
Diffstat (limited to 'MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs')
-rw-r--r--MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs111
1 files changed, 82 insertions, 29 deletions
diff --git a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs
index 438b5a4ce..d979e3d89 100644
--- a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs
+++ b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs
@@ -236,7 +236,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
foreach (var i in childrenResult.Items)
{
var childItem = i.Item;
- var displayStubType = GetDisplayStubType(childItem, serverItem.Item);
+ var displayStubType = i.StubType;
if (childItem.IsFolder || displayStubType.HasValue)
{
@@ -263,29 +263,6 @@ namespace MediaBrowser.Dlna.ContentDirectory
};
}
- private StubType? GetDisplayStubType(BaseItem item, BaseItem context)
- {
- if (context == null || context.IsFolder)
- {
- var movie = item as Movie;
- if (movie != null)
- {
- if (movie.LocalTrailerIds.Count > 0 ||
- movie.SpecialFeatureIds.Count > 0)
- {
- return StubType.Folder;
- }
-
- if (movie.People.Count > 0)
- {
- return StubType.Folder;
- }
- }
- }
-
- return null;
- }
-
private async Task<IEnumerable<KeyValuePair<string, string>>> HandleSearch(Headers sparams, User user, string deviceId)
{
var searchCriteria = new SearchCriteria(sparams.GetValueOrDefault("SearchCriteria", ""));
@@ -418,11 +395,36 @@ namespace MediaBrowser.Dlna.ContentDirectory
{
if (stubType.HasValue)
{
- var movie = item as Movie;
+ if (stubType.Value == StubType.People)
+ {
+ var items = item.People.Select(i =>
+ {
+ try
+ {
+ return _libraryManager.GetPerson(i.Name);
+ }
+ catch
+ {
+ return null;
+ }
+
+ }).Where(i => i != null).ToArray();
+
+ var result = new QueryResult<ServerItem>
+ {
+ Items = items.Select(i => new ServerItem { Item = i }).ToArray(),
+ TotalRecordCount = items.Length
+ };
- if (movie != null)
+ return ApplyPaging(result, startIndex, limit);
+ }
+ if (stubType.Value == StubType.Folder)
{
- return await GetMovieItems(movie).ConfigureAwait(false);
+ var movie = item as Movie;
+ if (movie != null)
+ {
+ return ApplyPaging(await GetMovieItems(movie).ConfigureAwait(false), startIndex, limit);
+ }
}
}
@@ -445,13 +447,52 @@ namespace MediaBrowser.Dlna.ContentDirectory
}).ConfigureAwait(false);
+ var serverItems = queryResult
+ .Items
+ .Select(i => new ServerItem
+ {
+ Item = i,
+ StubType = GetDisplayStubType(i, item)
+ })
+ .ToArray();
+
return new QueryResult<ServerItem>
{
TotalRecordCount = queryResult.TotalRecordCount,
- Items = queryResult.Items.Select(i => new ServerItem { Item = i, StubType = null }).ToArray()
+ Items = serverItems
};
}
+ private QueryResult<ServerItem> ApplyPaging(QueryResult<ServerItem> result, int? startIndex, int? limit)
+ {
+ result.Items = result.Items.Skip(startIndex ?? 0).Take(limit ?? int.MaxValue).ToArray();
+
+ return result;
+ }
+
+ private StubType? GetDisplayStubType(BaseItem item, BaseItem context)
+ {
+ if (context == null || context.IsFolder)
+ {
+ var movie = item as Movie;
+ if (movie != null)
+ {
+ if (movie.LocalTrailerIds.Count > 0 ||
+ movie.SpecialFeatureIds.Count > 0)
+ {
+ return StubType.Folder;
+ }
+
+ if (movie.People.Count > 0)
+ {
+ return StubType.Folder;
+ }
+ }
+ }
+
+ return null;
+ }
+
private Task<QueryResult<ServerItem>> GetMovieItems(Movie item)
{
var list = new List<BaseItem>();
@@ -464,6 +505,12 @@ namespace MediaBrowser.Dlna.ContentDirectory
var serverItems = list.Select(i => new ServerItem { Item = i, StubType = null })
.ToList();
+ serverItems.Add(new ServerItem
+ {
+ Item = item,
+ StubType = StubType.People
+ });
+
return Task.FromResult(new QueryResult<ServerItem>
{
Items = serverItems.ToArray(),
@@ -512,6 +559,11 @@ namespace MediaBrowser.Dlna.ContentDirectory
stubType = StubType.Folder;
id = id.Split(new[] { '_' }, 2)[1];
}
+ else if (id.StartsWith("people_", StringComparison.OrdinalIgnoreCase))
+ {
+ stubType = StubType.People;
+ id = id.Split(new[] { '_' }, 2)[1];
+ }
if (Guid.TryParse(id, out itemId))
{
@@ -538,6 +590,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
public enum StubType
{
- Folder = 0
+ Folder = 0,
+ People = 1
}
}