mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Reorder and flatten provider filtering
This commit is contained in:
parent
6ab64f4930
commit
bdce435b09
@ -326,6 +326,39 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
.ThenBy(GetDefaultOrder);
|
.ThenBy(GetDefaultOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool CanRefreshImages(
|
||||||
|
IImageProvider provider,
|
||||||
|
BaseItem item,
|
||||||
|
TypeOptions? libraryTypeOptions,
|
||||||
|
ImageRefreshOptions refreshOptions,
|
||||||
|
bool includeDisabled)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!provider.Supports(item))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "{ProviderName} failed in Supports for type {ItemType} at {ItemPath}", provider.GetType().Name, item.GetType().Name, item.Path);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (includeDisabled || provider is ILocalImageProvider)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.IsLocked && refreshOptions.ImageRefreshMode != MetadataRefreshMode.FullRefresh)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _baseItemManager.IsImageFetcherEnabled(item, libraryTypeOptions, provider.Name);
|
||||||
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public IEnumerable<IMetadataProvider<T>> GetMetadataProviders<T>(BaseItem item, LibraryOptions libraryOptions)
|
public IEnumerable<IMetadataProvider<T>> GetMetadataProviders<T>(BaseItem item, LibraryOptions libraryOptions)
|
||||||
where T : BaseItem
|
where T : BaseItem
|
||||||
@ -365,76 +398,34 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
bool includeDisabled,
|
bool includeDisabled,
|
||||||
bool forceEnableInternetMetadata)
|
bool forceEnableInternetMetadata)
|
||||||
{
|
{
|
||||||
if (!includeDisabled)
|
if (!item.SupportsLocalMetadata && provider is ILocalMetadataProvider)
|
||||||
{
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prevent owned items from reading the same local metadata file as their owner
|
||||||
|
if (!item.OwnerId.Equals(default) && provider is ILocalMetadataProvider)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (includeDisabled)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// If locked only allow local providers
|
// If locked only allow local providers
|
||||||
if (item.IsLocked && provider is not ILocalMetadataProvider && provider is not IForcedProvider)
|
if (item.IsLocked && provider is not ILocalMetadataProvider && provider is not IForcedProvider)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (provider is IRemoteMetadataProvider)
|
if (forceEnableInternetMetadata || provider is not IRemoteMetadataProvider)
|
||||||
{
|
{
|
||||||
if (!forceEnableInternetMetadata && !_baseItemManager.IsMetadataFetcherEnabled(item, libraryTypeOptions, provider.Name))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!item.SupportsLocalMetadata && provider is ILocalMetadataProvider)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If this restriction is ever lifted, movie xml providers will have to be updated to prevent owned items like trailers from reading those files
|
|
||||||
if (!item.OwnerId.Equals(default))
|
|
||||||
{
|
|
||||||
if (provider is ILocalMetadataProvider || provider is IRemoteMetadataProvider)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool CanRefreshImages(
|
return _baseItemManager.IsMetadataFetcherEnabled(item, libraryTypeOptions, provider.Name);
|
||||||
IImageProvider provider,
|
|
||||||
BaseItem item,
|
|
||||||
TypeOptions? libraryTypeOptions,
|
|
||||||
ImageRefreshOptions refreshOptions,
|
|
||||||
bool includeDisabled)
|
|
||||||
{
|
|
||||||
if (!includeDisabled)
|
|
||||||
{
|
|
||||||
// If locked only allow local providers
|
|
||||||
if (item.IsLocked && provider is not ILocalImageProvider)
|
|
||||||
{
|
|
||||||
if (refreshOptions.ImageRefreshMode != MetadataRefreshMode.FullRefresh)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (provider is IRemoteImageProvider || provider is IDynamicImageProvider)
|
|
||||||
{
|
|
||||||
if (!_baseItemManager.IsImageFetcherEnabled(item, libraryTypeOptions, provider.Name))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return provider.Supports(item);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.LogError(ex, "{ProviderName} failed in Supports for type {ItemType} at {ItemPath}", provider.GetType().Name, item.GetType().Name, item.Path);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int GetConfiguredOrder(string[] order, string providerName)
|
private static int GetConfiguredOrder(string[] order, string providerName)
|
||||||
|
@ -54,7 +54,7 @@ namespace Jellyfin.Providers.Tests.Manager
|
|||||||
for (var i = 0; i < providerCount; i++)
|
for (var i = 0; i < providerCount; i++)
|
||||||
{
|
{
|
||||||
var order = hasOrderOrder?[i];
|
var order = hasOrderOrder?[i];
|
||||||
providerList.Add(MockIImageProvider<IImageProvider>(nameProvider(i), item, order: order));
|
providerList.Add(MockIImageProvider<ILocalImageProvider>(nameProvider(i), item, order: order));
|
||||||
}
|
}
|
||||||
|
|
||||||
var libraryOptions = CreateLibraryOptions(item.GetType().Name, imageFetcherOrder: libraryOrder?.Select(nameProvider).ToArray());
|
var libraryOptions = CreateLibraryOptions(item.GetType().Name, imageFetcherOrder: libraryOrder?.Select(nameProvider).ToArray());
|
||||||
@ -275,7 +275,7 @@ namespace Jellyfin.Providers.Tests.Manager
|
|||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData(nameof(ICustomMetadataProvider), true)]
|
[InlineData(nameof(ICustomMetadataProvider), true)]
|
||||||
[InlineData(nameof(IRemoteMetadataProvider), false)]
|
[InlineData(nameof(IRemoteMetadataProvider), true)]
|
||||||
[InlineData(nameof(ILocalMetadataProvider), false)]
|
[InlineData(nameof(ILocalMetadataProvider), false)]
|
||||||
public void GetMetadataProviders_CanRefreshMetadataOwned_WhenNotLocal(string providerType, bool expected)
|
public void GetMetadataProviders_CanRefreshMetadataOwned_WhenNotLocal(string providerType, bool expected)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user