using System ;
using MediaBrowser.Controller.Entities ;
using MediaBrowser.Controller.Library ;
using Microsoft.Extensions.Logging ;
namespace Jellyfin.Server.Migrations.Routines
{
/// <summary>
/// Removes the old 'RemoveDownloadImagesInAdvance' from library options.
/// </summary>
internal class RemoveDownloadImagesInAdvance : IMigrationRoutine
{
private readonly ILogger < RemoveDownloadImagesInAdvance > _logger ;
private readonly ILibraryManager _libraryManager ;
public RemoveDownloadImagesInAdvance ( ILogger < RemoveDownloadImagesInAdvance > logger , ILibraryManager libraryManager )
{
_logger = logger ;
_libraryManager = libraryManager ;
}
/// <inheritdoc/>
public Guid Id = > Guid . Parse ( "{A81F75E0-8F43-416F-A5E8-516CCAB4D8CC}" ) ;
/// <inheritdoc/>
public string Name = > "RemoveDownloadImagesInAdvance" ;
/// <inheritdoc/>
public bool PerformOnNewInstall = > false ;
/// <inheritdoc/>
public void Perform ( )
{
var virtualFolders = _libraryManager . GetVirtualFolders ( false ) ;
_logger . LogInformation ( "Removing 'RemoveDownloadImagesInAdvance' settings in all the libraries" ) ;
foreach ( var virtualFolder in virtualFolders )
{
// Some virtual folders don't have a proper item id.
if ( ! Guid . TryParse ( virtualFolder . ItemId , out var folderId ) )
{
continue ;
}
var libraryOptions = virtualFolder . LibraryOptions ;
var collectionFolder = _libraryManager . GetItemById < CollectionFolder > ( folderId ) ? ? throw new InvalidOperationException ( "Failed to find CollectionFolder" ) ;
// The property no longer exists in LibraryOptions, so we just re-save the options to get old data removed.
collectionFolder . UpdateLibraryOptions ( libraryOptions ) ;
_logger . LogInformation ( "Removed from '{VirtualFolder}'" , virtualFolder . Name ) ;
}
}
}
}