Backport pull request #11921 from jellyfin/release-10.9.z
Fix identify over NFO and replace all when NFO saving enabled
Original-merge: bfcc09db8a
Merged-by: joshuaboniface <joshua@boniface.me>
Backported-by: Joshua M. Boniface <joshua@boniface.me>
This commit is contained in:
parent
926470829d
commit
f67e327b29
|
@ -140,6 +140,14 @@ namespace MediaBrowser.Controller.Providers
|
|||
IEnumerable<IMetadataProvider<T>> GetMetadataProviders<T>(BaseItem item, LibraryOptions libraryOptions)
|
||||
where T : BaseItem;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the metadata savers for the provided item.
|
||||
/// </summary>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <param name="libraryOptions">The library options.</param>
|
||||
/// <returns>The metadata savers.</returns>
|
||||
IEnumerable<IMetadataSaver> GetMetadataSavers(BaseItem item, LibraryOptions libraryOptions);
|
||||
|
||||
/// <summary>
|
||||
/// Gets all metadata plugins.
|
||||
/// </summary>
|
||||
|
|
|
@ -419,7 +419,8 @@ namespace MediaBrowser.Providers.Manager
|
|||
var type = _singularImages[i];
|
||||
var image = GetFirstLocalImageInfoByType(images, type);
|
||||
|
||||
if (image is not null)
|
||||
// Only use local images if we are not replacing and saving
|
||||
if (image is not null && !(item.IsSaveLocalMetadataEnabled() && refreshOptions.ReplaceAllImages))
|
||||
{
|
||||
var currentImage = item.GetImageInfo(type, 0);
|
||||
// if image file is stored with media, don't replace that later
|
||||
|
|
|
@ -154,7 +154,8 @@ namespace MediaBrowser.Providers.Manager
|
|||
|
||||
id.IsAutomated = refreshOptions.IsAutomated;
|
||||
|
||||
var result = await RefreshWithProviders(metadataResult, id, refreshOptions, providers, ImageProvider, cancellationToken).ConfigureAwait(false);
|
||||
var hasMetadataSavers = ProviderManager.GetMetadataSavers(item, libraryOptions).Any();
|
||||
var result = await RefreshWithProviders(metadataResult, id, refreshOptions, providers, ImageProvider, hasMetadataSavers, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
updateType |= result.UpdateType;
|
||||
if (result.Failures > 0)
|
||||
|
@ -639,6 +640,7 @@ namespace MediaBrowser.Providers.Manager
|
|||
MetadataRefreshOptions options,
|
||||
ICollection<IMetadataProvider> providers,
|
||||
ItemImageProvider imageService,
|
||||
bool isSavingMetadata,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
var refreshResult = new RefreshResult
|
||||
|
@ -669,6 +671,10 @@ namespace MediaBrowser.Providers.Manager
|
|||
temp.Item.Id = item.Id;
|
||||
|
||||
var foundImageTypes = new List<ImageType>();
|
||||
|
||||
// Do not execute local providers if we are identifying or replacing with local metadata saving enabled
|
||||
if (options.SearchResult is null && !(isSavingMetadata && options.ReplaceAllMetadata))
|
||||
{
|
||||
foreach (var provider in providers.OfType<ILocalMetadataProvider<TItemType>>())
|
||||
{
|
||||
var providerName = provider.GetType().Name;
|
||||
|
@ -734,6 +740,7 @@ namespace MediaBrowser.Providers.Manager
|
|||
refreshResult.ErrorMessage = ex.Message;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var isLocalLocked = temp.Item.IsLocked;
|
||||
if (!isLocalLocked && (options.ReplaceAllMetadata || options.MetadataRefreshMode > MetadataRefreshMode.ValidationOnly))
|
||||
|
|
|
@ -418,6 +418,12 @@ namespace MediaBrowser.Providers.Manager
|
|||
return GetMetadataProvidersInternal<T>(item, libraryOptions, globalMetadataOptions, false, false);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public IEnumerable<IMetadataSaver> GetMetadataSavers(BaseItem item, LibraryOptions libraryOptions)
|
||||
{
|
||||
return _savers.Where(i => IsSaverEnabledForItem(i, item, libraryOptions, ItemUpdateType.MetadataEdit, false));
|
||||
}
|
||||
|
||||
private IEnumerable<IMetadataProvider<T>> GetMetadataProvidersInternal<T>(BaseItem item, LibraryOptions libraryOptions, MetadataOptions globalMetadataOptions, bool includeDisabled, bool forceEnableInternetMetadata)
|
||||
where T : BaseItem
|
||||
{
|
||||
|
|
|
@ -575,18 +575,22 @@ namespace Jellyfin.Providers.Tests.Manager
|
|||
// Has to exist for querying DateModified time on file, results stored but not checked so not populating
|
||||
BaseItem.FileSystem ??= Mock.Of<IFileSystem>();
|
||||
|
||||
var item = new Video();
|
||||
var item = new Mock<Video>
|
||||
{
|
||||
CallBase = true
|
||||
};
|
||||
item.Setup(m => m.IsSaveLocalMetadataEnabled()).Returns(false);
|
||||
|
||||
var path = validPaths ? _testDataImagePath.Format : "invalid path {0}";
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
item.SetImagePath(type, i, new FileSystemMetadata
|
||||
item.Object.SetImagePath(type, i, new FileSystemMetadata
|
||||
{
|
||||
FullName = string.Format(CultureInfo.InvariantCulture, path, i),
|
||||
});
|
||||
}
|
||||
|
||||
return item;
|
||||
return item.Object;
|
||||
}
|
||||
|
||||
private static ILocalImageProvider GetImageProvider(ImageType type, int count, bool validPaths)
|
||||
|
|
Loading…
Reference in New Issue
Block a user