Always set update action when item does not exist (#14304)

This commit is contained in:
JPVenson
2025-06-16 00:19:57 +03:00
committed by GitHub
parent aa05185917
commit 4cd0a2ed8d
30 changed files with 171 additions and 55 deletions

View File

@@ -14,6 +14,7 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Entities;
@@ -33,7 +34,8 @@ namespace MediaBrowser.Providers.Manager
IProviderManager providerManager,
IFileSystem fileSystem,
ILibraryManager libraryManager,
IExternalDataManager externalDataManager)
IExternalDataManager externalDataManager,
IItemRepository itemRepository)
{
ServerConfigurationManager = serverConfigurationManager;
Logger = logger;
@@ -41,6 +43,7 @@ namespace MediaBrowser.Providers.Manager
FileSystem = fileSystem;
LibraryManager = libraryManager;
ExternalDataManager = externalDataManager;
ItemRepository = itemRepository;
ImageProvider = new ItemImageProvider(Logger, ProviderManager, FileSystem);
}
@@ -58,6 +61,8 @@ namespace MediaBrowser.Providers.Manager
protected IExternalDataManager ExternalDataManager { get; }
protected IItemRepository ItemRepository { get; }
protected virtual bool EnableUpdatingPremiereDateFromChildren => false;
protected virtual bool EnableUpdatingGenresFromChildren => false;
@@ -85,6 +90,7 @@ namespace MediaBrowser.Providers.Manager
{
var itemOfType = (TItemType)item;
var updateType = ItemUpdateType.None;
var libraryOptions = LibraryManager.GetLibraryOptions(item);
var isFirstRefresh = item.DateLastRefreshed.Date == DateTime.MinValue.Date;
var hasRefreshedMetadata = true;
@@ -141,7 +147,8 @@ namespace MediaBrowser.Providers.Manager
Item = itemOfType
};
var beforeSaveResult = BeforeSave(itemOfType, isFirstRefresh || refreshOptions.ReplaceAllMetadata || refreshOptions.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || requiresRefresh || refreshOptions.ForceSave, updateType);
var beforeSaveResult = await BeforeSave(itemOfType, isFirstRefresh || refreshOptions.ReplaceAllMetadata || refreshOptions.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || requiresRefresh || refreshOptions.ForceSave, updateType)
.ConfigureAwait(false);
updateType |= beforeSaveResult;
updateType = await SaveInternal(item, refreshOptions, updateType, isFirstRefresh, requiresRefresh, metadataResult, cancellationToken).ConfigureAwait(false);
@@ -284,12 +291,20 @@ namespace MediaBrowser.Providers.Manager
/// <param name="isFullRefresh">if set to <c>true</c> [is full refresh].</param>
/// <param name="currentUpdateType">Type of the current update.</param>
/// <returns>ItemUpdateType.</returns>
private ItemUpdateType BeforeSave(TItemType item, bool isFullRefresh, ItemUpdateType currentUpdateType)
private async Task<ItemUpdateType> BeforeSave(TItemType item, bool isFullRefresh, ItemUpdateType currentUpdateType)
{
var updateType = BeforeSaveInternal(item, isFullRefresh, currentUpdateType);
updateType |= item.OnMetadataChanged();
if (updateType == ItemUpdateType.None)
{
if (!await ItemRepository.ItemExistsAsync(item.Id).ConfigureAwait(false))
{
return ItemUpdateType.MetadataImport;
}
}
return updateType;
}