|
@@ -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 TIdType : ItemId, new()
|
|
|
|
|
|
+ where TItemType : IHasMetadata, IHasLookupInfo<TIdType>, new()
|
|
|
|
+ where TIdType : ItemLookupInfo, 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);
|