diff options
Diffstat (limited to 'MediaBrowser.Controller/Entities/BaseItem.cs')
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItem.cs | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 915971adc..0f62e8e1e 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Globalization; +using System.IO; using System.Linq; using System.Text; using System.Text.Json.Serialization; @@ -1286,7 +1287,7 @@ namespace MediaBrowser.Controller.Entities { if (IsFileProtocol) { - requiresSave = await RefreshedOwnedItems(options, GetFileSystemChildren(options.DirectoryService).ToList(), cancellationToken).ConfigureAwait(false); + requiresSave = await RefreshedOwnedItems(options, GetFileSystemChildren(options.DirectoryService), cancellationToken).ConfigureAwait(false); } await LibraryManager.UpdateImagesAsync(this).ConfigureAwait(false); // ensure all image properties in DB are fresh @@ -1363,7 +1364,7 @@ namespace MediaBrowser.Controller.Entities /// <param name="fileSystemChildren">The list of filesystem children.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns><c>true</c> if any items have changed, else <c>false</c>.</returns> - protected virtual async Task<bool> RefreshedOwnedItems(MetadataRefreshOptions options, List<FileSystemMetadata> fileSystemChildren, CancellationToken cancellationToken) + protected virtual async Task<bool> RefreshedOwnedItems(MetadataRefreshOptions options, IReadOnlyList<FileSystemMetadata> fileSystemChildren, CancellationToken cancellationToken) { if (!IsFileProtocol || !SupportsOwnedItems || IsInMixedFolder || this is ICollectionFolder or UserRootFolder or AggregateFolder || this.GetType() == typeof(Folder)) { @@ -1380,7 +1381,7 @@ namespace MediaBrowser.Controller.Entities return directoryService.GetFileSystemEntries(path); } - private async Task<bool> RefreshExtras(BaseItem item, MetadataRefreshOptions options, List<FileSystemMetadata> fileSystemChildren, CancellationToken cancellationToken) + private async Task<bool> RefreshExtras(BaseItem item, MetadataRefreshOptions options, IReadOnlyList<FileSystemMetadata> fileSystemChildren, CancellationToken cancellationToken) { var extras = LibraryManager.FindExtras(item, fileSystemChildren, options.DirectoryService).ToArray(); var newExtraIds = extras.Select(i => i.Id).ToArray(); @@ -2041,27 +2042,32 @@ namespace MediaBrowser.Controller.Entities /// <summary> /// Validates that images within the item are still on the filesystem. /// </summary> - /// <param name="directoryService">The directory service to use.</param> /// <returns><c>true</c> if the images validate, <c>false</c> if not.</returns> - public bool ValidateImages(IDirectoryService directoryService) + public bool ValidateImages() { - var allFiles = ImageInfos - .Where(i => i.IsLocalFile) - .Select(i => System.IO.Path.GetDirectoryName(i.Path)) - .Distinct(StringComparer.OrdinalIgnoreCase) - .SelectMany(path => directoryService.GetFilePaths(path)) - .ToList(); + List<ItemImageInfo> deletedImages = null; + foreach (var imageInfo in ImageInfos) + { + if (!imageInfo.IsLocalFile) + { + continue; + } - var deletedImages = ImageInfos - .Where(image => image.IsLocalFile && !allFiles.Contains(image.Path, StringComparison.OrdinalIgnoreCase)) - .ToList(); + if (File.Exists(imageInfo.Path)) + { + continue; + } + + (deletedImages ??= new List<ItemImageInfo>()).Add(imageInfo); + } - if (deletedImages.Count > 0) + var anyImagesRemoved = deletedImages?.Count > 0; + if (anyImagesRemoved) { RemoveImages(deletedImages); } - return deletedImages.Count > 0; + return anyImagesRemoved; } /// <summary> |
