aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Dto/DtoService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Implementations/Dto/DtoService.cs')
-rw-r--r--Emby.Server.Implementations/Dto/DtoService.cs542
1 files changed, 168 insertions, 374 deletions
diff --git a/Emby.Server.Implementations/Dto/DtoService.cs b/Emby.Server.Implementations/Dto/DtoService.cs
index 0a316fcf1..437917c45 100644
--- a/Emby.Server.Implementations/Dto/DtoService.cs
+++ b/Emby.Server.Implementations/Dto/DtoService.cs
@@ -18,16 +18,14 @@ using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Querying;
-using MediaBrowser.Model.Sync;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
-
-using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Extensions;
+using MediaBrowser.Controller.Playlists;
namespace Emby.Server.Implementations.Dto
{
@@ -44,13 +42,12 @@ namespace Emby.Server.Implementations.Dto
private readonly IProviderManager _providerManager;
private readonly Func<IChannelManager> _channelManagerFactory;
- private readonly ISyncManager _syncManager;
private readonly IApplicationHost _appHost;
private readonly Func<IDeviceManager> _deviceManager;
private readonly Func<IMediaSourceManager> _mediaSourceManager;
private readonly Func<ILiveTvManager> _livetvManager;
- public DtoService(ILogger logger, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepo, IImageProcessor imageProcessor, IServerConfigurationManager config, IFileSystem fileSystem, IProviderManager providerManager, Func<IChannelManager> channelManagerFactory, ISyncManager syncManager, IApplicationHost appHost, Func<IDeviceManager> deviceManager, Func<IMediaSourceManager> mediaSourceManager, Func<ILiveTvManager> livetvManager)
+ public DtoService(ILogger logger, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepo, IImageProcessor imageProcessor, IServerConfigurationManager config, IFileSystem fileSystem, IProviderManager providerManager, Func<IChannelManager> channelManagerFactory, IApplicationHost appHost, Func<IDeviceManager> deviceManager, Func<IMediaSourceManager> mediaSourceManager, Func<ILiveTvManager> livetvManager)
{
_logger = logger;
_libraryManager = libraryManager;
@@ -61,7 +58,6 @@ namespace Emby.Server.Implementations.Dto
_fileSystem = fileSystem;
_providerManager = providerManager;
_channelManagerFactory = channelManagerFactory;
- _syncManager = syncManager;
_appHost = appHost;
_deviceManager = deviceManager;
_mediaSourceManager = mediaSourceManager;
@@ -99,18 +95,6 @@ namespace Emby.Server.Implementations.Dto
public BaseItemDto[] GetBaseItemDtos(IEnumerable<BaseItem> items, int itemCount, DtoOptions options, User user = null, BaseItem owner = null)
{
- if (items == null)
- {
- throw new ArgumentNullException("items");
- }
-
- if (options == null)
- {
- throw new ArgumentNullException("options");
- }
-
- var syncDictionary = GetSyncedItemProgress(options);
-
var returnItems = new BaseItemDto[itemCount];
var programTuples = new List<Tuple<BaseItem, BaseItemDto>>();
var channelTuples = new List<Tuple<BaseItemDto, LiveTvChannel>>();
@@ -136,7 +120,7 @@ namespace Emby.Server.Implementations.Dto
if (byName != null)
{
- if (options.Fields.Contains(ItemFields.ItemCounts))
+ if (options.ContainsField(ItemFields.ItemCounts))
{
var libraryItems = byName.GetTaggedItems(new InternalItemsQuery(user)
{
@@ -147,12 +131,10 @@ namespace Emby.Server.Implementations.Dto
}
});
- SetItemByNameInfo(item, dto, libraryItems.ToList(), user);
+ SetItemByNameInfo(item, dto, libraryItems, user);
}
}
- FillSyncInfo(dto, item, options, user, syncDictionary);
-
returnItems[index] = dto;
index++;
}
@@ -173,8 +155,6 @@ namespace Emby.Server.Implementations.Dto
public BaseItemDto GetBaseItemDto(BaseItem item, DtoOptions options, User user = null, BaseItem owner = null)
{
- var syncDictionary = GetSyncedItemProgress(options);
-
var allCollectionFolders = _libraryManager.GetUserRootFolder().Children.OfType<Folder>().ToList();
var dto = GetBaseItemDtoInternal(item, options, allCollectionFolders, user, owner);
var tvChannel = item as LiveTvChannel;
@@ -194,7 +174,7 @@ namespace Emby.Server.Implementations.Dto
if (byName != null)
{
- if (options.Fields.Contains(ItemFields.ItemCounts))
+ if (options.ContainsField(ItemFields.ItemCounts))
{
SetItemByNameInfo(item, dto, GetTaggedItems(byName, user, new DtoOptions(false)
{
@@ -203,123 +183,24 @@ namespace Emby.Server.Implementations.Dto
}), user);
}
- FillSyncInfo(dto, item, options, user, syncDictionary);
return dto;
}
- FillSyncInfo(dto, item, options, user, syncDictionary);
-
return dto;
}
- private List<BaseItem> GetTaggedItems(IItemByName byName, User user, DtoOptions options)
+ private IList<BaseItem> GetTaggedItems(IItemByName byName, User user, DtoOptions options)
{
- var items = byName.GetTaggedItems(new InternalItemsQuery(user)
+ return byName.GetTaggedItems(new InternalItemsQuery(user)
{
Recursive = true,
DtoOptions = options
- }).ToList();
-
- return items;
- }
-
- public Dictionary<string, SyncedItemProgress> GetSyncedItemProgress(DtoOptions options)
- {
- if (!options.Fields.Contains(ItemFields.BasicSyncInfo) &&
- !options.Fields.Contains(ItemFields.SyncInfo))
- {
- return new Dictionary<string, SyncedItemProgress>();
- }
-
- var deviceId = options.DeviceId;
- if (string.IsNullOrWhiteSpace(deviceId))
- {
- return new Dictionary<string, SyncedItemProgress>();
- }
-
- var caps = _deviceManager().GetCapabilities(deviceId);
- if (caps == null || !caps.SupportsSync)
- {
- return new Dictionary<string, SyncedItemProgress>();
- }
-
- return _syncManager.GetSyncedItemProgresses(new SyncJobItemQuery
- {
- TargetId = deviceId,
- Statuses = new[]
- {
- SyncJobItemStatus.Converting,
- SyncJobItemStatus.Queued,
- SyncJobItemStatus.Transferring,
- SyncJobItemStatus.ReadyToTransfer,
- SyncJobItemStatus.Synced
- }
});
}
- public void FillSyncInfo(IEnumerable<Tuple<BaseItem, BaseItemDto>> tuples, DtoOptions options, User user)
- {
- if (options.Fields.Contains(ItemFields.BasicSyncInfo) ||
- options.Fields.Contains(ItemFields.SyncInfo))
- {
- var syncProgress = GetSyncedItemProgress(options);
-
- foreach (var tuple in tuples)
- {
- var item = tuple.Item1;
-
- FillSyncInfo(tuple.Item2, item, options, user, syncProgress);
- }
- }
- }
-
- private void FillSyncInfo(IHasSyncInfo dto, BaseItem item, DtoOptions options, User user, Dictionary<string, SyncedItemProgress> syncProgress)
- {
- var hasFullSyncInfo = options.Fields.Contains(ItemFields.SyncInfo);
-
- if (!hasFullSyncInfo && !options.Fields.Contains(ItemFields.BasicSyncInfo))
- {
- return;
- }
-
- if (dto.SupportsSync ?? false)
- {
- SyncedItemProgress syncStatus;
- if (syncProgress.TryGetValue(dto.Id, out syncStatus))
- {
- if (syncStatus.Status == SyncJobItemStatus.Synced)
- {
- dto.SyncPercent = 100;
- }
- else
- {
- dto.SyncPercent = syncStatus.Progress;
- }
-
- if (hasFullSyncInfo)
- {
- dto.HasSyncJob = true;
- dto.SyncStatus = syncStatus.Status;
- }
- }
- }
- }
-
private BaseItemDto GetBaseItemDtoInternal(BaseItem item, DtoOptions options, List<Folder> allCollectionFolders, User user = null, BaseItem owner = null)
{
- var fields = options.Fields;
-
- if (item == null)
- {
- throw new ArgumentNullException("item");
- }
-
- if (fields == null)
- {
- throw new ArgumentNullException("fields");
- }
-
var dto = new BaseItemDto
{
ServerId = _appHost.SystemId
@@ -330,12 +211,12 @@ namespace Emby.Server.Implementations.Dto
dto.SourceType = item.SourceType.ToString();
}
- if (fields.Contains(ItemFields.People))
+ if (options.ContainsField(ItemFields.People))
{
AttachPeople(dto, item);
}
- if (fields.Contains(ItemFields.PrimaryImageAspectRatio))
+ if (options.ContainsField(ItemFields.PrimaryImageAspectRatio))
{
try
{
@@ -348,7 +229,7 @@ namespace Emby.Server.Implementations.Dto
}
}
- if (fields.Contains(ItemFields.DisplayPreferencesId))
+ if (options.ContainsField(ItemFields.DisplayPreferencesId))
{
dto.DisplayPreferencesId = item.DisplayPreferencesId.ToString("N");
}
@@ -361,74 +242,54 @@ namespace Emby.Server.Implementations.Dto
var hasMediaSources = item as IHasMediaSources;
if (hasMediaSources != null)
{
- if (fields.Contains(ItemFields.MediaSources))
+ if (options.ContainsField(ItemFields.MediaSources))
{
- if (user == null)
- {
- dto.MediaSources = _mediaSourceManager().GetStaticMediaSources(hasMediaSources, true);
- }
- else
- {
- dto.MediaSources = _mediaSourceManager().GetStaticMediaSources(hasMediaSources, true, user);
- }
+ dto.MediaSources = _mediaSourceManager().GetStaticMediaSources(item, true, user).ToArray();
NormalizeMediaSourceContainers(dto);
}
}
- if (fields.Contains(ItemFields.Studios))
+ if (options.ContainsField(ItemFields.Studios))
{
AttachStudios(dto, item);
}
AttachBasicFields(dto, item, owner, options);
- var collectionFolder = item as ICollectionFolder;
- if (collectionFolder != null)
- {
- dto.CollectionType = collectionFolder.CollectionType;
- }
-
- if (fields.Contains(ItemFields.CanDelete))
+ if (options.ContainsField(ItemFields.CanDelete))
{
dto.CanDelete = user == null
? item.CanDelete()
: item.CanDelete(user);
}
- if (fields.Contains(ItemFields.CanDownload))
+ if (options.ContainsField(ItemFields.CanDownload))
{
dto.CanDownload = user == null
? item.CanDownload()
: item.CanDownload(user);
}
- if (fields.Contains(ItemFields.Etag))
+ if (options.ContainsField(ItemFields.Etag))
{
dto.Etag = item.GetEtag(user);
}
var liveTvManager = _livetvManager();
- if (item is ILiveTvRecording)
- {
- liveTvManager.AddInfoToRecordingDto(item, dto, user);
- }
- else
+ var activeRecording = liveTvManager.GetActiveRecordingInfo(item.Path);
+ if (activeRecording != null)
{
- var activeRecording = liveTvManager.GetActiveRecordingInfo(item.Path);
- if (activeRecording != null)
- {
- dto.Type = "Recording";
- dto.CanDownload = false;
- dto.RunTimeTicks = null;
+ dto.Type = "Recording";
+ dto.CanDownload = false;
+ dto.RunTimeTicks = null;
- if (!string.IsNullOrWhiteSpace(dto.SeriesName))
- {
- dto.EpisodeTitle = dto.Name;
- dto.Name = dto.SeriesName;
- }
- liveTvManager.AddInfoToRecordingDto(item, dto, activeRecording, user);
+ if (!string.IsNullOrEmpty(dto.SeriesName))
+ {
+ dto.EpisodeTitle = dto.Name;
+ dto.Name = dto.SeriesName;
}
+ liveTvManager.AddInfoToRecordingDto(item, dto, activeRecording, user);
}
return dto;
@@ -439,7 +300,7 @@ namespace Emby.Server.Implementations.Dto
foreach (var mediaSource in dto.MediaSources)
{
var container = mediaSource.Container;
- if (string.IsNullOrWhiteSpace(container))
+ if (string.IsNullOrEmpty(container))
{
continue;
}
@@ -452,17 +313,17 @@ namespace Emby.Server.Implementations.Dto
var path = mediaSource.Path;
string fileExtensionContainer = null;
- if (!string.IsNullOrWhiteSpace(path))
+ if (!string.IsNullOrEmpty(path))
{
path = Path.GetExtension(path);
- if (!string.IsNullOrWhiteSpace(path))
+ if (!string.IsNullOrEmpty(path))
{
path = Path.GetExtension(path);
- if (!string.IsNullOrWhiteSpace(path))
+ if (!string.IsNullOrEmpty(path))
{
path = path.TrimStart('.');
}
- if (!string.IsNullOrWhiteSpace(path) && containers.Contains(path, StringComparer.OrdinalIgnoreCase))
+ if (!string.IsNullOrEmpty(path) && containers.Contains(path, StringComparer.OrdinalIgnoreCase))
{
fileExtensionContainer = path;
}
@@ -473,22 +334,20 @@ namespace Emby.Server.Implementations.Dto
}
}
- public BaseItemDto GetItemByNameDto(BaseItem item, DtoOptions options, List<BaseItem> taggedItems, Dictionary<string, SyncedItemProgress> syncProgress, User user = null)
+ public BaseItemDto GetItemByNameDto(BaseItem item, DtoOptions options, List<BaseItem> taggedItems, User user = null)
{
var allCollectionFolders = _libraryManager.GetUserRootFolder().Children.OfType<Folder>().ToList();
var dto = GetBaseItemDtoInternal(item, options, allCollectionFolders, user);
- if (taggedItems != null && options.Fields.Contains(ItemFields.ItemCounts))
+ if (taggedItems != null && options.ContainsField(ItemFields.ItemCounts))
{
SetItemByNameInfo(item, dto, taggedItems, user);
}
- FillSyncInfo(dto, item, options, user, syncProgress);
-
return dto;
}
- private void SetItemByNameInfo(BaseItem item, BaseItemDto dto, List<BaseItem> taggedItems, User user = null)
+ private void SetItemByNameInfo(BaseItem item, BaseItemDto dto, IList<BaseItem> taggedItems, User user = null)
{
if (item is MusicArtist)
{
@@ -529,39 +388,37 @@ namespace Emby.Server.Implementations.Dto
/// <summary>
/// Attaches the user specific info.
/// </summary>
- private void AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, DtoOptions dtoOptions)
+ private void AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, DtoOptions options)
{
- var fields = dtoOptions.Fields;
-
if (item.IsFolder)
{
var folder = (Folder)item;
- if (dtoOptions.EnableUserData)
+ if (options.EnableUserData)
{
- dto.UserData = _userDataRepository.GetUserDataDto(item, dto, user, dtoOptions.Fields);
+ dto.UserData = _userDataRepository.GetUserDataDto(item, dto, user, options);
}
if (!dto.ChildCount.HasValue && item.SourceType == SourceType.Library)
{
// For these types we can try to optimize and assume these values will be equal
- if (item is MusicAlbum || item is Season)
+ if (item is MusicAlbum || item is Season || item is Playlist)
{
dto.ChildCount = dto.RecursiveItemCount;
}
- if (dtoOptions.Fields.Contains(ItemFields.ChildCount))
+ if (options.ContainsField(ItemFields.ChildCount))
{
dto.ChildCount = dto.ChildCount ?? GetChildCount(folder, user);
}
}
- if (fields.Contains(ItemFields.CumulativeRunTimeTicks))
+ if (options.ContainsField(ItemFields.CumulativeRunTimeTicks))
{
dto.CumulativeRunTimeTicks = item.RunTimeTicks;
}
- if (fields.Contains(ItemFields.DateLastMediaAdded))
+ if (options.ContainsField(ItemFields.DateLastMediaAdded))
{
dto.DateLastMediaAdded = folder.DateLastMediaAdded;
}
@@ -569,21 +426,21 @@ namespace Emby.Server.Implementations.Dto
else
{
- if (dtoOptions.EnableUserData)
+ if (options.EnableUserData)
{
dto.UserData = _userDataRepository.GetUserDataDto(item, user);
}
}
- if (/*!(item is LiveTvProgram) ||*/ fields.Contains(ItemFields.PlayAccess))
+ if (options.ContainsField(ItemFields.PlayAccess))
{
dto.PlayAccess = item.GetPlayAccess(user);
}
- if (fields.Contains(ItemFields.BasicSyncInfo) || fields.Contains(ItemFields.SyncInfo))
+ if (options.ContainsField(ItemFields.BasicSyncInfo))
{
var userCanSync = user != null && user.Policy.EnableContentDownloading;
- if (userCanSync && _syncManager.SupportsSync(item))
+ if (userCanSync && item.SupportsExternalTransfer)
{
dto.SupportsSync = true;
}
@@ -610,47 +467,15 @@ namespace Emby.Server.Implementations.Dto
/// <exception cref="System.ArgumentNullException">item</exception>
public string GetDtoId(BaseItem item)
{
- if (item == null)
- {
- throw new ArgumentNullException("item");
- }
-
return item.Id.ToString("N");
}
- /// <summary>
- /// Converts a UserItemData to a DTOUserItemData
- /// </summary>
- /// <param name="data">The data.</param>
- /// <returns>DtoUserItemData.</returns>
- /// <exception cref="System.ArgumentNullException"></exception>
- public UserItemDataDto GetUserItemDataDto(UserItemData data)
- {
- if (data == null)
- {
- throw new ArgumentNullException("data");
- }
-
- return new UserItemDataDto
- {
- IsFavorite = data.IsFavorite,
- Likes = data.Likes,
- PlaybackPositionTicks = data.PlaybackPositionTicks,
- PlayCount = data.PlayCount,
- Rating = data.Rating,
- Played = data.Played,
- LastPlayedDate = data.LastPlayedDate,
- Key = data.Key
- };
- }
private void SetBookProperties(BaseItemDto dto, Book item)
{
dto.SeriesName = item.SeriesName;
}
private void SetPhotoProperties(BaseItemDto dto, Photo item)
{
- dto.Width = item.Width;
- dto.Height = item.Height;
dto.CameraMake = item.CameraMake;
dto.CameraModel = item.CameraModel;
dto.Software = item.Software;
@@ -670,7 +495,7 @@ namespace Emby.Server.Implementations.Dto
if (album != null)
{
dto.Album = album.Name;
- dto.AlbumId = album.Id.ToString("N");
+ dto.AlbumId = album.Id;
}
}
@@ -688,7 +513,7 @@ namespace Emby.Server.Implementations.Dto
if (parentAlbumIds.Count > 0)
{
- dto.AlbumId = parentAlbumIds[0].ToString("N");
+ dto.AlbumId = parentAlbumIds[0];
}
}
@@ -835,11 +660,11 @@ namespace Emby.Server.Implementations.Dto
private void AttachStudios(BaseItemDto dto, BaseItem item)
{
dto.Studios = item.Studios
- .Where(i => !string.IsNullOrWhiteSpace(i))
- .Select(i => new NameIdPair
+ .Where(i => !string.IsNullOrEmpty(i))
+ .Select(i => new NameGuidPair
{
Name = i,
- Id = _libraryManager.GetStudioId(i).ToString("N")
+ Id = _libraryManager.GetStudioId(i)
})
.ToArray();
}
@@ -847,8 +672,8 @@ namespace Emby.Server.Implementations.Dto
private void AttachGenreItems(BaseItemDto dto, BaseItem item)
{
dto.GenreItems = item.Genres
- .Where(i => !string.IsNullOrWhiteSpace(i))
- .Select(i => new NameIdPair
+ .Where(i => !string.IsNullOrEmpty(i))
+ .Select(i => new NameGuidPair
{
Name = i,
Id = GetGenreId(i, item)
@@ -856,53 +681,19 @@ namespace Emby.Server.Implementations.Dto
.ToArray();
}
- private string GetGenreId(string name, BaseItem owner)
+ private Guid GetGenreId(string name, BaseItem owner)
{
if (owner is IHasMusicGenres)
{
- return _libraryManager.GetMusicGenreId(name).ToString("N");
+ return _libraryManager.GetMusicGenreId(name);
}
if (owner is Game || owner is GameSystem)
{
- return _libraryManager.GetGameGenreId(name).ToString("N");
+ return _libraryManager.GetGameGenreId(name);
}
- return _libraryManager.GetGenreId(name).ToString("N");
- }
-
- /// <summary>
- /// Gets the chapter info dto.
- /// </summary>
- /// <param name="chapterInfo">The chapter info.</param>
- /// <param name="item">The item.</param>
- /// <returns>ChapterInfoDto.</returns>
- private ChapterInfoDto GetChapterInfoDto(ChapterInfo chapterInfo, BaseItem item)
- {
- var dto = new ChapterInfoDto
- {
- Name = chapterInfo.Name,
- StartPositionTicks = chapterInfo.StartPositionTicks
- };
-
- if (!string.IsNullOrEmpty(chapterInfo.ImagePath))
- {
- dto.ImageTag = GetImageCacheTag(item, new ItemImageInfo
- {
- Path = chapterInfo.ImagePath,
- Type = ImageType.Chapter,
- DateModified = chapterInfo.ImageDateModified
- });
- }
-
- return dto;
- }
-
- public List<ChapterInfoDto> GetChapterInfoDtos(BaseItem item)
- {
- return _itemRepo.GetChapters(item.Id)
- .Select(c => GetChapterInfoDto(c, item))
- .ToList();
+ return _libraryManager.GetGenreId(name);
}
/// <summary>
@@ -914,14 +705,12 @@ namespace Emby.Server.Implementations.Dto
/// <param name="options">The options.</param>
private void AttachBasicFields(BaseItemDto dto, BaseItem item, BaseItem owner, DtoOptions options)
{
- var fields = options.Fields;
-
- if (fields.Contains(ItemFields.DateCreated))
+ if (options.ContainsField(ItemFields.DateCreated))
{
dto.DateCreated = item.DateCreated;
}
- if (fields.Contains(ItemFields.Settings))
+ if (options.ContainsField(ItemFields.Settings))
{
dto.LockedFields = item.LockedFields;
dto.LockData = item.IsLocked;
@@ -931,17 +720,12 @@ namespace Emby.Server.Implementations.Dto
dto.EndDate = item.EndDate;
- if (fields.Contains(ItemFields.HomePageUrl))
- {
- dto.HomePageUrl = item.HomePageUrl;
- }
-
- if (fields.Contains(ItemFields.ExternalUrls))
+ if (options.ContainsField(ItemFields.ExternalUrls))
{
dto.ExternalUrls = _providerManager.GetExternalUrls(item).ToArray();
}
- if (fields.Contains(ItemFields.Tags))
+ if (options.ContainsField(ItemFields.Tags))
{
dto.Tags = item.Tags;
}
@@ -958,7 +742,7 @@ namespace Emby.Server.Implementations.Dto
dto.BackdropImageTags = GetImageTags(item, item.GetImages(ImageType.Backdrop).Take(backdropLimit).ToList());
}
- if (fields.Contains(ItemFields.ScreenshotImageTags))
+ if (options.ContainsField(ItemFields.ScreenshotImageTags))
{
var screenshotLimit = options.GetImageLimit(ImageType.Screenshot);
if (screenshotLimit > 0)
@@ -967,7 +751,7 @@ namespace Emby.Server.Implementations.Dto
}
}
- if (fields.Contains(ItemFields.Genres))
+ if (options.ContainsField(ItemFields.Genres))
{
dto.Genres = item.Genres;
AttachGenreItems(dto, item);
@@ -994,7 +778,7 @@ namespace Emby.Server.Implementations.Dto
}
}
- dto.Id = GetDtoId(item);
+ dto.Id = item.Id;
dto.IndexNumber = item.IndexNumber;
dto.ParentIndexNumber = item.ParentIndexNumber;
@@ -1014,13 +798,9 @@ namespace Emby.Server.Implementations.Dto
dto.LocationType = item.LocationType;
}
- if (item.IsHD.HasValue && item.IsHD.Value)
- {
- dto.IsHD = item.IsHD;
- }
dto.Audio = item.Audio;
- if (fields.Contains(ItemFields.Settings))
+ if (options.ContainsField(ItemFields.Settings))
{
dto.PreferredMetadataCountryCode = item.PreferredMetadataCountryCode;
dto.PreferredMetadataLanguage = item.PreferredMetadataLanguage;
@@ -1028,90 +808,83 @@ namespace Emby.Server.Implementations.Dto
dto.CriticRating = item.CriticRating;
- var hasTrailers = item as IHasTrailers;
- if (hasTrailers != null)
- {
- dto.LocalTrailerCount = hasTrailers.GetTrailerIds().Count;
- }
-
var hasDisplayOrder = item as IHasDisplayOrder;
if (hasDisplayOrder != null)
{
dto.DisplayOrder = hasDisplayOrder.DisplayOrder;
}
- var userView = item as UserView;
- if (userView != null)
+ var hasCollectionType = item as IHasCollectionType;
+ if (hasCollectionType != null)
{
- dto.CollectionType = userView.ViewType;
+ dto.CollectionType = hasCollectionType.CollectionType;
}
- if (fields.Contains(ItemFields.RemoteTrailers))
+ if (options.ContainsField(ItemFields.RemoteTrailers))
{
- dto.RemoteTrailers = hasTrailers != null ?
- hasTrailers.RemoteTrailers :
- new MediaUrl[] { };
+ dto.RemoteTrailers = item.RemoteTrailers;
}
dto.Name = item.Name;
dto.OfficialRating = item.OfficialRating;
- if (fields.Contains(ItemFields.Overview))
+ if (options.ContainsField(ItemFields.Overview))
{
dto.Overview = item.Overview;
}
- if (fields.Contains(ItemFields.OriginalTitle))
+ if (options.ContainsField(ItemFields.OriginalTitle))
{
dto.OriginalTitle = item.OriginalTitle;
}
- if (fields.Contains(ItemFields.ParentId))
+ if (options.ContainsField(ItemFields.ParentId))
{
- var displayParentId = item.DisplayParentId;
- if (displayParentId.HasValue)
- {
- dto.ParentId = displayParentId.Value.ToString("N");
- }
+ dto.ParentId = item.DisplayParentId;
}
AddInheritedImages(dto, item, options, owner);
- if (fields.Contains(ItemFields.Path))
+ if (options.ContainsField(ItemFields.Path))
{
dto.Path = GetMappedPath(item, owner);
}
+ if (options.ContainsField(ItemFields.EnableMediaSourceDisplay))
+ {
+ dto.EnableMediaSourceDisplay = item.EnableMediaSourceDisplay;
+ }
+
dto.PremiereDate = item.PremiereDate;
dto.ProductionYear = item.ProductionYear;
- if (fields.Contains(ItemFields.ProviderIds))
+ if (options.ContainsField(ItemFields.ProviderIds))
{
dto.ProviderIds = item.ProviderIds;
}
dto.RunTimeTicks = item.RunTimeTicks;
- if (fields.Contains(ItemFields.SortName))
+ if (options.ContainsField(ItemFields.SortName))
{
dto.SortName = item.SortName;
}
- if (fields.Contains(ItemFields.CustomRating))
+ if (options.ContainsField(ItemFields.CustomRating))
{
dto.CustomRating = item.CustomRating;
}
- if (fields.Contains(ItemFields.Taglines))
+ if (options.ContainsField(ItemFields.Taglines))
{
- if (!string.IsNullOrWhiteSpace(item.Tagline))
+ if (!string.IsNullOrEmpty(item.Tagline))
{
dto.Taglines = new string[] { item.Tagline };
}
if (dto.Taglines == null)
{
- dto.Taglines = new string[] { };
+ dto.Taglines = Array.Empty<string>();
}
}
@@ -1141,12 +914,12 @@ namespace Emby.Server.Implementations.Dto
if (albumParent != null)
{
- dto.AlbumId = GetDtoId(albumParent);
+ dto.AlbumId = albumParent.Id;
dto.AlbumPrimaryImageTag = GetImageCacheTag(albumParent, ImageType.Primary);
}
- //if (fields.Contains(ItemFields.MediaSourceCount))
+ //if (options.ContainsField(ItemFields.MediaSourceCount))
//{
// Songs always have one
//}
@@ -1182,7 +955,7 @@ namespace Emby.Server.Implementations.Dto
.Select(i =>
{
// This should not be necessary but we're seeing some cases of it
- if (string.IsNullOrWhiteSpace(i))
+ if (string.IsNullOrEmpty(i))
{
return null;
}
@@ -1193,10 +966,10 @@ namespace Emby.Server.Implementations.Dto
});
if (artist != null)
{
- return new NameIdPair
+ return new NameGuidPair
{
Name = artist.Name,
- Id = artist.Id.ToString("N")
+ Id = artist.Id
};
}
@@ -1233,7 +1006,7 @@ namespace Emby.Server.Implementations.Dto
.Select(i =>
{
// This should not be necessary but we're seeing some cases of it
- if (string.IsNullOrWhiteSpace(i))
+ if (string.IsNullOrEmpty(i))
{
return null;
}
@@ -1244,10 +1017,10 @@ namespace Emby.Server.Implementations.Dto
});
if (artist != null)
{
- return new NameIdPair
+ return new NameGuidPair
{
Name = artist.Name,
- Id = artist.Id.ToString("N")
+ Id = artist.Id
};
}
@@ -1274,7 +1047,7 @@ namespace Emby.Server.Implementations.Dto
dto.PartCount = video.AdditionalParts.Length + 1;
}
- if (fields.Contains(ItemFields.MediaSourceCount))
+ if (options.ContainsField(ItemFields.MediaSourceCount))
{
var mediaSourceCount = video.MediaSourceCount;
if (mediaSourceCount != 1)
@@ -1283,9 +1056,9 @@ namespace Emby.Server.Implementations.Dto
}
}
- if (fields.Contains(ItemFields.Chapters))
+ if (options.ContainsField(ItemFields.Chapters))
{
- dto.Chapters = GetChapterInfoDtos(item);
+ dto.Chapters = _itemRepo.GetChapters(item);
}
if (video.ExtraType.HasValue)
@@ -1294,7 +1067,7 @@ namespace Emby.Server.Implementations.Dto
}
}
- if (fields.Contains(ItemFields.MediaStreams))
+ if (options.ContainsField(ItemFields.MediaStreams))
{
// Add VideoInfo
var iHasMediaSources = item as IHasMediaSources;
@@ -1303,30 +1076,48 @@ namespace Emby.Server.Implementations.Dto
{
MediaStream[] mediaStreams;
- if (dto.MediaSources != null && dto.MediaSources.Count > 0)
+ if (dto.MediaSources != null && dto.MediaSources.Length > 0)
{
- mediaStreams = dto.MediaSources.Where(i => new Guid(i.Id) == item.Id)
- .SelectMany(i => i.MediaStreams)
- .ToArray();
+ if (item.SourceType == SourceType.Channel)
+ {
+ mediaStreams = dto.MediaSources[0].MediaStreams.ToArray();
+ }
+ else
+ {
+ mediaStreams = dto.MediaSources.Where(i => string.Equals(i.Id, item.Id.ToString("N"), StringComparison.OrdinalIgnoreCase))
+ .SelectMany(i => i.MediaStreams)
+ .ToArray();
+ }
}
else
{
- mediaStreams = _mediaSourceManager().GetStaticMediaSources(iHasMediaSources, true).First().MediaStreams.ToArray();
+ mediaStreams = _mediaSourceManager().GetStaticMediaSources(item, true).First().MediaStreams.ToArray();
}
dto.MediaStreams = mediaStreams;
}
}
- var hasSpecialFeatures = item as IHasSpecialFeatures;
- if (hasSpecialFeatures != null)
+ BaseItem[] allExtras = null;
+
+ if (options.ContainsField(ItemFields.SpecialFeatureCount))
{
- var specialFeatureCount = hasSpecialFeatures.SpecialFeatureIds.Length;
+ if (allExtras == null)
+ {
+ allExtras = item.GetExtras().ToArray();
+ }
- if (specialFeatureCount > 0)
+ dto.SpecialFeatureCount = allExtras.Count(i => i.ExtraType.HasValue && BaseItem.DisplayExtraTypes.Contains(i.ExtraType.Value));
+ }
+
+ if (options.ContainsField(ItemFields.LocalTrailerCount))
+ {
+ if (allExtras == null)
{
- dto.SpecialFeatureCount = specialFeatureCount;
+ allExtras = item.GetExtras().ToArray();
}
+
+ dto.LocalTrailerCount = allExtras.Count(i => i.ExtraType.HasValue && i.ExtraType.Value == ExtraType.Trailer);
}
// Add EpisodeInfo
@@ -1336,37 +1127,20 @@ namespace Emby.Server.Implementations.Dto
dto.IndexNumberEnd = episode.IndexNumberEnd;
dto.SeriesName = episode.SeriesName;
- if (fields.Contains(ItemFields.AlternateEpisodeNumbers))
- {
- dto.DvdSeasonNumber = episode.DvdSeasonNumber;
- dto.DvdEpisodeNumber = episode.DvdEpisodeNumber;
- dto.AbsoluteEpisodeNumber = episode.AbsoluteEpisodeNumber;
- }
-
- if (fields.Contains(ItemFields.SpecialEpisodeNumbers))
+ if (options.ContainsField(ItemFields.SpecialEpisodeNumbers))
{
dto.AirsAfterSeasonNumber = episode.AirsAfterSeasonNumber;
dto.AirsBeforeEpisodeNumber = episode.AirsBeforeEpisodeNumber;
dto.AirsBeforeSeasonNumber = episode.AirsBeforeSeasonNumber;
}
- var seasonId = episode.SeasonId;
- if (seasonId.HasValue)
- {
- dto.SeasonId = seasonId.Value.ToString("N");
- }
-
dto.SeasonName = episode.SeasonName;
-
- var seriesId = episode.SeriesId;
- if (seriesId.HasValue)
- {
- dto.SeriesId = seriesId.Value.ToString("N");
- }
+ dto.SeasonId = episode.SeasonId;
+ dto.SeriesId = episode.SeriesId;
Series episodeSeries = null;
- //if (fields.Contains(ItemFields.SeriesPrimaryImage))
+ //if (options.ContainsField(ItemFields.SeriesPrimaryImage))
{
episodeSeries = episodeSeries ?? episode.Series;
if (episodeSeries != null)
@@ -1375,7 +1149,7 @@ namespace Emby.Server.Implementations.Dto
}
}
- if (fields.Contains(ItemFields.SeriesStudio))
+ if (options.ContainsField(ItemFields.SeriesStudio))
{
episodeSeries = episodeSeries ?? episode.Series;
if (episodeSeries != null)
@@ -1399,16 +1173,11 @@ namespace Emby.Server.Implementations.Dto
if (season != null)
{
dto.SeriesName = season.SeriesName;
-
- var seriesId = season.SeriesId;
- if (seriesId.HasValue)
- {
- dto.SeriesId = seriesId.Value.ToString("N");
- }
+ dto.SeriesId = season.SeriesId;
series = null;
- if (fields.Contains(ItemFields.SeriesStudio))
+ if (options.ContainsField(ItemFields.SeriesStudio))
{
series = series ?? season.Series;
if (series != null)
@@ -1417,7 +1186,7 @@ namespace Emby.Server.Implementations.Dto
}
}
- //if (fields.Contains(ItemFields.SeriesPrimaryImage))
+ //if (options.ContainsField(ItemFields.SeriesPrimaryImage))
{
series = series ?? season.Series;
if (series != null)
@@ -1453,7 +1222,7 @@ namespace Emby.Server.Implementations.Dto
SetBookProperties(dto, book);
}
- if (fields.Contains(ItemFields.ProductionLocations))
+ if (options.ContainsField(ItemFields.ProductionLocations))
{
if (item.ProductionLocations.Length > 0 || item is Movie)
{
@@ -1461,6 +1230,33 @@ namespace Emby.Server.Implementations.Dto
}
}
+ if (options.ContainsField(ItemFields.Width))
+ {
+ var width = item.Width;
+ if (width > 0)
+ {
+ dto.Width = width;
+ }
+ }
+
+ if (options.ContainsField(ItemFields.Height))
+ {
+ var height = item.Height;
+ if (height > 0)
+ {
+ dto.Height = height;
+ }
+ }
+
+ if (options.ContainsField(ItemFields.IsHD))
+ {
+ // Compatibility
+ if (item.IsHD)
+ {
+ dto.IsHD = true;
+ }
+ }
+
var photo = item as Photo;
if (photo != null)
{
@@ -1469,7 +1265,7 @@ namespace Emby.Server.Implementations.Dto
dto.ChannelId = item.ChannelId;
- if (item.SourceType == SourceType.Channel && !string.IsNullOrWhiteSpace(item.ChannelId))
+ if (item.SourceType == SourceType.Channel)
{
var channel = _libraryManager.GetItemById(item.ChannelId);
if (channel != null)
@@ -1491,7 +1287,7 @@ namespace Emby.Server.Implementations.Dto
}
}
- var parent = currentItem.DisplayParent ?? (currentItem.IsOwnedItem ? currentItem.GetOwner() : currentItem.GetParent());
+ var parent = currentItem.DisplayParent ?? currentItem.GetOwner() ?? currentItem.GetParent();
if (parent == null && !(originalItem is UserRootFolder) && !(originalItem is UserView) && !(originalItem is AggregateFolder) && !(originalItem is ICollectionFolder) && !(originalItem is Channel))
{
@@ -1592,9 +1388,7 @@ namespace Emby.Server.Implementations.Dto
{
var path = item.Path;
- var locationType = item.LocationType;
-
- if (locationType == LocationType.FileSystem || locationType == LocationType.Offline)
+ if (item.IsFileProtocol)
{
path = _libraryManager.GetPathAfterNetworkSubstitution(path, ownerItem ?? item);
}
@@ -1628,15 +1422,15 @@ namespace Emby.Server.Implementations.Dto
var defaultAspectRatio = item.GetDefaultPrimaryImageAspectRatio();
- if (defaultAspectRatio.HasValue)
+ if (defaultAspectRatio > 0)
{
- if (supportedEnhancers.Count == 0)
+ if (supportedEnhancers.Length == 0)
{
- return defaultAspectRatio.Value;
+ return defaultAspectRatio;
}
double dummyWidth = 200;
- double dummyHeight = dummyWidth / defaultAspectRatio.Value;
+ double dummyHeight = dummyWidth / defaultAspectRatio;
size = new ImageSize(dummyWidth, dummyHeight);
}
else