@ -16,8 +16,8 @@ using System.Threading.Tasks;
namespace MediaBrowser.Providers.Manager
namespace MediaBrowser.Providers.Manager
{
{
public abstract class MetadataService < TItemType , TIdType > : IMetadataService
public abstract class MetadataService < TItemType , TIdType > : IMetadataService
where TItemType : IHasMetadata , new ( )
where TItemType : IHasMetadata , IHasLookupInfo < TIdType > , new ( )
where TIdType : Item Id , new ( )
where TIdType : Item LookupInfo , new ( )
{
{
protected readonly IServerConfigurationManager ServerConfigurationManager ;
protected readonly IServerConfigurationManager ServerConfigurationManager ;
protected readonly ILogger Logger ;
protected readonly ILogger Logger ;
@ -238,27 +238,6 @@ namespace MediaBrowser.Providers.Manager
protected abstract Task SaveItem ( TItemType item , ItemUpdateType reason , CancellationToken cancellationToken ) ;
protected abstract Task SaveItem ( TItemType item , ItemUpdateType reason , CancellationToken cancellationToken ) ;
protected virtual TIdType GetId ( TItemType item )
{
var id = new TIdType
{
MetadataCountryCode = item . GetPreferredMetadataCountryCode ( ) ,
MetadataLanguage = item . GetPreferredMetadataLanguage ( ) ,
Name = item . Name ,
ProviderIds = item . ProviderIds
} ;
var baseItem = item as BaseItem ;
if ( baseItem ! = null )
{
id . IndexNumber = baseItem . IndexNumber ;
id . ParentIndexNumber = baseItem . ParentIndexNumber ;
}
return id ;
}
public bool CanRefresh ( IHasMetadata item )
public bool CanRefresh ( IHasMetadata item )
{
{
return item is TItemType ;
return item is TItemType ;
@ -278,7 +257,7 @@ namespace MediaBrowser.Providers.Manager
// If replacing all metadata, run internet providers first
// If replacing all metadata, run internet providers first
if ( options . ReplaceAllMetadata )
if ( options . ReplaceAllMetadata )
{
{
await ExecuteRemoteProviders ( item , temp , providers . OfType < IRemoteMetadataProvider < TItemType >> ( ) , refreshResult , cancellationToken ) . ConfigureAwait ( false ) ;
await ExecuteRemoteProviders ( item , temp , providers . OfType < IRemoteMetadataProvider < TItemType , TIdType >> ( ) , refreshResult , cancellationToken ) . ConfigureAwait ( false ) ;
}
}
var hasLocalMetadata = false ;
var hasLocalMetadata = false ;
@ -326,7 +305,7 @@ namespace MediaBrowser.Providers.Manager
if ( ! options . ReplaceAllMetadata & & ! hasLocalMetadata )
if ( ! options . ReplaceAllMetadata & & ! hasLocalMetadata )
{
{
await ExecuteRemoteProviders ( item , temp , providers . OfType < IRemoteMetadataProvider < TItemType >> ( ) , refreshResult , cancellationToken ) . ConfigureAwait ( false ) ;
await ExecuteRemoteProviders ( item , temp , providers . OfType < IRemoteMetadataProvider < TItemType , TIdType >> ( ) , refreshResult , cancellationToken ) . ConfigureAwait ( false ) ;
}
}
if ( refreshResult . UpdateType > ItemUpdateType . Unspecified )
if ( refreshResult . UpdateType > ItemUpdateType . Unspecified )
@ -367,14 +346,16 @@ namespace MediaBrowser.Providers.Manager
return new TItemType ( ) ;
return new TItemType ( ) ;
}
}
private async Task ExecuteRemoteProviders ( TItemType item , TItemType temp , IEnumerable < IRemoteMetadataProvider < TItemType >> providers , RefreshResult refreshResult , CancellationToken cancellationToken )
private async Task ExecuteRemoteProviders ( TItemType item , TItemType temp , IEnumerable < IRemoteMetadataProvider < TItemType , TIdType >> providers , RefreshResult refreshResult , CancellationToken cancellationToken )
{
{
var id = GetId ( item ) ;
TIdType id = null ;
foreach ( var provider in providers )
foreach ( var provider in providers )
{
{
Logger . Debug ( "Running {0} for {1}" , provider . GetType ( ) . Name , item . Path ? ? item . Name ) ;
Logger . Debug ( "Running {0} for {1}" , provider . GetType ( ) . Name , item . Path ? ? item . Name ) ;
id = id ? ? item . GetLookupInfo ( ) ;
try
try
{
{
var result = await provider . GetMetadata ( id , cancellationToken ) . ConfigureAwait ( false ) ;
var result = await provider . GetMetadata ( id , cancellationToken ) . ConfigureAwait ( false ) ;