aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-01-23 23:21:31 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-01-24 23:27:36 -0500
commitd317bedd851b04bc427a6c7c396a09c48ea7a069 (patch)
tree58c7de7c7cc52964a69ac1691e99bd14df19bd0a
parent51c70ab84005932f594c49f4db4563f4fb2e951b (diff)
improve reaction to image stub failures
Conflicts: MediaBrowser.Server.Implementations/Library/LibraryManager.cs
-rw-r--r--MediaBrowser.Providers/Manager/ItemImageProvider.cs35
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs36
2 files changed, 46 insertions, 25 deletions
diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
index f99aa967f..370187801 100644
--- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs
+++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
@@ -480,22 +480,21 @@ namespace MediaBrowser.Providers.Manager
ImageType type,
CancellationToken cancellationToken)
{
- foreach (var image in images.Where(i => i.Type == type))
+ var eligibleImages = images
+ .Where(i => i.Type == type && !(i.Width.HasValue && i.Width.Value < minWidth))
+ .ToList();
+
+ if (EnableImageStub(item, type) && eligibleImages.Count > 0)
{
- if (image.Width.HasValue && image.Width.Value < minWidth)
- {
- continue;
- }
+ SaveImageStub(item, type, eligibleImages.Select(i => i.Url));
+ result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate;
+ return true;
+ }
+ foreach (var image in eligibleImages)
+ {
var url = image.Url;
- if (EnableImageStub(item, type))
- {
- SaveImageStub(item, type, url);
- result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate;
- return true;
- }
-
try
{
var response = await provider.GetImageResponse(url, cancellationToken).ConfigureAwait(false);
@@ -557,18 +556,20 @@ namespace MediaBrowser.Providers.Manager
}
}
- private void SaveImageStub(IHasImages item, ImageType imageType, string url)
+ private void SaveImageStub(IHasImages item, ImageType imageType, IEnumerable<string> urls)
{
var newIndex = item.AllowsMultipleImages(imageType) ? item.GetImages(imageType).Count() : 0;
- SaveImageStub(item, imageType, url, newIndex);
+ SaveImageStub(item, imageType, urls, newIndex);
}
- private void SaveImageStub(IHasImages item, ImageType imageType, string url, int newIndex)
+ private void SaveImageStub(IHasImages item, ImageType imageType, IEnumerable<string> urls, int newIndex)
{
+ var path = string.Join("|", urls.Take(1).ToArray());
+
item.SetImage(new ItemImageInfo
{
- Path = url,
+ Path = path,
Type = imageType
}, newIndex);
@@ -592,7 +593,7 @@ namespace MediaBrowser.Providers.Manager
if (EnableImageStub(item, imageType))
{
- SaveImageStub(item, imageType, url);
+ SaveImageStub(item, imageType, new[] { url });
result.UpdateType = result.UpdateType | ItemUpdateType.ImageUpdate;
continue;
}
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index f27f35c48..d0e72ac63 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -2387,20 +2387,40 @@ namespace MediaBrowser.Server.Implementations.Library
private readonly SemaphoreSlim _dynamicImageResourcePool = new SemaphoreSlim(1,1);
public async Task<ItemImageInfo> ConvertImageToLocal(IHasImages item, ItemImageInfo image, int imageIndex)
{
- _logger.Debug("ConvertImageToLocal item {0}", item.Id);
+ foreach (var url in image.Path.Split('|'))
+ {
+ try
+ {
+ _logger.Debug("ConvertImageToLocal item {0} - image url: {1}", item.Id, url);
- await _providerManagerFactory().SaveImage(item, image.Path, _dynamicImageResourcePool, image.Type, imageIndex, CancellationToken.None).ConfigureAwait(false);
+ await _providerManagerFactory().SaveImage(item, url, _dynamicImageResourcePool, image.Type, imageIndex, CancellationToken.None).ConfigureAwait(false);
- var newImage = item.GetImageInfo(image.Type, imageIndex);
+ var newImage = item.GetImageInfo(image.Type, imageIndex);
- if (newImage != null)
- {
- newImage.IsPlaceholder = image.IsPlaceholder;
+ if (newImage != null)
+ {
+ newImage.IsPlaceholder = image.IsPlaceholder;
+ }
+
+ await item.UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None).ConfigureAwait(false);
+
+ return item.GetImageInfo(image.Type, imageIndex);
+ }
+ catch (HttpException ex)
+ {
+ if (ex.StatusCode.HasValue && ex.StatusCode.Value == HttpStatusCode.NotFound)
+ {
+ continue;
+ }
+ throw;
+ }
}
+ // Remove this image to prevent it from retrying over and over
+ item.RemoveImage(image);
await item.UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None).ConfigureAwait(false);
-
- return item.GetImageInfo(image.Type, imageIndex);
+
+ throw new InvalidOperationException();
}
}
}