aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Kernel.cs
diff options
context:
space:
mode:
authorLukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com>2012-08-19 16:38:31 -0400
committerLukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com>2012-08-19 16:38:31 -0400
commit937d27ae9d6aa571ab9327f138bfba1b84c158db (patch)
tree94be178039621ea6d6235967414b0849912af4ed /MediaBrowser.Controller/Kernel.cs
parent64887fa74347260d44a8cb5cc7058cd22b08c1c5 (diff)
One async call leads to another, and another, all the way up the call stack...
Diffstat (limited to 'MediaBrowser.Controller/Kernel.cs')
-rw-r--r--MediaBrowser.Controller/Kernel.cs42
1 files changed, 42 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs
index b696abef5..57e30479b 100644
--- a/MediaBrowser.Controller/Kernel.cs
+++ b/MediaBrowser.Controller/Kernel.cs
@@ -248,5 +248,47 @@ namespace MediaBrowser.Controller
return list;
}
+
+ internal async Task ExecuteMetadataProviders(BaseEntity item, ItemResolveEventArgs args)
+ {
+ var supportedProviders = Kernel.Instance.MetadataProviders.Where(i => i.Supports(item));
+
+ // Start with non-internet providers. Run them sequentially
+ foreach (BaseMetadataProvider provider in supportedProviders.Where(i => !i.RequiresInternet))
+ {
+ await provider.Fetch(item, args);
+ }
+
+ var internetProviders = supportedProviders.Where(i => i.RequiresInternet);
+
+ if (internetProviders.Any())
+ {
+ // Now execute internet providers in parallel
+ await Task.WhenAll(
+ internetProviders.Select(i => i.Fetch(item, args))
+ );
+ }
+ }
+
+ protected override void DisposeComposableParts()
+ {
+ base.DisposeComposableParts();
+
+ DisposeProviders();
+ }
+
+ /// <summary>
+ /// Disposes all providers
+ /// </summary>
+ private void DisposeProviders()
+ {
+ if (MetadataProviders != null)
+ {
+ foreach (var provider in MetadataProviders)
+ {
+ provider.Dispose();
+ }
+ }
+ }
}
}