aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Manager/ProviderManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Manager/ProviderManager.cs')
-rw-r--r--MediaBrowser.Providers/Manager/ProviderManager.cs78
1 files changed, 22 insertions, 56 deletions
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index 633b3b1db..82d633e23 100644
--- a/MediaBrowser.Providers/Manager/ProviderManager.cs
+++ b/MediaBrowser.Providers/Manager/ProviderManager.cs
@@ -323,20 +323,7 @@ namespace MediaBrowser.Providers.Manager
return _imageProviders.Where(i => CanRefreshImages(i, item, libraryOptions, refreshOptions, includeDisabled))
.OrderBy(i => GetConfiguredOrder(fetcherOrder, i.Name))
- .ThenBy(GetOrder);
- }
-
- private static int GetConfiguredOrder(string[] order, string providerName)
- {
- var index = Array.IndexOf(order, providerName);
-
- if (index != -1)
- {
- return index;
- }
-
- // default to end
- return int.MaxValue;
+ .ThenBy(GetDefaultOrder);
}
/// <inheritdoc />
@@ -351,12 +338,23 @@ namespace MediaBrowser.Providers.Manager
private IEnumerable<IMetadataProvider<T>> GetMetadataProvidersInternal<T>(BaseItem item, LibraryOptions libraryOptions, MetadataOptions globalMetadataOptions, bool includeDisabled, bool forceEnableInternetMetadata)
where T : BaseItem
{
- // Avoid implicitly captured closure
- var currentOptions = globalMetadataOptions;
+ var localMetadataReaderOrder = libraryOptions.LocalMetadataReaderOrder ?? globalMetadataOptions.LocalMetadataReaderOrder;
+ var typeOptions = libraryOptions.GetTypeOptions(item.GetType().Name);
+ var metadataFetcherOrder = typeOptions?.MetadataFetcherOrder ?? globalMetadataOptions.MetadataFetcherOrder;
return _metadataProviders.OfType<IMetadataProvider<T>>()
.Where(i => CanRefreshMetadata(i, item, libraryOptions, includeDisabled, forceEnableInternetMetadata))
- .OrderBy(i => GetConfiguredOrder(item, i, libraryOptions, currentOptions))
+ .OrderBy(i =>
+ {
+ // local and remote providers will be interleaved in the final order
+ // only relative order within a type matters: consumers of the list filter to one or the other
+ switch (i)
+ {
+ case ILocalMetadataProvider: return GetConfiguredOrder(localMetadataReaderOrder, i.Name);
+ case IRemoteMetadataProvider: return GetConfiguredOrder(metadataFetcherOrder, i.Name);
+ default: return int.MaxValue; // default to end
+ }
+ })
.ThenBy(GetDefaultOrder);
}
@@ -439,42 +437,20 @@ namespace MediaBrowser.Providers.Manager
}
}
- private int GetConfiguredOrder(BaseItem item, IMetadataProvider provider, LibraryOptions libraryOptions, MetadataOptions globalMetadataOptions)
+ private static int GetConfiguredOrder(string[] order, string providerName)
{
- // See if there's a user-defined order
- if (provider is ILocalMetadataProvider)
- {
- var configuredOrder = libraryOptions.LocalMetadataReaderOrder ?? globalMetadataOptions.LocalMetadataReaderOrder;
-
- var index = Array.IndexOf(configuredOrder, provider.Name);
-
- if (index != -1)
- {
- return index;
- }
- }
+ var index = Array.IndexOf(order, providerName);
- // See if there's a user-defined order
- if (provider is IRemoteMetadataProvider)
+ if (index != -1)
{
- var typeOptions = libraryOptions.GetTypeOptions(item.GetType().Name);
- var typeFetcherOrder = typeOptions?.MetadataFetcherOrder;
-
- var fetcherOrder = typeFetcherOrder ?? globalMetadataOptions.MetadataFetcherOrder;
-
- var index = Array.IndexOf(fetcherOrder, provider.Name);
-
- if (index != -1)
- {
- return index;
- }
+ return index;
}
- // Not configured. Just return some high number to put it at the end.
- return 100;
+ // default to end
+ return int.MaxValue;
}
- private static int GetOrder(object provider)
+ private static int GetDefaultOrder(object provider)
{
if (provider is IHasOrder hasOrder)
{
@@ -485,16 +461,6 @@ namespace MediaBrowser.Providers.Manager
return 50;
}
- private int GetDefaultOrder(IMetadataProvider provider)
- {
- if (provider is IHasOrder hasOrder)
- {
- return hasOrder.Order;
- }
-
- return 0;
- }
-
/// <inheritdoc/>
public MetadataPluginSummary[] GetAllMetadataPlugins()
{