using MediaBrowser.Common.Configuration ;
using MediaBrowser.Common.IO ;
using MediaBrowser.Controller.Drawing ;
using MediaBrowser.Controller.Entities ;
using MediaBrowser.Controller.Entities.Audio ;
using MediaBrowser.Controller.Entities.Movies ;
using MediaBrowser.Controller.Entities.TV ;
using MediaBrowser.Controller.Providers ;
using MediaBrowser.Model.Entities ;
using MediaBrowser.Server.Implementations.Photos ;
using MoreLinq ;
using System.Collections.Generic ;
using System.IO ;
using System.Linq ;
using System.Threading.Tasks ;
using CommonIO ;
namespace MediaBrowser.Server.Implementations.Collections
{
public class CollectionImageProvider : BaseDynamicImageProvider < BoxSet >
{
public CollectionImageProvider ( IFileSystem fileSystem , IProviderManager providerManager , IApplicationPaths applicationPaths , IImageProcessor imageProcessor ) : base ( fileSystem , providerManager , applicationPaths , imageProcessor )
{
}
protected override bool Supports ( IHasImages item )
{
// Right now this is the only way to prevent this image from getting created ahead of internet image providers
if ( ! item . IsLocked )
{
return false ;
}
return base . Supports ( item ) ;
}
protected override Task < List < BaseItem > > GetItemsWithImages ( IHasImages item )
{
var playlist = ( BoxSet ) item ;
var items = playlist . Children . Concat ( playlist . GetLinkedChildren ( ) )
. Select ( i = >
{
var subItem = i ;
var episode = subItem as Episode ;
if ( episode ! = null )
{
var series = episode . Series ;
if ( series ! = null & & series . HasImage ( ImageType . Primary ) )
{
return series ;
}
}
if ( subItem . HasImage ( ImageType . Primary ) )
{
return subItem ;
}
var parent = subItem . Parent ;
if ( parent ! = null & & parent . HasImage ( ImageType . Primary ) )
{
if ( parent is MusicAlbum )
{
return parent ;
}
}
return null ;
} )
. Where ( i = > i ! = null )
. DistinctBy ( i = > i . Id )
. ToList ( ) ;
return Task . FromResult ( GetFinalItems ( items , 2 ) ) ;
}
protected override async Task < string > CreateImage ( IHasImages item , List < BaseItem > itemsWithImages , string outputPathWithoutExtension , ImageType imageType , int imageIndex )
{
var image = itemsWithImages
. Where ( i = > i . HasImage ( ImageType . Primary ) & & i . GetImageInfo ( ImageType . Primary , 0 ) . IsLocalFile & & Path . HasExtension ( i . GetImagePath ( ImageType . Primary ) ) )
. Select ( i = > i . GetImagePath ( ImageType . Primary ) )
. FirstOrDefault ( ) ;
if ( string . IsNullOrWhiteSpace ( image ) )
{
return null ;
}
var ext = Path . GetExtension ( image ) ;
var outputPath = Path . ChangeExtension ( outputPathWithoutExtension , ext ) ;
File . Copy ( image , outputPath ) ;
return outputPath ;
}
}
}