aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Manager/MetadataService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Manager/MetadataService.cs')
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs55
1 files changed, 39 insertions, 16 deletions
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index 7feca2d34..91466c655 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -295,11 +295,19 @@ namespace MediaBrowser.Providers.Manager
var temp = CreateNew();
temp.Path = item.Path;
+ var successfulProviderCount = 0;
+ var failedProviderCount = 0;
// If replacing all metadata, run internet providers first
if (options.ReplaceAllMetadata)
{
- await ExecuteRemoteProviders(item, temp, id, providers.OfType<IRemoteMetadataProvider<TItemType, TIdType>>(), refreshResult, cancellationToken).ConfigureAwait(false);
+ var remoteResult = await ExecuteRemoteProviders(item, temp, id, providers.OfType<IRemoteMetadataProvider<TItemType, TIdType>>(), cancellationToken)
+ .ConfigureAwait(false);
+ refreshResult.UpdateType = refreshResult.UpdateType | remoteResult.UpdateType;
+ refreshResult.Status = remoteResult.Status;
+ refreshResult.ErrorMessage = remoteResult.ErrorMessage;
+ successfulProviderCount += remoteResult.Successes;
+ failedProviderCount += remoteResult.Failures;
}
var hasLocalMetadata = false;
@@ -327,10 +335,11 @@ namespace MediaBrowser.Providers.Manager
// Only one local provider allowed per item
hasLocalMetadata = true;
- item.IsUnidentified = false;
+ successfulProviderCount++;
break;
}
+ failedProviderCount++;
Logger.Debug("{0} returned no metadata for {1}", providerName, item.Path ?? item.Name);
}
catch (OperationCanceledException)
@@ -339,6 +348,8 @@ namespace MediaBrowser.Providers.Manager
}
catch (Exception ex)
{
+ failedProviderCount++;
+
Logger.ErrorException("Error in {0}", ex, provider.Name);
// If a local provider fails, consider that a failure
@@ -356,7 +367,16 @@ 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, id, providers.OfType<IRemoteMetadataProvider<TItemType, TIdType>>(), refreshResult, cancellationToken).ConfigureAwait(false);
+ var remoteResult = await ExecuteRemoteProviders(item, temp, id, providers.OfType<IRemoteMetadataProvider<TItemType, TIdType>>(), cancellationToken)
+ .ConfigureAwait(false);
+
+ refreshResult.UpdateType = refreshResult.UpdateType | remoteResult.UpdateType;
+ if (remoteResult.Status != ProviderRefreshStatus.Success)
+ {
+ refreshResult.Status = remoteResult.Status;
+ refreshResult.ErrorMessage = remoteResult.ErrorMessage;
+ }
+ successfulProviderCount += remoteResult.Successes;
}
if (refreshResult.UpdateType > ItemUpdateType.None)
@@ -364,6 +384,14 @@ namespace MediaBrowser.Providers.Manager
MergeData(temp, item, item.LockedFields, true, true);
}
+ var isUnidentified = failedProviderCount > 0 && successfulProviderCount == 0;
+
+ if (item.IsUnidentified != isUnidentified)
+ {
+ item.IsUnidentified = isUnidentified;
+ refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataImport;
+ }
+
foreach (var provider in customProviders.Where(i => !(i is IPreRefreshProvider)))
{
await RunCustomProvider(provider, item, options, refreshResult, cancellationToken).ConfigureAwait(false);
@@ -397,10 +425,9 @@ namespace MediaBrowser.Providers.Manager
return new TItemType();
}
- private async Task ExecuteRemoteProviders(TItemType item, TItemType temp, TIdType id, IEnumerable<IRemoteMetadataProvider<TItemType, TIdType>> providers, RefreshResult refreshResult, CancellationToken cancellationToken)
+ private async Task<RefreshResult> ExecuteRemoteProviders(TItemType item, TItemType temp, TIdType id, IEnumerable<IRemoteMetadataProvider<TItemType, TIdType>> providers, CancellationToken cancellationToken)
{
- var unidentifiedCount = 0;
- var identifiedCount = 0;
+ var refreshResult = new RefreshResult();
foreach (var provider in providers)
{
@@ -422,11 +449,11 @@ namespace MediaBrowser.Providers.Manager
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataDownload;
- identifiedCount++;
+ refreshResult.Successes++;
}
else
{
- unidentifiedCount++;
+ refreshResult.Failures++;
Logger.Debug("{0} returned no metadata for {1}", providerName, item.Path ?? item.Name);
}
}
@@ -436,20 +463,14 @@ namespace MediaBrowser.Providers.Manager
}
catch (Exception ex)
{
- unidentifiedCount++;
+ refreshResult.Failures++;
refreshResult.Status = ProviderRefreshStatus.CompletedWithErrors;
refreshResult.ErrorMessage = ex.Message;
Logger.ErrorException("Error in {0}", ex, provider.Name);
}
}
- var isUnidentified = unidentifiedCount > 0 && identifiedCount == 0;
-
- if (item.IsUnidentified != isUnidentified)
- {
- item.IsUnidentified = isUnidentified;
- refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataImport;
- }
+ return refreshResult;
}
private async Task<TIdType> CreateInitialLookupInfo(TItemType item, CancellationToken cancellationToken)
@@ -510,5 +531,7 @@ namespace MediaBrowser.Providers.Manager
public ProviderRefreshStatus Status { get; set; }
public string ErrorMessage { get; set; }
public List<Guid> Providers { get; set; }
+ public int Successes { get; set; }
+ public int Failures { get; set; }
}
}