aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-02-28 23:13:22 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-02-28 23:13:22 -0500
commitc2e51df31df8b112fe2750ce02a4dd210fccf937 (patch)
tree82cfcb0d3d0d7bb681afe555d8aaef8429d352da
parentb9aa38b5ab326aeb61921116fe6a27c62b8bf63c (diff)
add custom providers that can run before refresh chain
-rw-r--r--MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs5
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs24
2 files changed, 28 insertions, 1 deletions
diff --git a/MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs b/MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs
index c98810cbc..9aed4d921 100644
--- a/MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs
+++ b/MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs
@@ -14,4 +14,9 @@ namespace MediaBrowser.Controller.Providers
{
Task<ItemUpdateType> FetchAsync(TItemType item, IDirectoryService directoryService, CancellationToken cancellationToken);
}
+
+ public interface IPreRefreshProvider : ICustomMetadataProvider
+ {
+
+ }
}
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index eb2d7d747..e9dec7f6d 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -269,6 +269,13 @@ namespace MediaBrowser.Providers.Manager
Providers = providers.Select(i => i.GetType().FullName.GetMD5()).ToList()
};
+ var customProviders = providers.OfType<ICustomMetadataProvider<TItemType>>().ToList();
+
+ foreach (var provider in customProviders.Where(i => i is IPreRefreshProvider))
+ {
+ await RunCustomProvider(provider, item, options.DirectoryService, refreshResult, cancellationToken).ConfigureAwait(false);
+ }
+
var temp = CreateNew();
temp.Path = item.Path;
@@ -342,7 +349,7 @@ namespace MediaBrowser.Providers.Manager
MergeData(temp, item, item.LockedFields, true, true);
}
- foreach (var provider in providers.OfType<ICustomMetadataProvider<TItemType>>())
+ foreach (var provider in customProviders.Where(i => !(i is IPreRefreshProvider)))
{
await RunCustomProvider(provider, item, options.DirectoryService, refreshResult, cancellationToken).ConfigureAwait(false);
}
@@ -379,6 +386,9 @@ namespace MediaBrowser.Providers.Manager
{
TIdType id = null;
+ var unidentifiedCount = 0;
+ var identifiedCount = 0;
+
foreach (var provider in providers)
{
var providerName = provider.GetType().Name;
@@ -402,9 +412,12 @@ namespace MediaBrowser.Providers.Manager
MergeData(result.Item, temp, new List<MetadataFields>(), false, false);
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataDownload;
+
+ identifiedCount++;
}
else
{
+ unidentifiedCount++;
Logger.Debug("{0} returned no metadata for {1}", providerName, item.Path ?? item.Name);
}
}
@@ -414,11 +427,20 @@ namespace MediaBrowser.Providers.Manager
}
catch (Exception ex)
{
+ unidentifiedCount++;
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;
+ }
}
private void MergeNewData(TItemType source, TIdType lookupInfo)