diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-05-04 17:20:27 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-05-04 17:20:27 -0400 |
| commit | 00222c84935ea9c81a997b12bafa6cf5f13c7b91 (patch) | |
| tree | 849e3af10eac7f768b848741a80abbc0af3afaab | |
| parent | 055a6eb4cc183cf84dc6b72196cd599c9c471695 (diff) | |
add basic ability to upload images for items
| -rw-r--r-- | MediaBrowser.Api/Images/ImageService.cs | 37 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs | 10 | ||||
| -rw-r--r-- | MediaBrowser.WebDashboard/Api/DashboardService.cs | 1 | ||||
| -rw-r--r-- | MediaBrowser.WebDashboard/ApiClient.js | 57 | ||||
| -rw-r--r-- | MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj | 6 | ||||
| -rw-r--r-- | MediaBrowser.WebDashboard/packages.config | 2 |
6 files changed, 111 insertions, 2 deletions
diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 19cb14bbd..0fa75af4d 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -159,6 +159,25 @@ namespace MediaBrowser.Api.Images /// <value>The request stream.</value> public Stream RequestStream { get; set; } } + + [Route("/Items/{Id}/Images/{Type}", "POST")] + [Route("/Items/{Id}/Images/{Type}/{Index}", "POST")] + [Api(Description = "Posts an item image")] + public class PostItemImage : DeleteImageRequest, IRequiresRequestStream, IReturnVoid + { + /// <summary> + /// Gets or sets the id. + /// </summary> + /// <value>The id.</value> + [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] + public string Id { get; set; } + + /// <summary> + /// The raw Http Request Input Stream + /// </summary> + /// <value>The request stream.</value> + public Stream RequestStream { get; set; } + } /// <summary> /// Class ImageService @@ -289,6 +308,24 @@ namespace MediaBrowser.Api.Images } /// <summary> + /// Posts the specified request. + /// </summary> + /// <param name="request">The request.</param> + public void Post(PostItemImage request) + { + var pathInfo = PathInfo.Parse(RequestContext.PathInfo); + var id = new Guid(pathInfo.GetArgumentValue<string>(1)); + + request.Type = (ImageType)Enum.Parse(typeof(ImageType), pathInfo.GetArgumentValue<string>(3), true); + + var item = _libraryManager.GetItemById(id); + + var task = PostImage(item, request.RequestStream, request.Type, RequestContext.ContentType); + + Task.WaitAll(task); + } + + /// <summary> /// Deletes the specified request. /// </summary> /// <param name="request">The request.</param> diff --git a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs index 5a9f5890e..3e8501dfa 100644 --- a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs +++ b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs @@ -197,7 +197,7 @@ namespace MediaBrowser.Controller.Providers item.SetImage(ImageType.Thumb, image.FullName); } - // Thumbnail Image + // Box Image image = GetImage(item, "box"); if (image != null) @@ -205,6 +205,14 @@ namespace MediaBrowser.Controller.Providers item.SetImage(ImageType.Box, image.FullName); } + // BoxRear Image + image = GetImage(item, "boxrear"); + + if (image != null) + { + item.SetImage(ImageType.BoxRear, image.FullName); + } + // Thumbnail Image image = GetImage(item, "menu"); diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index e51be6d72..a82f7be4d 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -455,6 +455,7 @@ namespace MediaBrowser.WebDashboard.Api "boxsets.js", "clientsettings.js", "dashboardpage.js", + "edititemimages.js", "edituserpage.js", "gamesrecommendedpage.js", "gamesystemspage.js", diff --git a/MediaBrowser.WebDashboard/ApiClient.js b/MediaBrowser.WebDashboard/ApiClient.js index 84f34e681..2e11a72fc 100644 --- a/MediaBrowser.WebDashboard/ApiClient.js +++ b/MediaBrowser.WebDashboard/ApiClient.js @@ -839,6 +839,63 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { return deferred.promise(); }; + self.uploadImage = function (itemId, imageType, file) { + + if (!itemId) { + throw new Error("null itemId"); + } + + if (!imageType) { + throw new Error("null imageType"); + } + + if (!file) { + throw new Error("File must be an image."); + } + + if (file.type != "image/png" && file.type != "image/jpeg" && file.type != "image/jpeg") { + throw new Error("File must be an image."); + } + + var deferred = $.Deferred(); + + var reader = new FileReader(); + + reader.onerror = function () { + deferred.reject(); + }; + + reader.onabort = function () { + deferred.reject(); + }; + + // Closure to capture the file information. + reader.onload = function (e) { + + var data = window.btoa(e.target.result); + + var url = self.getUrl("Items/" + itemId + "/Images/" + imageType); + + self.ajax({ + type: "POST", + url: url, + data: data, + contentType: "image/" + file.name.substring(file.name.lastIndexOf('.') + 1) + }).done(function (result) { + + deferred.resolveWith(null, [result]); + + }).fail(function () { + deferred.reject(); + }); + }; + + // Read in the image file as a data URL. + reader.readAsBinaryString(file); + + return deferred.promise(); + }; + /** * Gets the list of installed plugins on the server */ diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index 8fc53a0a1..bda7c013c 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -210,6 +210,9 @@ <Content Include="dashboard-ui\css\userimage.css">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\edititemimages.html">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\gamegenres.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
@@ -270,6 +273,9 @@ <Content Include="dashboard-ui\musicrecommended.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\scripts\edititemimages.js">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\scripts\musicrecommended.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
diff --git a/MediaBrowser.WebDashboard/packages.config b/MediaBrowser.WebDashboard/packages.config index e8ca33ab5..23ebca293 100644 --- a/MediaBrowser.WebDashboard/packages.config +++ b/MediaBrowser.WebDashboard/packages.config @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="MediaBrowser.ApiClient.Javascript" version="3.0.93" targetFramework="net45" /> + <package id="MediaBrowser.ApiClient.Javascript" version="3.0.94" targetFramework="net45" /> <package id="ServiceStack.Common" version="3.9.43" targetFramework="net45" /> <package id="ServiceStack.Text" version="3.9.43" targetFramework="net45" /> </packages>
\ No newline at end of file |
