aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Api/BaseApiService.cs13
-rw-r--r--MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs2
-rw-r--r--MediaBrowser.Api/GamesService.cs73
-rw-r--r--MediaBrowser.Api/LibraryService.cs14
-rw-r--r--MediaBrowser.Controller/Entities/GameSystem.cs23
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj1
-rw-r--r--MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj3
-rw-r--r--MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj3
-rw-r--r--MediaBrowser.Model/ApiClient/IApiClient.cs15
-rw-r--r--MediaBrowser.Model/Dto/GameSystemSummary.cs36
-rw-r--r--MediaBrowser.Model/MediaBrowser.Model.csproj1
-rw-r--r--Nuget/MediaBrowser.Common.Internal.nuspec4
-rw-r--r--Nuget/MediaBrowser.Common.nuspec2
-rw-r--r--Nuget/MediaBrowser.Server.Core.nuspec4
14 files changed, 173 insertions, 21 deletions
diff --git a/MediaBrowser.Api/BaseApiService.cs b/MediaBrowser.Api/BaseApiService.cs
index e969d79ff8..b3f5027e0a 100644
--- a/MediaBrowser.Api/BaseApiService.cs
+++ b/MediaBrowser.Api/BaseApiService.cs
@@ -9,7 +9,6 @@ using ServiceStack.ServiceHost;
using System;
using System.Collections.Generic;
using System.Linq;
-using System.Threading.Tasks;
namespace MediaBrowser.Api
{
@@ -125,6 +124,18 @@ namespace MediaBrowser.Api
return libraryManager.GetPerson(DeSlugPersonName(name, libraryManager));
}
+ protected IEnumerable<BaseItem> GetAllLibraryItems(Guid? userId, IUserManager userManager, ILibraryManager libraryManager)
+ {
+ if (userId.HasValue)
+ {
+ var user = userManager.GetUserById(userId.Value);
+
+ return userManager.GetUserById(userId.Value).RootFolder.GetRecursiveChildren(user);
+ }
+
+ return libraryManager.RootFolder.RecursiveChildren;
+ }
+
/// <summary>
/// Deslugs an artist name by finding the correct entry in the library
/// </summary>
diff --git a/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs b/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs
index eb4ddc9cda..c806273408 100644
--- a/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs
+++ b/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs
@@ -124,7 +124,7 @@ namespace MediaBrowser.Api.DefaultTheme
var user = _userManager.GetUserById(request.UserId);
var items = user.RootFolder.GetRecursiveChildren(user)
- .Where(i => i is Game || string.Equals(i.GetType().Name, "GamePlatform", StringComparison.OrdinalIgnoreCase))
+ .Where(i => i is Game || i is GameSystem)
.ToList();
var itemsWithBackdrops = FilterItemsForBackdropDisplay(items.Where(i => i.BackdropImagePaths.Count > 0)).ToList();
diff --git a/MediaBrowser.Api/GamesService.cs b/MediaBrowser.Api/GamesService.cs
index ae328f70f3..7f0521b535 100644
--- a/MediaBrowser.Api/GamesService.cs
+++ b/MediaBrowser.Api/GamesService.cs
@@ -2,7 +2,12 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Persistence;
+using MediaBrowser.Model.Dto;
using ServiceStack.ServiceHost;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
namespace MediaBrowser.Api
{
@@ -16,6 +21,21 @@ namespace MediaBrowser.Api
}
/// <summary>
+ /// Class GetGameSystemSummaries
+ /// </summary>
+ [Route("/Games/SystemSummaries", "GET")]
+ [Api(Description = "Finds games similar to a given game.")]
+ public class GetGameSystemSummaries : IReturn<List<GameSystemSummary>>
+ {
+ /// <summary>
+ /// Gets or sets the user id.
+ /// </summary>
+ /// <value>The user id.</value>
+ [ApiMember(Name = "UserId", Description = "Optional. Filter by user id", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
+ public Guid? UserId { get; set; }
+ }
+
+ /// <summary>
/// Class GamesService
/// </summary>
public class GamesService : BaseApiService
@@ -34,7 +54,13 @@ namespace MediaBrowser.Api
/// </summary>
private readonly ILibraryManager _libraryManager;
+ /// <summary>
+ /// The _item repo
+ /// </summary>
private readonly IItemRepository _itemRepo;
+ /// <summary>
+ /// The _dto service
+ /// </summary>
private readonly IDtoService _dtoService;
/// <summary>
@@ -44,6 +70,7 @@ namespace MediaBrowser.Api
/// <param name="userDataRepository">The user data repository.</param>
/// <param name="libraryManager">The library manager.</param>
/// <param name="itemRepo">The item repo.</param>
+ /// <param name="dtoService">The dto service.</param>
public GamesService(IUserManager userManager, IUserDataRepository userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo, IDtoService dtoService)
{
_userManager = userManager;
@@ -58,6 +85,52 @@ namespace MediaBrowser.Api
/// </summary>
/// <param name="request">The request.</param>
/// <returns>System.Object.</returns>
+ public object Get(GetGameSystemSummaries request)
+ {
+ var gameSystems = GetAllLibraryItems(request.UserId, _userManager, _libraryManager)
+ .OfType<GameSystem>()
+ .ToList();
+
+ var user = request.UserId == null ? null : _userManager.GetUserById(request.UserId.Value);
+
+ var result = gameSystems
+ .Select(i => GetSummary(i, user))
+ .ToList();
+
+ return ToOptimizedResult(result);
+ }
+
+ /// <summary>
+ /// Gets the summary.
+ /// </summary>
+ /// <param name="system">The system.</param>
+ /// <param name="user">The user.</param>
+ /// <returns>GameSystemSummary.</returns>
+ private GameSystemSummary GetSummary(GameSystem system, User user)
+ {
+ var summary = new GameSystemSummary
+ {
+ Name = system.Name
+ };
+
+ var items = user == null ? system.RecursiveChildren : system.GetRecursiveChildren(user);
+
+ var games = items.OfType<Game>().ToList();
+
+ summary.GameCount = games.Count;
+
+ summary.GameFileExtensions = games.Select(i => Path.GetExtension(i.Path))
+ .Distinct(StringComparer.OrdinalIgnoreCase)
+ .ToList();
+
+ return summary;
+ }
+
+ /// <summary>
+ /// Gets the specified request.
+ /// </summary>
+ /// <param name="request">The request.</param>
+ /// <returns>System.Object.</returns>
public object Get(GetSimilarGames request)
{
var result = SimilarItemsHelper.GetSimilarItemsResult(_userManager,
diff --git a/MediaBrowser.Api/LibraryService.cs b/MediaBrowser.Api/LibraryService.cs
index 83e35cd413..264846568f 100644
--- a/MediaBrowser.Api/LibraryService.cs
+++ b/MediaBrowser.Api/LibraryService.cs
@@ -313,7 +313,7 @@ namespace MediaBrowser.Api
/// <returns>System.Object.</returns>
public object Get(GetItemCounts request)
{
- var items = GetItems(request.UserId).ToList();
+ var items = GetAllLibraryItems(request.UserId, _userManager, _libraryManager).ToList();
var counts = new ItemCounts
{
@@ -332,18 +332,6 @@ namespace MediaBrowser.Api
return ToOptimizedResult(counts);
}
- protected IEnumerable<BaseItem> GetItems(Guid? userId)
- {
- if (userId.HasValue)
- {
- var user = _userManager.GetUserById(userId.Value);
-
- return _userManager.GetUserById(userId.Value).RootFolder.GetRecursiveChildren(user);
- }
-
- return _libraryManager.RootFolder.RecursiveChildren;
- }
-
/// <summary>
/// Posts the specified request.
/// </summary>
diff --git a/MediaBrowser.Controller/Entities/GameSystem.cs b/MediaBrowser.Controller/Entities/GameSystem.cs
new file mode 100644
index 0000000000..39e95b91de
--- /dev/null
+++ b/MediaBrowser.Controller/Entities/GameSystem.cs
@@ -0,0 +1,23 @@
+using System;
+
+namespace MediaBrowser.Controller.Entities
+{
+ /// <summary>
+ /// Class GameSystem
+ /// </summary>
+ public class GameSystem : Folder
+ {
+ /// <summary>
+ /// Return the id that should be used to key display prefs for this item.
+ /// Default is based on the type for everything except actual generic folders.
+ /// </summary>
+ /// <value>The display prefs id.</value>
+ public override Guid DisplayPreferencesId
+ {
+ get
+ {
+ return Id;
+ }
+ }
+ }
+}
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
index ad8b499543..f49bd8cf00 100644
--- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj
+++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
@@ -83,6 +83,7 @@
<Compile Include="Entities\Extensions.cs" />
<Compile Include="Entities\Game.cs" />
<Compile Include="Entities\GameGenre.cs" />
+ <Compile Include="Entities\GameSystem.cs" />
<Compile Include="Entities\IByReferenceItem.cs" />
<Compile Include="Entities\IItemByName.cs" />
<Compile Include="Entities\LinkedChild.cs" />
diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
index 867eb300a7..e0ff0fbc63 100644
--- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
+++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
@@ -98,6 +98,9 @@
<Compile Include="..\MediaBrowser.Model\Dto\ChapterInfoDto.cs">
<Link>Dto\ChapterInfoDto.cs</Link>
</Compile>
+ <Compile Include="..\MediaBrowser.Model\Dto\GameSystemSummary.cs">
+ <Link>Dto\GameSystemSummary.cs</Link>
+ </Compile>
<Compile Include="..\MediaBrowser.Model\Dto\IItemDto.cs">
<Link>Dto\IItemDto.cs</Link>
</Compile>
diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
index 606aee1f9e..59b3af342c 100644
--- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
+++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
@@ -82,6 +82,9 @@
<Compile Include="..\MediaBrowser.Model\Dto\ChapterInfoDto.cs">
<Link>Dto\ChapterInfoDto.cs</Link>
</Compile>
+ <Compile Include="..\MediaBrowser.Model\Dto\GameSystemSummary.cs">
+ <Link>Dto\GameSystemSummary.cs</Link>
+ </Compile>
<Compile Include="..\MediaBrowser.Model\Dto\IItemDto.cs">
<Link>Dto\IItemDto.cs</Link>
</Compile>
diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs
index 44a7673ed9..03ea79b3b0 100644
--- a/MediaBrowser.Model/ApiClient/IApiClient.cs
+++ b/MediaBrowser.Model/ApiClient/IApiClient.cs
@@ -34,9 +34,21 @@ namespace MediaBrowser.Model.ApiClient
/// </summary>
event EventHandler<HttpResponseEventArgs> HttpResponseReceived;
+ /// <summary>
+ /// Gets the API URL.
+ /// </summary>
+ /// <param name="handler">The handler.</param>
+ /// <returns>System.String.</returns>
string GetApiUrl(string handler);
/// <summary>
+ /// Gets the game system summaries async.
+ /// </summary>
+ /// <param name="cancellationToken">The cancellation token.</param>
+ /// <returns>Task{List{GameSystemSummary}}.</returns>
+ Task<List<GameSystemSummary>> GetGameSystemSummariesAsync(CancellationToken cancellationToken);
+
+ /// <summary>
/// Gets the async.
/// </summary>
/// <typeparam name="T"></typeparam>
@@ -186,6 +198,7 @@ namespace MediaBrowser.Model.ApiClient
/// <summary>
/// Gets active client sessions.
/// </summary>
+ /// <param name="query">The query.</param>
/// <returns>Task{SessionInfoDto[]}.</returns>
Task<SessionInfoDto[]> GetClientSessionsAsync(SessionQuery query);
@@ -468,7 +481,7 @@ namespace MediaBrowser.Model.ApiClient
/// <param name="userId">The user id.</param>
/// <returns>Task{UserItemDataDto}.</returns>
Task<UserItemDataDto> MarkUnplayedAsync(string itemId, string userId);
-
+
/// <summary>
/// Updates the favorite status async.
/// </summary>
diff --git a/MediaBrowser.Model/Dto/GameSystemSummary.cs b/MediaBrowser.Model/Dto/GameSystemSummary.cs
new file mode 100644
index 0000000000..79f4e73d52
--- /dev/null
+++ b/MediaBrowser.Model/Dto/GameSystemSummary.cs
@@ -0,0 +1,36 @@
+using System.Collections.Generic;
+
+namespace MediaBrowser.Model.Dto
+{
+ /// <summary>
+ /// Class GameSystemSummary
+ /// </summary>
+ public class GameSystemSummary
+ {
+ /// <summary>
+ /// Gets or sets the name.
+ /// </summary>
+ /// <value>The name.</value>
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or sets the game count.
+ /// </summary>
+ /// <value>The game count.</value>
+ public int GameCount { get; set; }
+
+ /// <summary>
+ /// Gets or sets the game extensions.
+ /// </summary>
+ /// <value>The game extensions.</value>
+ public List<string> GameFileExtensions { get; set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="GameSystemSummary"/> class.
+ /// </summary>
+ public GameSystemSummary()
+ {
+ GameFileExtensions = new List<string>();
+ }
+ }
+}
diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj
index 6d8d454d93..8fb471c2d1 100644
--- a/MediaBrowser.Model/MediaBrowser.Model.csproj
+++ b/MediaBrowser.Model/MediaBrowser.Model.csproj
@@ -50,6 +50,7 @@
<Compile Include="Drawing\ImageOutputFormat.cs" />
<Compile Include="Dto\BaseItemPerson.cs" />
<Compile Include="Dto\ChapterInfoDto.cs" />
+ <Compile Include="Dto\GameSystemSummary.cs" />
<Compile Include="Dto\IItemDto.cs" />
<Compile Include="Dto\ImageInfo.cs" />
<Compile Include="Dto\ItemByNameCounts.cs" />
diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec
index daa03d1cd1..fc0650d5ef 100644
--- a/Nuget/MediaBrowser.Common.Internal.nuspec
+++ b/Nuget/MediaBrowser.Common.Internal.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Common.Internal</id>
- <version>3.0.204</version>
+ <version>3.0.205</version>
<title>MediaBrowser.Common.Internal</title>
<authors>Luke</authors>
<owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
<description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
<copyright>Copyright © Media Browser 2013</copyright>
<dependencies>
- <dependency id="MediaBrowser.Common" version="3.0.204" />
+ <dependency id="MediaBrowser.Common" version="3.0.205" />
<dependency id="NLog" version="2.0.1.2" />
<dependency id="ServiceStack.Text" version="3.9.58" />
<dependency id="SimpleInjector" version="2.3.2" />
diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec
index 500f5c84f2..64342cef9a 100644
--- a/Nuget/MediaBrowser.Common.nuspec
+++ b/Nuget/MediaBrowser.Common.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Common</id>
- <version>3.0.204</version>
+ <version>3.0.205</version>
<title>MediaBrowser.Common</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec
index 44f8acd09b..40919486ce 100644
--- a/Nuget/MediaBrowser.Server.Core.nuspec
+++ b/Nuget/MediaBrowser.Server.Core.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>MediaBrowser.Server.Core</id>
- <version>3.0.204</version>
+ <version>3.0.205</version>
<title>Media Browser.Server.Core</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
<description>Contains core components required to build plugins for Media Browser Server.</description>
<copyright>Copyright © Media Browser 2013</copyright>
<dependencies>
- <dependency id="MediaBrowser.Common" version="3.0.204" />
+ <dependency id="MediaBrowser.Common" version="3.0.205" />
</dependencies>
</metadata>
<files>