@ -69,7 +69,22 @@ namespace MediaBrowser.Server.Implementations.Dto
/// <exception cref="System.ArgumentNullException">item</exception>
public BaseItemDto GetBaseItemDto ( BaseItem item , List < ItemFields > fields , User user = null , BaseItem owner = null )
{
var dto = GetBaseItemDtoInternal ( item , fields , user , owner ) ;
var options = new DtoOptions
{
Fields = fields
} ;
// Get everything
options . ImageTypes = Enum . GetNames ( typeof ( ImageType ) )
. Select ( i = > ( ImageType ) Enum . Parse ( typeof ( ImageType ) , i , true ) )
. ToList ( ) ;
return GetBaseItemDto ( item , options , user , owner ) ;
}
public BaseItemDto GetBaseItemDto ( BaseItem item , DtoOptions options , User user = null , BaseItem owner = null )
{
var dto = GetBaseItemDtoInternal ( item , options , user , owner ) ;
var byName = item as IItemByName ;
@ -87,8 +102,10 @@ namespace MediaBrowser.Server.Implementations.Dto
return dto ;
}
private BaseItemDto GetBaseItemDtoInternal ( BaseItem item , List< ItemFields > field s, User user = null , BaseItem owner = null )
private BaseItemDto GetBaseItemDtoInternal ( BaseItem item , DtoOptions option s, User user = null , BaseItem owner = null )
{
var fields = options . Fields ;
if ( item = = null )
{
throw new ArgumentNullException ( "item" ) ;
@ -115,7 +132,7 @@ namespace MediaBrowser.Server.Implementations.Dto
{
try
{
AttachPrimaryImageAspectRatio ( dto , item );
AttachPrimaryImageAspectRatio ( dto , item , fields );
}
catch ( Exception ex )
{
@ -155,7 +172,7 @@ namespace MediaBrowser.Server.Implementations.Dto
AttachStudios ( dto , item ) ;
}
AttachBasicFields ( dto , item , owner , field s) ;
AttachBasicFields ( dto , item , owner , option s) ;
if ( fields . Contains ( ItemFields . SyncInfo ) )
{
@ -174,18 +191,19 @@ namespace MediaBrowser.Server.Implementations.Dto
}
}
if ( item is Playlist )
var playlist = item as Playlist ;
if ( playlist ! = null )
{
AttachLinkedChildImages ( dto , ( Folder ) item , user ) ;
AttachLinkedChildImages ( dto , playlist , user , options ) ;
}
return dto ;
}
public BaseItemDto GetItemByNameDto < T > ( T item , List< ItemFields > field s, List < BaseItem > taggedItems , User user = null )
public BaseItemDto GetItemByNameDto < T > ( T item , DtoOptions option s, List < BaseItem > taggedItems , User user = null )
where T : BaseItem , IItemByName
{
var dto = GetBaseItemDtoInternal ( item , field s, user ) ;
var dto = GetBaseItemDtoInternal ( item , option s, user ) ;
SetItemByNameInfo ( item , dto , taggedItems , user ) ;
@ -369,36 +387,27 @@ namespace MediaBrowser.Server.Implementations.Dto
dto . GameSystem = item . GameSystemName ;
}
/// <summary>
/// Gets the backdrop image tags.
/// </summary>
/// <param name="item">The item.</param>
/// <returns>List{System.String}.</returns>
private List < string > GetBackdropImageTags ( BaseItem item )
private List < string > GetBackdropImageTags ( BaseItem item , int limit )
{
return GetCacheTags ( item , ImageType . Backdrop ). ToList ( ) ;
return GetCacheTags ( item , ImageType . Backdrop , limit ) . ToList ( ) ;
}
/// <summary>
/// Gets the screenshot image tags.
/// </summary>
/// <param name="item">The item.</param>
/// <returns>List{Guid}.</returns>
private List < string > GetScreenshotImageTags ( BaseItem item )
private List < string > GetScreenshotImageTags ( BaseItem item , int limit )
{
var hasScreenshots = item as IHasScreenshots ;
if ( hasScreenshots = = null )
{
return new List < string > ( ) ;
}
return GetCacheTags ( item , ImageType . Screenshot ). ToList ( ) ;
return GetCacheTags ( item , ImageType . Screenshot , limit ). ToList ( ) ;
}
private IEnumerable < string > GetCacheTags ( BaseItem item , ImageType type )
private IEnumerable < string > GetCacheTags ( BaseItem item , ImageType type , int limit )
{
return item . GetImages ( type )
. Select ( p = > GetImageCacheTag ( item , p ) )
. Where ( i = > i ! = null )
. Take ( limit )
. ToList ( ) ;
}
@ -649,9 +658,11 @@ namespace MediaBrowser.Server.Implementations.Dto
/// <param name="dto">The dto.</param>
/// <param name="item">The item.</param>
/// <param name="owner">The owner.</param>
/// <param name=" fields">The field s.</param>
private void AttachBasicFields ( BaseItemDto dto , BaseItem item , BaseItem owner , List< ItemFields > field s)
/// <param name=" options">The option s.</param>
private void AttachBasicFields ( BaseItemDto dto , BaseItem item , BaseItem owner , DtoOptions option s)
{
var fields = options . Fields ;
if ( fields . Contains ( ItemFields . DateCreated ) )
{
dto . DateCreated = item . DateCreated ;
@ -662,7 +673,11 @@ namespace MediaBrowser.Server.Implementations.Dto
dto . DisplayMediaType = item . DisplayMediaType ;
}
dto . IsUnidentified = item . IsUnidentified ;
// Leave null if false
if ( item . IsUnidentified )
{
dto . IsUnidentified = item . IsUnidentified ;
}
if ( fields . Contains ( ItemFields . Settings ) )
{
@ -736,10 +751,13 @@ namespace MediaBrowser.Server.Implementations.Dto
dto . AspectRatio = hasAspectRatio . AspectRatio ;
}
var hasMetascore = item as IHasMetascore ;
if ( hasMetascore ! = null )
if ( fields . Contains ( ItemFields . ProductionLocations ) )
{
dto . Metascore = hasMetascore . Metascore ;
var hasMetascore = item as IHasMetascore ;
if ( hasMetascore ! = null )
{
dto . Metascore = hasMetascore . Metascore ;
}
}
if ( fields . Contains ( ItemFields . AwardSummary ) )
@ -751,11 +769,19 @@ namespace MediaBrowser.Server.Implementations.Dto
}
}
dto . BackdropImageTags = GetBackdropImageTags ( item ) ;
var backdropLimit = options . GetImageLimit ( ImageType . Backdrop ) ;
if ( backdropLimit > 0 )
{
dto . BackdropImageTags = GetBackdropImageTags ( item , backdropLimit ) ;
}
if ( fields . Contains ( ItemFields . ScreenshotImageTags ) )
{
dto . ScreenshotImageTags = GetScreenshotImageTags ( item ) ;
var screenshotLimit = options . GetImageLimit ( ImageType . Screenshot ) ;
if ( screenshotLimit > 0 )
{
dto . ScreenshotImageTags = GetScreenshotImageTags ( item , screenshotLimit ) ;
}
}
if ( fields . Contains ( ItemFields . Genres ) )
@ -769,11 +795,14 @@ namespace MediaBrowser.Server.Implementations.Dto
var currentItem = item ;
foreach ( var image in currentItem . ImageInfos . Where ( i = > ! currentItem . AllowsMultipleImages ( i . Type ) ) )
{
var tag = GetImageCacheTag ( item , image ) ;
if ( tag ! = null )
if ( options . GetImageLimit ( image . Type ) > 0 )
{
dto . ImageTags [ image . Type ] = tag ;
var tag = GetImageCacheTag ( item , image ) ;
if ( tag ! = null )
{
dto . ImageTags [ image . Type ] = tag ;
}
}
}
@ -851,14 +880,14 @@ namespace MediaBrowser.Server.Implementations.Dto
}
// If there are no backdrops, indicate what parent has them in case the Ui wants to allow inheritance
if ( dto. BackdropImageTags . Count = = 0 )
if ( backdropLimit > 0 & & dto. BackdropImageTags . Count = = 0 )
{
var parentWithBackdrop = GetParentBackdropItem ( item , owner ) ;
if ( parentWithBackdrop ! = null )
{
dto . ParentBackdropItemId = GetDtoId ( parentWithBackdrop ) ;
dto . ParentBackdropImageTags = GetBackdropImageTags ( parentWithBackdrop );
dto . ParentBackdropImageTags = GetBackdropImageTags ( parentWithBackdrop , backdropLimit );
}
}
@ -874,7 +903,7 @@ namespace MediaBrowser.Server.Implementations.Dto
dto . ParentIndexNumber = item . ParentIndexNumber ;
// If there is no logo, indicate what parent has one in case the Ui wants to allow inheritance
if ( ! dto . HasLogo )
if ( ! dto . HasLogo & & options . GetImageLimit ( ImageType . Logo ) > 0 )
{
var parentWithLogo = GetParentImageItem ( item , ImageType . Logo , owner ) ;
@ -887,7 +916,7 @@ namespace MediaBrowser.Server.Implementations.Dto
}
// If there is no art, indicate what parent has one in case the Ui wants to allow inheritance
if ( ! dto . HasArtImage )
if ( ! dto . HasArtImage & & options . GetImageLimit ( ImageType . Thumb ) > 0 )
{
var parentWithImage = GetParentImageItem ( item , ImageType . Art , owner ) ;
@ -900,7 +929,7 @@ namespace MediaBrowser.Server.Implementations.Dto
}
// If there is no thumb, indicate what parent has one in case the Ui wants to allow inheritance
if ( ! dto . HasThumb )
if ( ! dto . HasThumb & & options . GetImageLimit ( ImageType . Thumb ) > 0 )
{
var parentWithImage = GetParentImageItem ( item , ImageType . Thumb , owner ) ;
@ -953,7 +982,11 @@ namespace MediaBrowser.Server.Implementations.Dto
dto . Type = item . GetClientTypeName ( ) ;
dto . CommunityRating = item . CommunityRating ;
dto . VoteCount = item . VoteCount ;
if ( fields . Contains ( ItemFields . VoteCount ) )
{
dto . VoteCount = item . VoteCount ;
}
if ( item . IsFolder )
{
@ -1017,8 +1050,15 @@ namespace MediaBrowser.Server.Implementations.Dto
dto . IsoType = video . IsoType ;
dto . IsHD = video . IsHD ;
dto . PartCount = video . AdditionalPartIds . Count + 1 ;
dto . MediaSourceCount = video . MediaSourceCount ;
if ( fields . Contains ( ItemFields . Chapters ) )
{
dto . PartCount = video . AdditionalPartIds . Count + 1 ;
}
if ( fields . Contains ( ItemFields . MediaSourceCount ) )
{
dto . MediaSourceCount = video . MediaSourceCount ;
}
if ( fields . Contains ( ItemFields . Chapters ) )
{
@ -1200,28 +1240,28 @@ namespace MediaBrowser.Server.Implementations.Dto
}
}
private void AttachLinkedChildImages ( BaseItemDto dto , Folder folder , User user )
private void AttachLinkedChildImages ( BaseItemDto dto , Folder folder , User user , DtoOptions options )
{
List < BaseItem > linkedChildren = null ;
if ( dto . BackdropImageTags . Count = = 0 )
var backdropLimit = options . GetImageLimit ( ImageType . Backdrop ) ;
if ( backdropLimit > 0 & & dto . BackdropImageTags . Count = = 0 )
{
if ( linkedChildren = = null )
{
linkedChildren = user = = null
? folder . GetRecursiveChildren ( ) . ToList ( )
: folder . GetRecursiveChildren ( user , true ) . ToList ( ) ;
}
linkedChildren = user = = null
? folder . GetRecursiveChildren ( ) . ToList ( )
: folder . GetRecursiveChildren ( user , true ) . ToList ( ) ;
var parentWithBackdrop = linkedChildren . FirstOrDefault ( i = > i . GetImages ( ImageType . Backdrop ) . Any ( ) ) ;
if ( parentWithBackdrop ! = null )
{
dto . ParentBackdropItemId = GetDtoId ( parentWithBackdrop ) ;
dto . ParentBackdropImageTags = GetBackdropImageTags ( parentWithBackdrop );
dto . ParentBackdropImageTags = GetBackdropImageTags ( parentWithBackdrop , backdropLimit );
}
}
if ( ! dto . ImageTags . ContainsKey ( ImageType . Primary ) )
if ( ! dto . ImageTags . ContainsKey ( ImageType . Primary ) & & options . GetImageLimit ( ImageType . Primary ) > 0 )
{
if ( linkedChildren = = null )
{
@ -1380,8 +1420,9 @@ namespace MediaBrowser.Server.Implementations.Dto
/// </summary>
/// <param name="dto">The dto.</param>
/// <param name="item">The item.</param>
/// <param name="fields">The fields.</param>
/// <returns>Task.</returns>
public void AttachPrimaryImageAspectRatio ( IItemDto dto , IHasImages item )
public void AttachPrimaryImageAspectRatio ( IItemDto dto , IHasImages item , List < ItemFields > fields )
{
var imageInfo = item . GetImageInfo ( ImageType . Primary , 0 ) ;
@ -1412,7 +1453,10 @@ namespace MediaBrowser.Server.Implementations.Dto
return ;
}
dto . OriginalPrimaryImageAspectRatio = size . Width / size . Height ;
if ( fields . Contains ( ItemFields . OriginalPrimaryImageAspectRatio ) )
{
dto . OriginalPrimaryImageAspectRatio = size . Width / size . Height ;
}
var supportedEnhancers = _imageProcessor . GetSupportedEnhancers ( item , ImageType . Primary ) . ToList ( ) ;