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-20 11:55:05 -0400
committerLukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com>2012-08-20 11:55:05 -0400
commit8f024e81996b14a9e6a440a601d0f6c0694f7ab8 (patch)
treeb7bb10bde396608e11c0bac9c4ed706508f1a003 /MediaBrowser.Controller/Kernel.cs
parent19a4dd83c21db931edf14a0ef547219ef93cdc84 (diff)
Fully async'd xml parsing process as well as added resolver and provider priorities
Diffstat (limited to 'MediaBrowser.Controller/Kernel.cs')
-rw-r--r--MediaBrowser.Controller/Kernel.cs74
1 files changed, 33 insertions, 41 deletions
diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs
index da0263f6f..9e31a5d6c 100644
--- a/MediaBrowser.Controller/Kernel.cs
+++ b/MediaBrowser.Controller/Kernel.cs
@@ -86,42 +86,10 @@ namespace MediaBrowser.Controller
protected override void OnComposablePartsLoaded()
{
- AddCoreResolvers();
- AddCoreProviders();
-
// The base class will start up all the plugins
base.OnComposablePartsLoaded();
- }
-
- private void AddCoreResolvers()
- {
- List<IBaseItemResolver> list = EntityResolvers.ToList();
-
- // Add the core resolvers
- list.AddRange(new IBaseItemResolver[]{
- new AudioResolver(),
- new VideoResolver(),
- new VirtualFolderResolver(),
- new FolderResolver()
- });
-
- EntityResolvers = list;
- }
-
- private void AddCoreProviders()
- {
- List<BaseMetadataProvider> list = MetadataProviders.ToList();
-
- // Add the core resolvers
- list.InsertRange(0, new BaseMetadataProvider[]{
- new ImageFromMediaLocationProvider(),
- new LocalTrailerProvider(),
- new AudioInfoProvider(),
- new FolderProviderFromXml()
- });
-
- MetadataProviders = list;
-
+
+ // Initialize the metadata providers
Parallel.ForEach(MetadataProviders, provider =>
{
provider.Init();
@@ -264,19 +232,43 @@ namespace MediaBrowser.Controller
// Get all supported providers
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))
+ // First priority providers
+ var providers = supportedProviders.Where(i => !i.RequiresInternet && i.Priority == MetadataProviderPriority.First);
+
+ if (providers.Any())
{
- await provider.Fetch(item, args);
+ await Task.WhenAll(
+ providers.Select(i => i.Fetch(item, args))
+ );
+ }
+
+ // Second priority providers
+ providers = supportedProviders.Where(i => !i.RequiresInternet && i.Priority == MetadataProviderPriority.Second);
+
+ if (providers.Any())
+ {
+ await Task.WhenAll(
+ providers.Select(i => i.Fetch(item, args))
+ );
}
- var internetProviders = supportedProviders.Where(i => i.RequiresInternet);
+ // Lowest priority providers
+ providers = supportedProviders.Where(i => !i.RequiresInternet && i.Priority == MetadataProviderPriority.Last);
+
+ if (providers.Any())
+ {
+ await Task.WhenAll(
+ providers.Select(i => i.Fetch(item, args))
+ );
+ }
+
+ // Execute internet providers
+ providers = supportedProviders.Where(i => i.RequiresInternet);
- if (internetProviders.Any())
+ if (providers.Any())
{
- // Now execute internet providers in parallel
await Task.WhenAll(
- internetProviders.Select(i => i.Fetch(item, args))
+ providers.Select(i => i.Fetch(item, args))
);
}
}