@ -211,7 +211,7 @@ namespace MediaBrowser.Providers.Manager
/// <returns>Task{IEnumerable{RemoteImageInfo}}.</returns>
public async Task < IEnumerable < RemoteImageInfo > > GetAvailableRemoteImages ( IHasImages item , CancellationToken cancellationToken , string providerName = null , ImageType ? type = null )
{
var providers = GetRemoteImageProviders ( item );
var providers = GetRemoteImageProviders ( item , true );
if ( ! string . IsNullOrEmpty ( providerName ) )
{
@ -277,27 +277,38 @@ namespace MediaBrowser.Providers.Manager
/// <returns>IEnumerable{IImageProvider}.</returns>
public IEnumerable < ImageProviderInfo > GetRemoteImageProviderInfo ( IHasImages item )
{
return GetRemoteImageProviders ( item ). Select ( i = > new ImageProviderInfo
return GetRemoteImageProviders ( item , true ). Select ( i = > new ImageProviderInfo
{
Name = i . Name
Name = i . Name ,
SupportedImages = i . GetSupportedImages ( item ) . ToList ( )
} ) ;
}
public IEnumerable < IImageProvider > GetImageProviders ( IHasImages item )
{
return ImageProviders . Where ( i = >
return GetImageProviders ( item , GetMetadataOptions ( item ) , false ) ;
}
private IEnumerable < IImageProvider > GetImageProviders ( IHasImages item , MetadataOptions options , bool includeDisabled )
{
return ImageProviders . Where ( i = > CanRefresh ( i , item , options , includeDisabled ) )
. OrderBy ( i = >
{
try
// See if there's a user-defined order
if ( ! ( i is ILocalImageProvider ) )
{
return i . Supports ( item ) ;
}
catch ( Exception ex )
{
_logger . ErrorException ( "{0} failed in Supports for type {1}" , ex , i . GetType ( ) . Name , item . GetType ( ) . Name ) ;
return false ;
var index = Array . IndexOf ( options . ImageFetcherOrder , i . Name ) ;
if ( index ! = - 1 )
{
return index ;
}
}
} ) . OrderBy ( GetOrder ) ;
// Not configured. Just return some high number to put it at the end.
return 100 ;
} )
. ThenBy ( GetOrder ) ;
}
public IEnumerable < IMetadataProvider < T > > GetMetadataProviders < T > ( IHasMetadata item )
@ -312,13 +323,13 @@ namespace MediaBrowser.Providers.Manager
where T : IHasMetadata
{
return _metadataProviders . OfType < IMetadataProvider < T > > ( )
. Where ( i = > CanRefresh ( i , item , includeDisabled) )
. Where ( i = > CanRefresh ( i , item , options, includeDisabled) )
. OrderBy ( i = >
{
// See if there's a user-defined order
if ( i is ILocalMetadataProvider )
{
var index = Array . IndexOf ( options . LocalMetadataReader s , i . Name ) ;
var index = Array . IndexOf ( options . LocalMetadataReader Order , i . Name ) ;
if ( index ! = - 1 )
{
@ -326,29 +337,46 @@ namespace MediaBrowser.Providers.Manager
}
}
// See if there's a user-defined order
if ( i is IRemoteMetadataProvider )
{
var index = Array . IndexOf ( options . MetadataFetcherOrder , i . Name ) ;
if ( index ! = - 1 )
{
return index ;
}
}
// Not configured. Just return some high number to put it at the end.
return 100 ;
} )
. ThenBy ( GetOrder ) ;
}
private IEnumerable < IRemoteImageProvider > GetRemoteImageProviders ( IHasImages item )
private IEnumerable < IRemoteImageProvider > GetRemoteImageProviders ( IHasImages item , bool includeDisabled )
{
return GetImageProviders ( item ) . OfType < IRemoteImageProvider > ( ) ;
var options = GetMetadataOptions ( item ) ;
return GetImageProviders ( item , options , includeDisabled ) . OfType < IRemoteImageProvider > ( ) ;
}
/// <summary>
/// Determines whether this instance can refresh the specified provider.
/// </summary>
/// <param name="provider">The provider.</param>
/// <param name="item">The item.</param>
/// <param name="includeDisabled">if set to <c>true</c> [include disabled].</param>
/// <returns><c>true</c> if this instance can refresh the specified provider; otherwise, <c>false</c>.</returns>
private bool CanRefresh ( IMetadataProvider provider , IHasMetadata item , bool includeDisabled )
private bool CanRefresh ( IMetadataProvider provider , IHasMetadata item , MetadataOptions options , bool includeDisabled )
{
if ( ! includeDisabled & & ! ConfigurationManager . Configuration . EnableInternetProviders & & provider is IRemoteMetadataProvider )
if ( ! includeDisabled )
{
return false ;
if ( provider is IRemoteMetadataProvider )
{
if ( ! ConfigurationManager . Configuration . EnableInternetProviders )
{
return false ;
}
if ( Array . IndexOf ( options . DisabledMetadataFetchers , provider . Name ) ! = - 1 )
{
return false ;
}
}
}
if ( ! item . SupportsLocalMetadata & & provider is ILocalMetadataProvider )
@ -368,6 +396,40 @@ namespace MediaBrowser.Providers.Manager
return true ;
}
private bool CanRefresh ( IImageProvider provider , IHasImages item , MetadataOptions options , bool includeDisabled )
{
if ( ! includeDisabled )
{
if ( provider is IRemoteImageProvider )
{
if ( ! ConfigurationManager . Configuration . EnableInternetProviders )
{
return false ;
}
if ( Array . IndexOf ( options . DisabledImageFetchers , provider . Name ) ! = - 1 )
{
return false ;
}
}
}
if ( ! item . SupportsLocalMetadata & & provider is ILocalImageProvider )
{
return false ;
}
try
{
return provider . Supports ( item ) ;
}
catch ( Exception ex )
{
_logger . ErrorException ( "{0} failed in Supports for type {1}" , ex , provider . GetType ( ) . Name , item . GetType ( ) . Name ) ;
return false ;
}
}
/// <summary>
/// Gets the order.
/// </summary>
@ -454,7 +516,7 @@ namespace MediaBrowser.Providers.Manager
ItemType = typeof ( T ) . Name
} ;
var imageProviders = GetImageProviders ( dummy ). ToList ( ) ;
var imageProviders = GetImageProviders ( dummy , options , true ). ToList ( ) ;
AddMetadataPlugins ( summary . Plugins , dummy , options ) ;
AddImagePlugins ( summary . Plugins , dummy , imageProviders ) ;
@ -513,7 +575,7 @@ namespace MediaBrowser.Providers.Manager
} ) ) ;
}
public MetadataOptions GetMetadataOptions ( IHas Metadata item )
public MetadataOptions GetMetadataOptions ( IHas Images item )
{
var type = item . GetType ( ) . Name ;