diff options
Diffstat (limited to 'MediaBrowser.Controller')
4 files changed, 96 insertions, 11 deletions
diff --git a/MediaBrowser.Controller/Dto/DtoBuilder.cs b/MediaBrowser.Controller/Dto/DtoBuilder.cs index 0c47013bf..84f9f8827 100644 --- a/MediaBrowser.Controller/Dto/DtoBuilder.cs +++ b/MediaBrowser.Controller/Dto/DtoBuilder.cs @@ -566,29 +566,33 @@ namespace MediaBrowser.Controller.Dto return; } - // Attach People by transforming them into BaseItemPerson (DTO) - dto.People = new BaseItemPerson[item.People.Count]; - // Ordering by person type to ensure actors and artists are at the front. // This is taking advantage of the fact that they both begin with A // This should be improved in the future - var entities = await Task.WhenAll(item.People.OrderBy(i => i.Type).Select(c => + var people = item.People.OrderBy(i => i.Type).ToList(); + + // Attach People by transforming them into BaseItemPerson (DTO) + dto.People = new BaseItemPerson[people.Count]; + + var entities = await Task.WhenAll(people.Select(p => p.Name).Distinct(StringComparer.OrdinalIgnoreCase).Select(c => Task.Run(async () => { try { - return await _libraryManager.GetPerson(c.Name).ConfigureAwait(false); + return await _libraryManager.GetPerson(c).ConfigureAwait(false); } catch (IOException ex) { - _logger.ErrorException("Error getting person {0}", ex, c.Name); + _logger.ErrorException("Error getting person {0}", ex, c); return null; } }) )).ConfigureAwait(false); + var dictionary = entities.ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase); + for (var i = 0; i < item.People.Count; i++) { var person = item.People[i]; @@ -600,15 +604,15 @@ namespace MediaBrowser.Controller.Dto Type = person.Type }; - var ibnObject = entities[i]; + Person entity; - if (ibnObject != null) + if (dictionary.TryGetValue(person.Name, out entity)) { - var primaryImagePath = ibnObject.PrimaryImagePath; + var primaryImagePath = entity.PrimaryImagePath; if (!string.IsNullOrEmpty(primaryImagePath)) { - baseItemPerson.PrimaryImageTag = Kernel.Instance.ImageManager.GetImageCacheTag(ibnObject, ImageType.Primary, primaryImagePath); + baseItemPerson.PrimaryImageTag = Kernel.Instance.ImageManager.GetImageCacheTag(entity, ImageType.Primary, primaryImagePath); } } diff --git a/MediaBrowser.Controller/Entities/BaseGame.cs b/MediaBrowser.Controller/Entities/BaseGame.cs new file mode 100644 index 000000000..5df1bfaf4 --- /dev/null +++ b/MediaBrowser.Controller/Entities/BaseGame.cs @@ -0,0 +1,30 @@ + +namespace MediaBrowser.Controller.Entities +{ + /// <summary> + /// Class BaseGame + /// </summary> + public class BaseGame : BaseItem + { + /// <summary> + /// Gets the type of the media. + /// </summary> + /// <value>The type of the media.</value> + public override string MediaType + { + get { return Model.Entities.MediaType.Game; } + } + + /// <summary> + /// Gets or sets the players supported. + /// </summary> + /// <value>The players supported.</value> + public int? PlayersSupported { get; set; } + + /// <summary> + /// Gets or sets the game system. + /// </summary> + /// <value>The game system.</value> + public string GameSystem { get; set; } + } +} diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 71245a3bb..90d3810d0 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -77,6 +77,7 @@ <Compile Include="Entities\Audio\Audio.cs" /> <Compile Include="Entities\Audio\MusicAlbum.cs" /> <Compile Include="Entities\Audio\MusicArtist.cs" /> + <Compile Include="Entities\BaseGame.cs" /> <Compile Include="Entities\BaseItem.cs" /> <Compile Include="Entities\BasePluginFolder.cs" /> <Compile Include="Entities\Folder.cs" /> diff --git a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs index 4cd9b20a1..465cfec92 100644 --- a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs +++ b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs @@ -160,6 +160,7 @@ namespace MediaBrowser.Controller.Providers private void PopulateBaseItemImages(BaseItem item) { var backdropFiles = new List<string>(); + var screenshotFiles = new List<string>(); // Primary Image var image = GetImage(item, "folder"); @@ -201,6 +202,22 @@ namespace MediaBrowser.Controller.Providers item.SetImage(ImageType.Thumb, image.Value.Path); } + // Thumbnail Image + image = GetImage(item, "box"); + + if (image.HasValue) + { + item.SetImage(ImageType.Box, image.Value.Path); + } + + // Thumbnail Image + image = GetImage(item, "menu"); + + if (image.HasValue) + { + item.SetImage(ImageType.Menu, image.Value.Path); + } + // Backdrop Image image = GetImage(item, "backdrop"); @@ -234,7 +251,40 @@ namespace MediaBrowser.Controller.Providers { item.BackdropImagePaths = backdropFiles; } - } + // Screenshot Image + image = GetImage(item, "screenshot"); + + if (image.HasValue) + { + screenshotFiles.Add(image.Value.Path); + } + + unfound = 0; + for (var i = 1; i <= 20; i++) + { + // Screenshot Image + image = GetImage(item, "screenshot" + i); + + if (image.HasValue) + { + screenshotFiles.Add(image.Value.Path); + } + else + { + unfound++; + + if (unfound >= 3) + { + break; + } + } + } + + if (screenshotFiles.Count > 0) + { + item.ScreenshotImagePaths = screenshotFiles; + } + } } } |
