diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-06-28 16:25:58 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-06-28 16:25:58 -0400 |
| commit | 8a1b12b7d805ce35f4e10acf2294f355f47e75e3 (patch) | |
| tree | 71fc6b154b3b4e335fe9af1a58fdb584042dd92a /MediaBrowser.Api/Images/ImageService.cs | |
| parent | ac7d6256f460ce459a5b5c824e1b32d23e120901 (diff) | |
tightened up image saving to reduce knowledge of file names
Diffstat (limited to 'MediaBrowser.Api/Images/ImageService.cs')
| -rw-r--r-- | MediaBrowser.Api/Images/ImageService.cs | 132 |
1 files changed, 16 insertions, 116 deletions
diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 4518ffad0..3074b0d5b 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -760,145 +760,45 @@ namespace MediaBrowser.Api.Images var bytes = Convert.FromBase64String(text); // Validate first - using (var memoryStream = new MemoryStream(bytes)) + using (var validationStream = new MemoryStream(bytes)) { - using (var image = Image.FromStream(memoryStream)) + using (var image = Image.FromStream(validationStream)) { Logger.Info("New image is {0}x{1}", image.Width, image.Height); } } - string filename; + var memoryStream = new MemoryStream(bytes); - switch (imageType) - { - case ImageType.Art: - filename = "clearart"; - break; - case ImageType.Primary: - filename = entity is Episode ? Path.GetFileNameWithoutExtension(entity.Path) : "folder"; - break; - case ImageType.Backdrop: - filename = GetBackdropFilenameToSave(entity); - break; - case ImageType.Screenshot: - filename = GetScreenshotFilenameToSave(entity); - break; - default: - filename = imageType.ToString().ToLower(); - break; - } + memoryStream.Position = 0; + var imageIndex = 0; - var extension = mimeType.Split(';').First().Split('/').Last(); - - string oldImagePath; - switch (imageType) + if (imageType == ImageType.Screenshot) { - case ImageType.Backdrop: - case ImageType.Screenshot: - oldImagePath = null; - break; - default: - oldImagePath = entity.GetImage(imageType); - break; + imageIndex = entity.ScreenshotImagePaths.Count; } - - // Don't save locally if there's no parent (special feature, trailer, etc) - var saveLocally = !(entity is Audio) && entity.Parent != null && !string.IsNullOrEmpty(entity.MetaLocation) || entity is User; - - if (imageType != ImageType.Primary) + else if (imageType == ImageType.Backdrop) { - if (entity is Episode) - { - saveLocally = false; - } + imageIndex = entity.BackdropImagePaths.Count; } - if (entity.LocationType != LocationType.FileSystem) - { - saveLocally = false; - } + await _providerManager.SaveImage(entity, memoryStream, mimeType, imageType, imageIndex, CancellationToken.None).ConfigureAwait(false); - var imagePath = _providerManager.GetSavePath(entity, filename + "." + extension, saveLocally); + var user = entity as User; - // Save to file system - using (var fs = new FileStream(imagePath, FileMode.Create, FileAccess.Write, FileShare.Read, StreamDefaults.DefaultFileStreamBufferSize, true)) + if (user != null) { - await fs.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false); - } - - if (imageType == ImageType.Screenshot) - { - entity.ScreenshotImagePaths.Add(imagePath); - } - else if (imageType == ImageType.Backdrop) - { - entity.BackdropImagePaths.Add(imagePath); + await _userManager.UpdateUser(user).ConfigureAwait(false); } else { - // Set the image - entity.SetImage(imageType, imagePath); - } - - // If the new and old paths are different, delete the old one - if (!string.IsNullOrEmpty(oldImagePath) && !oldImagePath.Equals(imagePath, StringComparison.OrdinalIgnoreCase)) - { - File.Delete(oldImagePath); + await _libraryManager.UpdateItem(entity, ItemUpdateType.ImageUpdate, CancellationToken.None) + .ConfigureAwait(false); } - // Directory watchers should repeat this, but do a quick refresh first - await entity.RefreshMetadata(CancellationToken.None, forceSave: true, allowSlowProviders: false).ConfigureAwait(false); + await entity.RefreshMetadata(CancellationToken.None, allowSlowProviders: false).ConfigureAwait(false); } } - - /// <summary> - /// Gets the backdrop filename to save. - /// </summary> - /// <param name="item">The item.</param> - /// <returns>System.String.</returns> - private string GetBackdropFilenameToSave(BaseItem item) - { - var paths = item.BackdropImagePaths.ToList(); - - if (!paths.Any(i => string.Equals(Path.GetFileNameWithoutExtension(i), "backdrop", StringComparison.OrdinalIgnoreCase))) - { - return "screenshot"; - } - - var index = 1; - - while (paths.Any(i => string.Equals(Path.GetFileNameWithoutExtension(i), "backdrop" + index, StringComparison.OrdinalIgnoreCase))) - { - index++; - } - - return "backdrop" + index; - } - - /// <summary> - /// Gets the screenshot filename to save. - /// </summary> - /// <param name="item">The item.</param> - /// <returns>System.String.</returns> - private string GetScreenshotFilenameToSave(BaseItem item) - { - var paths = item.ScreenshotImagePaths.ToList(); - - if (!paths.Any(i => string.Equals(Path.GetFileNameWithoutExtension(i), "screenshot", StringComparison.OrdinalIgnoreCase))) - { - return "screenshot"; - } - - var index = 1; - - while (paths.Any(i => string.Equals(Path.GetFileNameWithoutExtension(i), "screenshot" + index, StringComparison.OrdinalIgnoreCase))) - { - index++; - } - - return "screenshot" + index; - } } } |
