diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-06-13 10:24:34 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-06-13 10:24:34 -0400 |
| commit | ffc4db41282be2d0762cbd198f14bbe0c9bd1540 (patch) | |
| tree | 6267717daada8d8c6f4b84fffc3e23ed516cfd8a /MediaBrowser.Providers/Manager | |
| parent | 6186618f3ef6739f2cb0ff05f10ec17935b14d99 (diff) | |
| parent | f0d8dbefdbe49361563ec9d56cba5fbae542b015 (diff) | |
Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser
Conflicts:
MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs
Diffstat (limited to 'MediaBrowser.Providers/Manager')
| -rw-r--r-- | MediaBrowser.Providers/Manager/MetadataService.cs | 51 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Manager/ProviderManager.cs | 26 |
2 files changed, 62 insertions, 15 deletions
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index e40f49acfc..717b935243 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -104,6 +104,9 @@ namespace MediaBrowser.Providers.Manager refreshResult.AddStatus(ProviderRefreshStatus.Failure, ex.Message); } + // Identify item + TIdType id = null; + // Next run metadata providers if (refreshOptions.MetadataRefreshMode != MetadataRefreshMode.None) { @@ -120,7 +123,8 @@ namespace MediaBrowser.Providers.Manager if (providers.Count > 0) { - var result = await RefreshWithProviders(itemOfType, refreshOptions, providers, itemImageProvider, cancellationToken).ConfigureAwait(false); + id = await CreateInitialLookupInfo(itemOfType, cancellationToken).ConfigureAwait(false); + var result = await RefreshWithProviders(itemOfType, id, refreshOptions, providers, itemImageProvider, cancellationToken).ConfigureAwait(false); updateType = updateType | result.UpdateType; refreshResult.AddStatus(result.Status, result.ErrorMessage); @@ -129,6 +133,13 @@ namespace MediaBrowser.Providers.Manager } } + if (id == null) + { + id = await CreateInitialLookupInfo(itemOfType, cancellationToken).ConfigureAwait(false); + } + + MergeIdentities(itemOfType, id); + // Next run remote image providers, but only if local image providers didn't throw an exception if (!localImagesFailed && refreshOptions.ImageRefreshMode != ImageRefreshMode.ValidationOnly) { @@ -162,6 +173,15 @@ namespace MediaBrowser.Providers.Manager } } + private void MergeIdentities(TItemType item, TIdType id) + { + var hasIdentity = id as IHasIdentities<IItemIdentity>; + if (hasIdentity != null) + { + item.Identities = hasIdentity.Identities.ToList(); + } + } + /// <summary> /// Befores the save. /// </summary> @@ -259,7 +279,7 @@ namespace MediaBrowser.Providers.Manager return item is TItemType; } - protected virtual async Task<RefreshResult> RefreshWithProviders(TItemType item, MetadataRefreshOptions options, List<IMetadataProvider> providers, ItemImageProvider imageService, CancellationToken cancellationToken) + protected virtual async Task<RefreshResult> RefreshWithProviders(TItemType item, TIdType id, MetadataRefreshOptions options, List<IMetadataProvider> providers, ItemImageProvider imageService, CancellationToken cancellationToken) { var refreshResult = new RefreshResult { @@ -280,7 +300,7 @@ namespace MediaBrowser.Providers.Manager // If replacing all metadata, run internet providers first if (options.ReplaceAllMetadata) { - await ExecuteRemoteProviders(item, temp, providers.OfType<IRemoteMetadataProvider<TItemType, TIdType>>(), refreshResult, cancellationToken).ConfigureAwait(false); + await ExecuteRemoteProviders(item, temp, id, providers.OfType<IRemoteMetadataProvider<TItemType, TIdType>>(), refreshResult, cancellationToken).ConfigureAwait(false); } var hasLocalMetadata = false; @@ -333,7 +353,7 @@ namespace MediaBrowser.Providers.Manager // Local metadata is king - if any is found don't run remote providers if (!options.ReplaceAllMetadata && (!hasLocalMetadata || options.MetadataRefreshMode == MetadataRefreshMode.FullRefresh)) { - await ExecuteRemoteProviders(item, temp, providers.OfType<IRemoteMetadataProvider<TItemType, TIdType>>(), refreshResult, cancellationToken).ConfigureAwait(false); + await ExecuteRemoteProviders(item, temp, id, providers.OfType<IRemoteMetadataProvider<TItemType, TIdType>>(), refreshResult, cancellationToken).ConfigureAwait(false); } if (refreshResult.UpdateType > ItemUpdateType.None) @@ -374,10 +394,8 @@ namespace MediaBrowser.Providers.Manager return new TItemType(); } - private async Task ExecuteRemoteProviders(TItemType item, TItemType temp, IEnumerable<IRemoteMetadataProvider<TItemType, TIdType>> providers, RefreshResult refreshResult, CancellationToken cancellationToken) + private async Task ExecuteRemoteProviders(TItemType item, TItemType temp, TIdType id, IEnumerable<IRemoteMetadataProvider<TItemType, TIdType>> providers, RefreshResult refreshResult, CancellationToken cancellationToken) { - TIdType id = null; - var unidentifiedCount = 0; var identifiedCount = 0; @@ -386,11 +404,7 @@ namespace MediaBrowser.Providers.Manager var providerName = provider.GetType().Name; Logger.Debug("Running {0} for {1}", providerName, item.Path ?? item.Name); - if (id == null) - { - id = item.GetLookupInfo(); - } - else + if (id != null) { MergeNewData(temp, id); } @@ -435,6 +449,19 @@ namespace MediaBrowser.Providers.Manager } } + private async Task<TIdType> CreateInitialLookupInfo(TItemType item, CancellationToken cancellationToken) + { + var info = item.GetLookupInfo(); + + var hasIdentity = info as IHasIdentities<IItemIdentity>; + if (hasIdentity != null) + { + await hasIdentity.FindIdentities(ProviderManager, cancellationToken).ConfigureAwait(false); + } + + return info; + } + private void MergeNewData(TItemType source, TIdType lookupInfo) { // Copy new provider id's that may have been obtained diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index 864435e404..6f33de67f7 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -53,6 +53,8 @@ namespace MediaBrowser.Providers.Manager private readonly IFileSystem _fileSystem; private IMetadataService[] _metadataServices = { }; + private IItemIdentityProvider[] _identityProviders = { }; + private IItemIdentityConverter[] _identityConverters = { }; private IMetadataProvider[] _metadataProviders = { }; private IEnumerable<IMetadataSaver> _savers; private IImageSaver[] _imageSavers; @@ -81,17 +83,22 @@ namespace MediaBrowser.Providers.Manager /// </summary> /// <param name="imageProviders">The image providers.</param> /// <param name="metadataServices">The metadata services.</param> + /// <param name="identityProviders">The identity providers.</param> + /// <param name="identityConverters">The identity converters.</param> /// <param name="metadataProviders">The metadata providers.</param> /// <param name="metadataSavers">The metadata savers.</param> /// <param name="imageSavers">The image savers.</param> /// <param name="externalIds">The external ids.</param> - public void AddParts(IEnumerable<IImageProvider> imageProviders, IEnumerable<IMetadataService> metadataServices, IEnumerable<IMetadataProvider> metadataProviders, IEnumerable<IMetadataSaver> metadataSavers, - IEnumerable<IImageSaver> imageSavers, - IEnumerable<IExternalId> externalIds) + public void AddParts(IEnumerable<IImageProvider> imageProviders, IEnumerable<IMetadataService> metadataServices, + IEnumerable<IItemIdentityProvider> identityProviders, IEnumerable<IItemIdentityConverter> identityConverters, + IEnumerable<IMetadataProvider> metadataProviders, IEnumerable<IMetadataSaver> metadataSavers, + IEnumerable<IImageSaver> imageSavers, IEnumerable<IExternalId> externalIds) { ImageProviders = imageProviders.ToArray(); _metadataServices = metadataServices.OrderBy(i => i.Order).ToArray(); + _identityProviders = identityProviders.ToArray(); + _identityConverters = identityConverters.ToArray(); _metadataProviders = metadataProviders.ToArray(); _savers = metadataSavers.ToArray(); _imageSavers = imageSavers.ToArray(); @@ -257,6 +264,19 @@ namespace MediaBrowser.Providers.Manager .ThenBy(GetDefaultOrder); } + public IEnumerable<IItemIdentityProvider<TLookupInfo, TIdentity>> GetItemIdentityProviders<TLookupInfo, TIdentity>() + where TLookupInfo : ItemLookupInfo + where TIdentity : IItemIdentity + { + return _identityProviders.OfType<IItemIdentityProvider<TLookupInfo, TIdentity>>(); + } + + public IEnumerable<IItemIdentityConverter<TIdentity>> GetItemIdentityConverters<TIdentity>() + where TIdentity : IItemIdentity + { + return _identityConverters.OfType<IItemIdentityConverter<TIdentity>>(); + } + private IEnumerable<IRemoteImageProvider> GetRemoteImageProviders(IHasImages item, bool includeDisabled) { var options = GetMetadataOptions(item); |
