diff options
| -rw-r--r-- | MediaBrowser.Api/BaseApiService.cs | 13 | ||||
| -rw-r--r-- | MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/GamesService.cs | 73 | ||||
| -rw-r--r-- | MediaBrowser.Api/LibraryService.cs | 14 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/GameSystem.cs | 23 | ||||
| -rw-r--r-- | MediaBrowser.Controller/MediaBrowser.Controller.csproj | 1 | ||||
| -rw-r--r-- | MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj | 3 | ||||
| -rw-r--r-- | MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj | 3 | ||||
| -rw-r--r-- | MediaBrowser.Model/ApiClient/IApiClient.cs | 15 | ||||
| -rw-r--r-- | MediaBrowser.Model/Dto/GameSystemSummary.cs | 36 | ||||
| -rw-r--r-- | MediaBrowser.Model/MediaBrowser.Model.csproj | 1 | ||||
| -rw-r--r-- | Nuget/MediaBrowser.Common.Internal.nuspec | 4 | ||||
| -rw-r--r-- | Nuget/MediaBrowser.Common.nuspec | 2 | ||||
| -rw-r--r-- | Nuget/MediaBrowser.Server.Core.nuspec | 4 |
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> |
