aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs103
1 files changed, 41 insertions, 62 deletions
diff --git a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs b/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs
index 8f20d32cc..fd87bd16a 100644
--- a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs
+++ b/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs
@@ -2,8 +2,8 @@
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Entities;
using System;
using System.Collections.Generic;
@@ -15,7 +15,7 @@ using System.Threading.Tasks;
namespace MediaBrowser.Server.Implementations.Photos
{
- public abstract class BaseDynamicImageProvider<T> : IHasChangeMonitor, IForcedProvider, ICustomMetadataProvider<T>
+ public abstract class BaseDynamicImageProvider<T> : IHasChangeMonitor, IForcedProvider, IDynamicImageProvider, IHasOrder
where T : IHasMetadata
{
protected IFileSystem FileSystem { get; private set; }
@@ -29,81 +29,51 @@ namespace MediaBrowser.Server.Implementations.Photos
FileSystem = fileSystem;
}
- public async Task<ItemUpdateType> FetchAsync(T item, MetadataRefreshOptions options, CancellationToken cancellationToken)
+ public virtual bool Supports(IHasImages item)
{
- if (!Supports(item))
- {
- return ItemUpdateType.None;
- }
-
- var primaryResult = await FetchAsync(item, ImageType.Primary, options, cancellationToken).ConfigureAwait(false);
- var thumbResult = await FetchAsync(item, ImageType.Thumb, options, cancellationToken).ConfigureAwait(false);
-
- return primaryResult | thumbResult;
+ return item is T;
}
- protected virtual bool Supports(IHasImages item)
- {
- return true;
- }
-
- protected abstract Task<List<BaseItem>> GetItemsWithImages(IHasImages item);
-
- private const string Version = "3";
- protected string GetConfigurationCacheKey(List<BaseItem> items)
+ public IEnumerable<ImageType> GetSupportedImages(IHasImages item)
{
- return (Version + "_" + string.Join(",", items.Select(i => i.Id.ToString("N")).ToArray())).GetMD5().ToString("N");
+ return new List<ImageType>
+ {
+ ImageType.Primary,
+ ImageType.Thumb
+ };
}
- protected async Task<ItemUpdateType> FetchAsync(IHasImages item, ImageType imageType, MetadataRefreshOptions options, CancellationToken cancellationToken)
+ public async Task<DynamicImageResponse> GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken)
{
var items = await GetItemsWithImages(item).ConfigureAwait(false);
var cacheKey = GetConfigurationCacheKey(items);
- if (!HasChanged(item, imageType, cacheKey))
+ var result = await FetchAsyncInternal(item, items, type, cacheKey, cancellationToken).ConfigureAwait(false);
+
+ return new DynamicImageResponse
{
- return ItemUpdateType.None;
- }
+ HasImage = result != null,
+ Stream = result,
+ InternalCacheKey = cacheKey,
+ Format = ImageFormat.Png
+ };
+ }
- return await FetchAsyncInternal(item, items, imageType, cacheKey, options, cancellationToken).ConfigureAwait(false);
+ protected abstract Task<List<BaseItem>> GetItemsWithImages(IHasImages item);
+
+ private const string Version = "3";
+ protected string GetConfigurationCacheKey(List<BaseItem> items)
+ {
+ return (Version + "_" + string.Join(",", items.Select(i => i.Id.ToString("N")).ToArray())).GetMD5().ToString("N");
}
- protected async Task<ItemUpdateType> FetchAsyncInternal(IHasImages item,
+ protected Task<Stream> FetchAsyncInternal(IHasImages item,
List<BaseItem> itemsWithImages,
- ImageType imageType,
- string cacheKey,
- MetadataRefreshOptions options,
+ ImageType imageType,
+ string cacheKey,
CancellationToken cancellationToken)
{
- var stream = await CreateImageAsync(item, itemsWithImages, imageType, 0).ConfigureAwait(false);
-
- if (stream == null)
- {
- return ItemUpdateType.None;
- }
-
- if (stream is MemoryStream)
- {
- using (stream)
- {
- stream.Position = 0;
-
- await ProviderManager.SaveImage(item, stream, "image/png", imageType, null, cacheKey, cancellationToken).ConfigureAwait(false);
- }
- }
- else
- {
- using (var ms = new MemoryStream())
- {
- await stream.CopyToAsync(ms).ConfigureAwait(false);
-
- ms.Position = 0;
-
- await ProviderManager.SaveImage(item, ms, "image/png", imageType, null, cacheKey, cancellationToken).ConfigureAwait(false);
- }
- }
-
- return ItemUpdateType.ImageUpdate;
+ return CreateImageAsync(item, itemsWithImages, imageType, 0);
}
protected Task<Stream> GetThumbCollage(List<BaseItem> items)
@@ -137,9 +107,9 @@ namespace MediaBrowser.Server.Implementations.Photos
get { return "Dynamic Image Provider"; }
}
- public async Task<Stream> CreateImageAsync(IHasImages item,
+ public async Task<Stream> CreateImageAsync(IHasImages item,
List<BaseItem> itemsWithImages,
- ImageType imageType,
+ ImageType imageType,
int imageIndex)
{
if (itemsWithImages.Count == 0)
@@ -209,5 +179,14 @@ namespace MediaBrowser.Server.Implementations.Photos
return weekNo;
}
+
+ public int Order
+ {
+ get
+ {
+ // Run before the default image provider which will download placeholders
+ return 0;
+ }
+ }
}
}