@ -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 , IReadOnly List< 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 , IReadOnly List< 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>