|
|
|
@ -37,7 +37,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
{
|
|
|
|
|
public class DtoService : IDtoService
|
|
|
|
|
{
|
|
|
|
|
private readonly ILogger _logger;
|
|
|
|
|
private readonly ILogger<DtoService> _logger;
|
|
|
|
|
private readonly ILibraryManager _libraryManager;
|
|
|
|
|
private readonly IUserDataManager _userDataRepository;
|
|
|
|
|
private readonly IItemRepository _itemRepo;
|
|
|
|
@ -74,7 +74,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Converts a BaseItem to a DTOBaseItem
|
|
|
|
|
/// Converts a BaseItem to a DTOBaseItem.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="item">The item.</param>
|
|
|
|
|
/// <param name="fields">The fields.</param>
|
|
|
|
@ -277,6 +277,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
dto.EpisodeTitle = dto.Name;
|
|
|
|
|
dto.Name = dto.SeriesName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
liveTvManager.AddInfoToRecordingDto(item, dto, activeRecording, user);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -292,6 +293,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var containers = container.Split(new[] { ',' });
|
|
|
|
|
if (containers.Length < 2)
|
|
|
|
|
{
|
|
|
|
@ -406,7 +408,6 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
dto.DateLastMediaAdded = folder.DateLastMediaAdded;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (options.EnableUserData)
|
|
|
|
@ -443,7 +444,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets client-side Id of a server-side BaseItem
|
|
|
|
|
/// Gets client-side Id of a server-side BaseItem.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="item">The item.</param>
|
|
|
|
|
/// <returns>System.String.</returns>
|
|
|
|
@ -457,6 +458,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
{
|
|
|
|
|
dto.SeriesName = item.SeriesName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void SetPhotoProperties(BaseItemDto dto, Photo item)
|
|
|
|
|
{
|
|
|
|
|
dto.CameraMake = item.CameraMake;
|
|
|
|
@ -538,7 +540,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Attaches People DTO's to a DTOBaseItem
|
|
|
|
|
/// Attaches People DTO's to a DTOBaseItem.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="dto">The dto.</param>
|
|
|
|
|
/// <param name="item">The item.</param>
|
|
|
|
@ -555,22 +557,27 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (i.IsType(PersonType.GuestStar))
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (i.IsType(PersonType.Director))
|
|
|
|
|
{
|
|
|
|
|
return 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (i.IsType(PersonType.Writer))
|
|
|
|
|
{
|
|
|
|
|
return 3;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (i.IsType(PersonType.Producer))
|
|
|
|
|
{
|
|
|
|
|
return 4;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (i.IsType(PersonType.Composer))
|
|
|
|
|
{
|
|
|
|
|
return 4;
|
|
|
|
@ -594,7 +601,6 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
_logger.LogError(ex, "Error getting person {Name}", c);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}).Where(i => i != null)
|
|
|
|
|
.GroupBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
|
|
|
|
|
.Select(x => x.First())
|
|
|
|
@ -615,6 +621,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
{
|
|
|
|
|
baseItemPerson.PrimaryImageTag = GetTagAndFillBlurhash(dto, entity, ImageType.Primary);
|
|
|
|
|
baseItemPerson.Id = entity.Id.ToString("N", CultureInfo.InvariantCulture);
|
|
|
|
|
baseItemPerson.ImageBlurHashes = dto.ImageBlurHashes;
|
|
|
|
|
list.Add(baseItemPerson);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -727,7 +734,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Sets simple property values on a DTOBaseItem
|
|
|
|
|
/// Sets simple property values on a DTOBaseItem.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="dto">The dto.</param>
|
|
|
|
|
/// <param name="item">The item.</param>
|
|
|
|
@ -947,7 +954,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
dto.AlbumPrimaryImageTag = GetTagAndFillBlurhash(dto, albumParent, ImageType.Primary);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//if (options.ContainsField(ItemFields.MediaSourceCount))
|
|
|
|
|
// if (options.ContainsField(ItemFields.MediaSourceCount))
|
|
|
|
|
//{
|
|
|
|
|
// Songs always have one
|
|
|
|
|
//}
|
|
|
|
@ -957,13 +964,13 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
{
|
|
|
|
|
dto.Artists = hasArtist.Artists;
|
|
|
|
|
|
|
|
|
|
//var artistItems = _libraryManager.GetArtists(new InternalItemsQuery
|
|
|
|
|
// var artistItems = _libraryManager.GetArtists(new InternalItemsQuery
|
|
|
|
|
//{
|
|
|
|
|
// EnableTotalRecordCount = false,
|
|
|
|
|
// ItemIds = new[] { item.Id.ToString("N", CultureInfo.InvariantCulture) }
|
|
|
|
|
//});
|
|
|
|
|
|
|
|
|
|
//dto.ArtistItems = artistItems.Items
|
|
|
|
|
// dto.ArtistItems = artistItems.Items
|
|
|
|
|
// .Select(i =>
|
|
|
|
|
// {
|
|
|
|
|
// var artist = i.Item1;
|
|
|
|
@ -976,7 +983,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
// .ToList();
|
|
|
|
|
|
|
|
|
|
// Include artists that are not in the database yet, e.g., just added via metadata editor
|
|
|
|
|
//var foundArtists = artistItems.Items.Select(i => i.Item1.Name).ToList();
|
|
|
|
|
// var foundArtists = artistItems.Items.Select(i => i.Item1.Name).ToList();
|
|
|
|
|
dto.ArtistItems = hasArtist.Artists
|
|
|
|
|
//.Except(foundArtists, new DistinctNameComparer())
|
|
|
|
|
.Select(i =>
|
|
|
|
@ -1001,7 +1008,6 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
}).Where(i => i != null).ToArray();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1010,13 +1016,13 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
{
|
|
|
|
|
dto.AlbumArtist = hasAlbumArtist.AlbumArtists.FirstOrDefault();
|
|
|
|
|
|
|
|
|
|
//var artistItems = _libraryManager.GetAlbumArtists(new InternalItemsQuery
|
|
|
|
|
// var artistItems = _libraryManager.GetAlbumArtists(new InternalItemsQuery
|
|
|
|
|
//{
|
|
|
|
|
// EnableTotalRecordCount = false,
|
|
|
|
|
// ItemIds = new[] { item.Id.ToString("N", CultureInfo.InvariantCulture) }
|
|
|
|
|
//});
|
|
|
|
|
|
|
|
|
|
//dto.AlbumArtists = artistItems.Items
|
|
|
|
|
// dto.AlbumArtists = artistItems.Items
|
|
|
|
|
// .Select(i =>
|
|
|
|
|
// {
|
|
|
|
|
// var artist = i.Item1;
|
|
|
|
@ -1052,7 +1058,6 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
}).Where(i => i != null).ToArray();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1166,7 +1171,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
|
|
|
|
|
// this block will add the series poster for episodes without a poster
|
|
|
|
|
// TODO maybe remove the if statement entirely
|
|
|
|
|
//if (options.ContainsField(ItemFields.SeriesPrimaryImage))
|
|
|
|
|
// if (options.ContainsField(ItemFields.SeriesPrimaryImage))
|
|
|
|
|
{
|
|
|
|
|
episodeSeries = episodeSeries ?? episode.Series;
|
|
|
|
|
if (episodeSeries != null)
|
|
|
|
@ -1212,7 +1217,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
|
|
|
|
|
// this block will add the series poster for seasons without a poster
|
|
|
|
|
// TODO maybe remove the if statement entirely
|
|
|
|
|
//if (options.ContainsField(ItemFields.SeriesPrimaryImage))
|
|
|
|
|
// if (options.ContainsField(ItemFields.SeriesPrimaryImage))
|
|
|
|
|
{
|
|
|
|
|
series = series ?? season.Series;
|
|
|
|
|
if (series != null)
|
|
|
|
@ -1350,6 +1355,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
dto.ParentLogoImageTag = GetTagAndFillBlurhash(dto, parent, image);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (artLimit > 0 && !(imageTags != null && imageTags.ContainsKey(ImageType.Art)) && dto.ParentArtItemId == null)
|
|
|
|
|
{
|
|
|
|
|
var image = allImages.FirstOrDefault(i => i.Type == ImageType.Art);
|
|
|
|
@ -1360,6 +1366,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
dto.ParentArtImageTag = GetTagAndFillBlurhash(dto, parent, image);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (thumbLimit > 0 && !(imageTags != null && imageTags.ContainsKey(ImageType.Thumb)) && (dto.ParentThumbItemId == null || parent is Series) && !(parent is ICollectionFolder) && !(parent is UserView))
|
|
|
|
|
{
|
|
|
|
|
var image = allImages.FirstOrDefault(i => i.Type == ImageType.Thumb);
|
|
|
|
@ -1370,6 +1377,7 @@ namespace Emby.Server.Implementations.Dto
|
|
|
|
|
dto.ParentThumbImageTag = GetTagAndFillBlurhash(dto, parent, image);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (backdropLimit > 0 && !((dto.BackdropImageTags != null && dto.BackdropImageTags.Length > 0) || (dto.ParentBackdropImageTags != null && dto.ParentBackdropImageTags.Length > 0)))
|
|
|
|
|
{
|
|
|
|
|
var images = allImages.Where(i => i.Type == ImageType.Backdrop).Take(backdropLimit).ToList();
|
|
|
|
|