Converted over ThumbnailProviderManager to ThumbnailProvidersResolver using the new apis.
This commit is contained in:
@@ -11,4 +11,5 @@ namespace Umbraco.Core.Interfaces
|
||||
bool CanProvideThumbnail(string fileUrl);
|
||||
string GetThumbnailUrl(string fileUrl);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace Umbraco.Core
|
||||
/// these old classes don't contain metadata, the objects need to be instantiated first to get their metadata, we then store this
|
||||
/// for use in the GetById method.
|
||||
/// </remarks>
|
||||
internal abstract class LegacyTransientObjectsResolver<T> : ManyObjectResolverBase<T>
|
||||
internal abstract class LegacyTransientObjectsResolver<T> : ManyObjectsResolverBase<T>
|
||||
where T : class
|
||||
{
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ using System.Web;
|
||||
|
||||
namespace Umbraco.Core.Resolving
|
||||
{
|
||||
internal abstract class ManyObjectResolverBase<TResolved>
|
||||
internal abstract class ManyObjectsResolverBase<TResolved>
|
||||
where TResolved : class
|
||||
{
|
||||
private List<TResolved> _applicationInstances = null;
|
||||
@@ -13,10 +13,10 @@ namespace Umbraco.Core.Resolving
|
||||
|
||||
#region Constructors
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ManyObjectResolverBase{TResolved}"/> class with an empty list of objects.
|
||||
/// Initializes a new instance of the <see cref="ManyObjectsResolverBase{TResolved}"/> class with an empty list of objects.
|
||||
/// </summary>
|
||||
/// <param name="scope">The lifetime scope of instantiated objects, default is per Application</param>
|
||||
protected ManyObjectResolverBase(ObjectLifetimeScope scope = ObjectLifetimeScope.Application)
|
||||
protected ManyObjectsResolverBase(ObjectLifetimeScope scope = ObjectLifetimeScope.Application)
|
||||
{
|
||||
if (scope == ObjectLifetimeScope.HttpRequest)
|
||||
{
|
||||
@@ -32,11 +32,11 @@ namespace Umbraco.Core.Resolving
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ManyObjectResolverBase{TResolved}"/> class with an empty list of objects.
|
||||
/// Initializes a new instance of the <see cref="ManyObjectsResolverBase{TResolved}"/> class with an empty list of objects.
|
||||
/// with creation of objects based on an HttpRequest lifetime scope.
|
||||
/// </summary>
|
||||
/// <param name="httpContext"></param>
|
||||
protected ManyObjectResolverBase(HttpContextBase httpContext)
|
||||
protected ManyObjectsResolverBase(HttpContextBase httpContext)
|
||||
{
|
||||
LifetimeScope = ObjectLifetimeScope.HttpRequest;
|
||||
CurrentHttpContext = httpContext;
|
||||
@@ -44,23 +44,23 @@ namespace Umbraco.Core.Resolving
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ManyObjectResolverBase{TResolved}"/> class with an initial list of objects.
|
||||
/// Initializes a new instance of the <see cref="ManyObjectsResolverBase{TResolved}"/> class with an initial list of objects.
|
||||
/// </summary>
|
||||
/// <param name="value">The list of objects.</param>
|
||||
/// <param name="scope">If set to true will resolve singleton objects which will be created once for the lifetime of the application</param>
|
||||
protected ManyObjectResolverBase(IEnumerable<Type> value, ObjectLifetimeScope scope = ObjectLifetimeScope.Application)
|
||||
protected ManyObjectsResolverBase(IEnumerable<Type> value, ObjectLifetimeScope scope = ObjectLifetimeScope.Application)
|
||||
: this(scope)
|
||||
{
|
||||
InstanceTypes = new List<Type>(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ManyObjectResolverBase{TResolved}"/> class with an initial list of objects
|
||||
/// Initializes a new instance of the <see cref="ManyObjectsResolverBase{TResolved}"/> class with an initial list of objects
|
||||
/// with creation of objects based on an HttpRequest lifetime scope.
|
||||
/// </summary>
|
||||
/// <param name="httpContext"></param>
|
||||
/// <param name="value"></param>
|
||||
protected ManyObjectResolverBase(HttpContextBase httpContext, IEnumerable<Type> value)
|
||||
protected ManyObjectsResolverBase(HttpContextBase httpContext, IEnumerable<Type> value)
|
||||
: this(httpContext)
|
||||
{
|
||||
InstanceTypes = new List<Type>(value);
|
||||
@@ -70,7 +70,7 @@
|
||||
<Compile Include="Logging\LogHelper.cs" />
|
||||
<Compile Include="ObjectExtensions.cs" />
|
||||
<Compile Include="RazorDataTypeModelStaticMappingItem.cs" />
|
||||
<Compile Include="Resolving\ManyObjectResolverBase.cs" />
|
||||
<Compile Include="Resolving\ManyObjectsResolverBase.cs" />
|
||||
<Compile Include="Resolving\ObjectLifetimeScope.cs" />
|
||||
<Compile Include="Resolving\SingleObjectResolverBase.cs" />
|
||||
<Compile Include="TypeExtensions.cs" />
|
||||
|
||||
@@ -70,7 +70,7 @@ namespace Umbraco.Tests
|
||||
{
|
||||
}
|
||||
|
||||
private sealed class TransientObjectsResolver : ManyObjectResolverBase<ITestInterface>
|
||||
private sealed class TransientObjectsResolver : ManyObjectsResolverBase<ITestInterface>
|
||||
{
|
||||
public TransientObjectsResolver()
|
||||
: base(ObjectLifetimeScope.Transient)
|
||||
@@ -83,7 +83,7 @@ namespace Umbraco.Tests
|
||||
}
|
||||
}
|
||||
|
||||
private sealed class ApplicationObjectsResolver : ManyObjectResolverBase<ITestInterface>
|
||||
private sealed class ApplicationObjectsResolver : ManyObjectsResolverBase<ITestInterface>
|
||||
{
|
||||
public ApplicationObjectsResolver()
|
||||
: base(ObjectLifetimeScope.Application)
|
||||
@@ -96,7 +96,7 @@ namespace Umbraco.Tests
|
||||
}
|
||||
}
|
||||
|
||||
private sealed class HttpRequestObjectsResolver : ManyObjectResolverBase<ITestInterface>
|
||||
private sealed class HttpRequestObjectsResolver : ManyObjectsResolverBase<ITestInterface>
|
||||
{
|
||||
public HttpRequestObjectsResolver(HttpContextBase httpContext)
|
||||
: base(httpContext)
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using Umbraco.Core.Interfaces;
|
||||
using umbraco.BusinessLogic;
|
||||
using umbraco.BusinessLogic.Utils;
|
||||
|
||||
namespace Umbraco.Web.Media.ThumbnailProviders
|
||||
{
|
||||
public class ThumbnailProviderManager
|
||||
{
|
||||
private const string CacheKey = "ThumbnailProviderCache";
|
||||
|
||||
internal static IEnumerable<IThumbnailProvider> Providers
|
||||
{
|
||||
get
|
||||
{
|
||||
EnsureCache();
|
||||
|
||||
return HttpRuntime.Cache[CacheKey] as List<IThumbnailProvider>;
|
||||
}
|
||||
set
|
||||
{
|
||||
HttpRuntime.Cache.Insert(CacheKey, value);
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetThumbnailUrl(string fileUrl)
|
||||
{
|
||||
var provider = Providers.FirstOrDefault(x => x.CanProvideThumbnail(fileUrl));
|
||||
return provider != null ? provider.GetThumbnailUrl(fileUrl) : string.Empty;
|
||||
}
|
||||
|
||||
private static void EnsureCache()
|
||||
{
|
||||
if (HttpRuntime.Cache[CacheKey] != null)
|
||||
return;
|
||||
|
||||
var providers = new List<IThumbnailProvider>();
|
||||
var types = TypeFinder.FindClassesOfType<IThumbnailProvider>();
|
||||
|
||||
foreach (var t in types)
|
||||
{
|
||||
IThumbnailProvider typeInstance = null;
|
||||
|
||||
try
|
||||
{
|
||||
if (t.IsVisible)
|
||||
{
|
||||
typeInstance = Activator.CreateInstance(t) as IThumbnailProvider;
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
if (typeInstance != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
providers.Add(typeInstance);
|
||||
}
|
||||
catch (Exception ee)
|
||||
{
|
||||
Log.Add(LogTypes.Error, -1, "Can't import IThumbnailProvider '" + t.FullName + "': " + ee);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
providers.Sort((f1, f2) => f1.Priority.CompareTo(f2.Priority));
|
||||
|
||||
Providers = providers;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Interfaces;
|
||||
using Umbraco.Core.Resolving;
|
||||
using umbraco.BusinessLogic;
|
||||
using umbraco.BusinessLogic.Utils;
|
||||
|
||||
namespace Umbraco.Web.Media.ThumbnailProviders
|
||||
{
|
||||
internal sealed class ThumbnailProvidersResolver : ManyObjectsResolverBase<IThumbnailProvider>
|
||||
{
|
||||
|
||||
#region Singleton
|
||||
|
||||
private static readonly ThumbnailProvidersResolver Instance =
|
||||
new ThumbnailProvidersResolver(PluginTypeResolver.Current.ResolveThumbnailProviders());
|
||||
|
||||
public static ThumbnailProvidersResolver Current
|
||||
{
|
||||
get { return Instance; }
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
static ThumbnailProvidersResolver() { }
|
||||
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
/// <param name="providers"></param>
|
||||
internal ThumbnailProvidersResolver(IEnumerable<Type> providers)
|
||||
: base(providers)
|
||||
{
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
public IEnumerable<IThumbnailProvider> Providers
|
||||
{
|
||||
get
|
||||
{
|
||||
var vals = Values.ToList();
|
||||
//ensure they are sorted
|
||||
vals.Sort((f1, f2) => f1.Priority.CompareTo(f2.Priority));
|
||||
return vals;
|
||||
}
|
||||
}
|
||||
|
||||
public string GetThumbnailUrl(string fileUrl)
|
||||
{
|
||||
var provider = Providers.FirstOrDefault(x => x.CanProvideThumbnail(fileUrl));
|
||||
return provider != null ? provider.GetThumbnailUrl(fileUrl) : string.Empty;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Interfaces;
|
||||
using Umbraco.Web.Routing;
|
||||
using umbraco;
|
||||
using umbraco.interfaces;
|
||||
@@ -44,5 +45,15 @@ namespace Umbraco.Web
|
||||
{
|
||||
return resolver.ResolveAttributedTypes<XsltExtensionAttribute>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns all IThumbnailProvider classes
|
||||
/// </summary>
|
||||
/// <param name="resolver"></param>
|
||||
/// <returns></returns>
|
||||
internal static IEnumerable<Type> ResolveThumbnailProviders(this PluginTypeResolver resolver)
|
||||
{
|
||||
return resolver.ResolveTypes<IThumbnailProvider>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ namespace Umbraco.Web.Routing
|
||||
/// <summary>
|
||||
/// A multiply registered resolver to manage all IDocumentLookup objects
|
||||
/// </summary>
|
||||
internal sealed class DocumentLookupsResolver : ManyObjectResolverBase<IDocumentLookup>
|
||||
internal sealed class DocumentLookupsResolver : ManyObjectsResolverBase<IDocumentLookup>
|
||||
{
|
||||
#region Singleton
|
||||
private static readonly DocumentLookupsResolver Instance = new DocumentLookupsResolver(
|
||||
|
||||
@@ -249,7 +249,7 @@
|
||||
<Compile Include="Media\ThumbnailProviders\MediaTypeIconThumbnailProvider.cs" />
|
||||
<Compile Include="Media\ThumbnailProviders\FileExtensionIconThumbnailProvider.cs" />
|
||||
<Compile Include="Media\ThumbnailProviders\ImageThumbnailProvider.cs" />
|
||||
<Compile Include="Media\ThumbnailProviders\ThumbnailProviderManager.cs" />
|
||||
<Compile Include="Media\ThumbnailProviders\ThumbnailProvidersResolver.cs" />
|
||||
<Compile Include="UI\Controls\FolderBrowser.cs" />
|
||||
<Compile Include="Routing\LookupById.cs" />
|
||||
<Compile Include="Routing\LookupByNiceUrl.cs" />
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace Umbraco.Web.WebServices
|
||||
x.PropertyType.DataTypeDefinition.DataType.Id == new Guid("5032a6e6-69e3-491d-bb28-cd31cd11086c"));
|
||||
|
||||
var fileUrl = fileProp != null ? fileProp.Value.ToString() : "";
|
||||
var thumbUrl = ThumbnailProviderManager.GetThumbnailUrl(fileUrl);
|
||||
var thumbUrl = ThumbnailProvidersResolver.Current.GetThumbnailUrl(fileUrl);
|
||||
|
||||
data.Add(new
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user