diff options
Diffstat (limited to 'Emby.Server.Implementations/Dto/DtoService.cs')
| -rw-r--r-- | Emby.Server.Implementations/Dto/DtoService.cs | 542 |
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 |
