diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-17 18:30:20 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-17 18:30:20 -0400 |
| commit | 7aa9e108214356aa26e9c6b798c9a41744d539b6 (patch) | |
| tree | 534d4d3ad518c74e5f8c196cecfe717bfb74d0ff /MediaBrowser.Controller/Drawing/ImageManager.cs | |
| parent | 27b1bdbf553fe04b2b12ec40db005963f18aca65 (diff) | |
fixes #152 - Gallery Images – some show, others don’t
Diffstat (limited to 'MediaBrowser.Controller/Drawing/ImageManager.cs')
| -rw-r--r-- | MediaBrowser.Controller/Drawing/ImageManager.cs | 72 |
1 files changed, 36 insertions, 36 deletions
diff --git a/MediaBrowser.Controller/Drawing/ImageManager.cs b/MediaBrowser.Controller/Drawing/ImageManager.cs index 32ff940b2..d901d4a94 100644 --- a/MediaBrowser.Controller/Drawing/ImageManager.cs +++ b/MediaBrowser.Controller/Drawing/ImageManager.cs @@ -137,7 +137,7 @@ namespace MediaBrowser.Controller.Drawing _logger.Error("Error enhancing image", ex); } - var originalImageSize = GetImageSize(originalImagePath, dateModified); + var originalImageSize = await GetImageSize(originalImagePath, dateModified).ConfigureAwait(false); // Determine the output size based on incoming parameters var newSize = DrawingUtils.Resize(originalImageSize, width, height, maxWidth, maxHeight); @@ -149,16 +149,6 @@ namespace MediaBrowser.Controller.Drawing var cacheFilePath = GetCacheFilePath(originalImagePath, newSize, quality.Value, dateModified); - // Grab the cache file if it already exists - if (File.Exists(cacheFilePath)) - { - using (var fileStream = new FileStream(cacheFilePath, FileMode.Open, FileAccess.Read, FileShare.Read, StreamDefaults.DefaultFileStreamBufferSize, FileOptions.Asynchronous)) - { - await fileStream.CopyToAsync(toStream).ConfigureAwait(false); - return; - } - } - var semaphore = GetLock(cacheFilePath); await semaphore.WaitAsync().ConfigureAwait(false); @@ -279,7 +269,7 @@ namespace MediaBrowser.Controller.Drawing /// <param name="dateModified">The date modified.</param> /// <returns>Task{ImageSize}.</returns> /// <exception cref="System.ArgumentNullException">imagePath</exception> - public ImageSize GetImageSize(string imagePath, DateTime dateModified) + public async Task<ImageSize> GetImageSize(string imagePath, DateTime dateModified) { if (string.IsNullOrEmpty(imagePath)) { @@ -288,7 +278,16 @@ namespace MediaBrowser.Controller.Drawing var name = imagePath + "datemodified=" + dateModified.Ticks; - return _cachedImagedSizes.GetOrAdd(name, keyName => GetImageSize(keyName, imagePath)); + ImageSize size; + + if (!_cachedImagedSizes.TryGetValue(name, out size)) + { + size = await GetImageSize(name, imagePath).ConfigureAwait(false); + + _cachedImagedSizes.AddOrUpdate(name, size, (keyName, oldValue) => size); + } + + return size; } protected readonly CultureInfo UsCulture = new CultureInfo("en-US"); @@ -299,30 +298,41 @@ namespace MediaBrowser.Controller.Drawing /// <param name="keyName">Name of the key.</param> /// <param name="imagePath">The image path.</param> /// <returns>ImageSize.</returns> - private ImageSize GetImageSize(string keyName, string imagePath) + private async Task<ImageSize> GetImageSize(string keyName, string imagePath) { // Now check the file system cache var fullCachePath = ImageSizeCache.GetResourcePath(keyName, ".txt"); + var semaphore = GetLock(fullCachePath); + + await semaphore.WaitAsync().ConfigureAwait(false); + try { - var result = File.ReadAllText(fullCachePath).Split('|').Select(i => double.Parse(i, UsCulture)).ToArray(); + try + { + var result = File.ReadAllText(fullCachePath).Split('|').Select(i => double.Parse(i, UsCulture)).ToArray(); - return new ImageSize { Width = result[0], Height = result[1] }; - } - catch (FileNotFoundException) - { - // Cache file doesn't exist no biggie - } + return new ImageSize { Width = result[0], Height = result[1] }; + } + catch (FileNotFoundException) + { + // Cache file doesn't exist no biggie + } - _logger.Debug("Getting image size for {0}", imagePath); + _logger.Debug("Getting image size for {0}", imagePath); - var size = ImageHeader.GetDimensions(imagePath, _logger); + var size = ImageHeader.GetDimensions(imagePath, _logger); - // Update the file system cache - File.WriteAllText(fullCachePath, size.Width.ToString(UsCulture) + @"|" + size.Height.ToString(UsCulture)); + // Update the file system cache + File.WriteAllText(fullCachePath, size.Width.ToString(UsCulture) + @"|" + size.Height.ToString(UsCulture)); - return new ImageSize { Width = size.Width, Height = size.Height }; + return new ImageSize { Width = size.Width, Height = size.Height }; + } + finally + { + semaphore.Release(); + } } /// <summary> @@ -445,11 +455,6 @@ namespace MediaBrowser.Controller.Drawing var croppedImagePath = CroppedImageCache.GetResourcePath(name, Path.GetExtension(originalImagePath)); - if (CroppedImageCache.ContainsFilePath(croppedImagePath)) - { - return croppedImagePath; - } - var semaphore = GetLock(croppedImagePath); await semaphore.WaitAsync().ConfigureAwait(false); @@ -529,11 +534,6 @@ namespace MediaBrowser.Controller.Drawing // All enhanced images are saved as png to allow transparency var enhancedImagePath = EnhancedImageCache.GetResourcePath(cacheGuid + ".png"); - if (EnhancedImageCache.ContainsFilePath(enhancedImagePath)) - { - return enhancedImagePath; - } - var semaphore = GetLock(enhancedImagePath); await semaphore.WaitAsync().ConfigureAwait(false); |
