aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Dto/DtoBuilder.cs24
-rw-r--r--MediaBrowser.Controller/Entities/BaseGame.cs30
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj1
-rw-r--r--MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs52
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;
+ }
+ }
}
}