@ -5,15 +5,19 @@ using MediaBrowser.Model.Entities;
using System ;
using System.IO ;
using System.Linq ;
using CommonIO ;
namespace MediaBrowser.Server.Implementations.Library.Resolvers
{
public class PhotoResolver : ItemResolver < Photo >
{
private readonly IImageProcessor _imageProcessor ;
public PhotoResolver ( IImageProcessor imageProcessor )
private readonly ILibraryManager _libraryManager ;
public PhotoResolver ( IImageProcessor imageProcessor , ILibraryManager libraryManager )
{
_imageProcessor = imageProcessor ;
_libraryManager = libraryManager ;
}
/// <summary>
@ -23,20 +27,45 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers
/// <returns>Trailer.</returns>
protected override Photo Resolve ( ItemResolveArgs args )
{
// Must be an image file within a photo collection
if ( string . Equals ( args . GetCollectionType ( ) , CollectionType . Photos , StringComparison . OrdinalIgnoreCase ) & &
! args . IsDirectory & &
IsImageFile ( args . Path , _imageProcessor ) )
if ( ! args . IsDirectory )
{
return new Photo
// Must be an image file within a photo collection
var collectionType = args . GetCollectionType ( ) ;
if ( string . Equals ( collectionType , CollectionType . Photos , StringComparison . OrdinalIgnoreCase ) | |
string . Equals ( collectionType , CollectionType . HomeVideos , StringComparison . OrdinalIgnoreCase ) )
{
Path = args . Path
} ;
if ( IsImageFile ( args . Path , _imageProcessor ) )
{
var filename = Path . GetFileNameWithoutExtension ( args . Path ) ;
// Make sure the image doesn't belong to a video file
if ( args . DirectoryService . GetFiles ( Path . GetDirectoryName ( args . Path ) ) . Any ( i = > IsOwnedByMedia ( i , filename ) ) )
{
return null ;
}
return new Photo
{
Path = args . Path
} ;
}
}
}
return null ;
}
private bool IsOwnedByMedia ( FileSystemMetadata file , string imageFilename )
{
if ( _libraryManager . IsVideoFile ( file . FullName ) & & imageFilename . StartsWith ( Path . GetFileNameWithoutExtension ( file . Name ) , StringComparison . OrdinalIgnoreCase ) )
{
return true ;
}
return false ;
}
private static readonly string [ ] IgnoreFiles =
{
"folder" ,
@ -44,7 +73,8 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers
"landscape" ,
"fanart" ,
"backdrop" ,
"poster"
"poster" ,
"cover"
} ;
internal static bool IsImageFile ( string path , IImageProcessor imageProcessor )