diff --git a/MediaBrowser.Api/LibraryService.cs b/MediaBrowser.Api/LibraryService.cs index 5b133fbd3e..202d372e83 100644 --- a/MediaBrowser.Api/LibraryService.cs +++ b/MediaBrowser.Api/LibraryService.cs @@ -5,10 +5,8 @@ using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; -using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; using MediaBrowser.Model.Querying; using ServiceStack.ServiceHost; using System; @@ -34,21 +32,6 @@ namespace MediaBrowser.Api public string Id { get; set; } } - [Route("/Items/{Id}/RemoteImages/{Type}", "GET")] - [Api(Description = "Gets available remote images for an item")] - public class GetRemoteImages : IReturn> - { - /// - /// Gets or sets the id. - /// - /// The id. - [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] - public string Id { get; set; } - - [ApiMember(Name = "Type", Description = "The image type", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] - public ImageType Type { get; set; } - } - /// /// Class GetCriticReviews /// @@ -225,7 +208,6 @@ namespace MediaBrowser.Api private readonly ILibraryManager _libraryManager; private readonly IUserManager _userManager; private readonly IUserDataManager _userDataManager; - private readonly IProviderManager _providerManager; private readonly IDtoService _dtoService; @@ -233,14 +215,13 @@ namespace MediaBrowser.Api /// Initializes a new instance of the class. /// public LibraryService(IItemRepository itemRepo, ILibraryManager libraryManager, IUserManager userManager, - IDtoService dtoService, IUserDataManager userDataManager, IProviderManager providerManager) + IDtoService dtoService, IUserDataManager userDataManager) { _itemRepo = itemRepo; _libraryManager = libraryManager; _userManager = userManager; _dtoService = dtoService; _userDataManager = userDataManager; - _providerManager = providerManager; } public object Get(GetFile request) @@ -259,15 +240,6 @@ namespace MediaBrowser.Api return ToStaticFileResult(item.Path); } - public object Get(GetRemoteImages request) - { - var item = _dtoService.GetItemByDtoId(request.Id); - - var result = _providerManager.GetAvailableRemoteImages(item, request.Type, CancellationToken.None).Result; - - return ToOptimizedResult(result); - } - /// /// Gets the specified request. /// diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index 21e73361c2..248dc7d6d8 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -100,6 +100,7 @@ + diff --git a/MediaBrowser.Api/RemoteImageService.cs b/MediaBrowser.Api/RemoteImageService.cs new file mode 100644 index 0000000000..b50bf4ffe3 --- /dev/null +++ b/MediaBrowser.Api/RemoteImageService.cs @@ -0,0 +1,82 @@ +using MediaBrowser.Controller.Dto; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Providers; +using ServiceStack.ServiceHost; +using System.Linq; +using System.Threading; + +namespace MediaBrowser.Api +{ + [Route("/Items/{Id}/RemoteImages/{Type}", "GET")] + [Api(Description = "Gets available remote images for an item")] + public class GetRemoteImages : IReturn + { + /// + /// Gets or sets the id. + /// + /// The id. + [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public string Id { get; set; } + + [ApiMember(Name = "Type", Description = "The image type", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public ImageType Type { get; set; } + + /// + /// Skips over a given number of items within the results. Use for paging. + /// + /// The start index. + [ApiMember(Name = "StartIndex", Description = "Optional. The record index to start at. All items with a lower index will be dropped from the results.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] + public int? StartIndex { get; set; } + + /// + /// The maximum number of items to return + /// + /// The limit. + [ApiMember(Name = "Limit", Description = "Optional. The maximum number of records to return", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] + public int? Limit { get; set; } + } + + public class RemoteImageService : BaseApiService + { + private readonly IProviderManager _providerManager; + + private readonly IDtoService _dtoService; + + public RemoteImageService(IProviderManager providerManager, IDtoService dtoService) + { + _providerManager = providerManager; + _dtoService = dtoService; + } + + public object Get(GetRemoteImages request) + { + var item = _dtoService.GetItemByDtoId(request.Id); + + var images = _providerManager.GetAvailableRemoteImages(item, request.Type, CancellationToken.None).Result; + + var imagesList = images.ToList(); + + var result = new RemoteImageResult + { + TotalRecordCount = imagesList.Count + }; + + if (request.StartIndex.HasValue) + { + imagesList = imagesList.Skip(request.StartIndex.Value) + .ToList(); + } + + if (request.Limit.HasValue) + { + imagesList = imagesList.Take(request.Limit.Value) + .ToList(); + } + + result.Images = imagesList; + + return ToOptimizedResult(result); + } + } +} diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 0f54073ef5..284ac8c90a 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -290,6 +290,9 @@ Providers\RemoteImageInfo.cs + + Providers\RemoteImageResult.cs + Querying\ArtistsQuery.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 3d4b8d2c7d..0f3cfa9704 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -277,6 +277,9 @@ Providers\RemoteImageInfo.cs + + Providers\RemoteImageResult.cs + Querying\ArtistsQuery.cs diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index b048dc1c3e..ee78980774 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -82,6 +82,7 @@ + diff --git a/MediaBrowser.Model/Providers/RemoteImageResult.cs b/MediaBrowser.Model/Providers/RemoteImageResult.cs new file mode 100644 index 0000000000..9c3fd94070 --- /dev/null +++ b/MediaBrowser.Model/Providers/RemoteImageResult.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; + +namespace MediaBrowser.Model.Providers +{ + /// + /// Class RemoteImageResult. + /// + public class RemoteImageResult + { + /// + /// Gets or sets the images. + /// + /// The images. + public List Images { get; set; } + + /// + /// Gets or sets the total record count. + /// + /// The total record count. + public int TotalRecordCount { get; set; } + } +} diff --git a/MediaBrowser.Server.Implementations/Providers/ImageSaver.cs b/MediaBrowser.Server.Implementations/Providers/ImageSaver.cs index cbca2ba763..7b5c0df34d 100644 --- a/MediaBrowser.Server.Implementations/Providers/ImageSaver.cs +++ b/MediaBrowser.Server.Implementations/Providers/ImageSaver.cs @@ -69,11 +69,11 @@ namespace MediaBrowser.Server.Implementations.Providers throw new ArgumentNullException("mimeType"); } - var saveLocally = _config.Configuration.SaveLocalMeta || item is IItemByName || item is User; + var saveLocally = _config.Configuration.SaveLocalMeta && item.Parent != null && !(item is Audio); - if (item is Audio || item.Parent == null) + if (item is IItemByName || item is User) { - saveLocally = false; + saveLocally = true; } if (type != ImageType.Primary && item is Episode) diff --git a/MediaBrowser.WebDashboard/ApiClient.js b/MediaBrowser.WebDashboard/ApiClient.js index 3606396652..9a75c12be0 100644 --- a/MediaBrowser.WebDashboard/ApiClient.js +++ b/MediaBrowser.WebDashboard/ApiClient.js @@ -306,16 +306,20 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi }); }; - self.getAvailableRemoteImages = function (itemId, imageType) { + self.getAvailableRemoteImages = function (options) { - if (!itemId) { - throw new Error("null itemId"); - } - if (!imageType) { - throw new Error("null imageType"); + if (!options) { + throw new Error("null options"); } - var url = self.getUrl("Items/" + itemId + "/RemoteImages/" + imageType); + var urlPrefix = "Items/" + options.itemId; + + var imageType = options.imageType; + + delete options.itemId; + delete options.imageType; + + var url = self.getUrl(urlPrefix + "/RemoteImages/" + imageType, options); return self.ajax({ type: "GET", diff --git a/MediaBrowser.WebDashboard/packages.config b/MediaBrowser.WebDashboard/packages.config index 22560b1331..ba7498605a 100644 --- a/MediaBrowser.WebDashboard/packages.config +++ b/MediaBrowser.WebDashboard/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file