From 4cd0a2ed8d2a0a81a77b80310e75371e72602eea Mon Sep 17 00:00:00 2001 From: JPVenson Date: Mon, 16 Jun 2025 00:19:57 +0300 Subject: Always set update action when item does not exist (#14304) --- MediaBrowser.Providers/Manager/ItemImageProvider.cs | 4 ++++ MediaBrowser.Providers/Manager/MetadataService.cs | 21 ++++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) (limited to 'MediaBrowser.Providers/Manager') diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs index ee22b4bc67..75882a088a 100644 --- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs +++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs @@ -377,6 +377,10 @@ namespace MediaBrowser.Providers.Manager { // Nothing to do, already gone } + catch (DirectoryNotFoundException) + { + // Nothing to do, already gone + } catch (UnauthorizedAccessException ex) { _logger.LogWarning(ex, "Unable to delete {Image}", image.Path); diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index da241533a8..cd95bf6ef1 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -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 /// if set to true [is full refresh]. /// Type of the current update. /// ItemUpdateType. - private ItemUpdateType BeforeSave(TItemType item, bool isFullRefresh, ItemUpdateType currentUpdateType) + private async Task 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; } -- cgit v1.2.3