diff options
| author | Luke <luke.pulverenti@gmail.com> | 2017-05-31 15:40:34 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-05-31 15:40:34 -0400 |
| commit | 91176d9ccc1dde8155c10411c70e62a9f4b059d5 (patch) | |
| tree | 21365f5a8dd09534a53d9f88d2a7a3116f3f3f98 /MediaBrowser.Controller/Entities | |
| parent | c37c9a75073b1b9caa3af2c3bc62abd837bd630e (diff) | |
| parent | 4e10daf646e0788409f2bc52ef70effa2616e3f3 (diff) | |
Merge pull request #2677 from MediaBrowser/beta
Beta
Diffstat (limited to 'MediaBrowser.Controller/Entities')
26 files changed, 278 insertions, 376 deletions
diff --git a/MediaBrowser.Controller/Entities/AggregateFolder.cs b/MediaBrowser.Controller/Entities/AggregateFolder.cs index a1de23c930..fe8ac0919c 100644 --- a/MediaBrowser.Controller/Entities/AggregateFolder.cs +++ b/MediaBrowser.Controller/Entities/AggregateFolder.cs @@ -6,7 +6,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Common.IO; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.IO; using MediaBrowser.Model.Serialization; diff --git a/MediaBrowser.Controller/Entities/Audio/Audio.cs b/MediaBrowser.Controller/Entities/Audio/Audio.cs index 92d8d95bcf..4d35531cb7 100644 --- a/MediaBrowser.Controller/Entities/Audio/Audio.cs +++ b/MediaBrowser.Controller/Entities/Audio/Audio.cs @@ -131,7 +131,7 @@ namespace MediaBrowser.Controller.Entities.Audio /// Creates the name of the sort. /// </summary> /// <returns>System.String.</returns> - protected override string CreateSortName() + protected override string CreateSortNameInternal() { return (ParentIndexNumber != null ? ParentIndexNumber.Value.ToString("0000 - ") : "") + (IndexNumber != null ? IndexNumber.Value.ToString("0000 - ") : "") + Name; @@ -209,7 +209,7 @@ namespace MediaBrowser.Controller.Entities.Audio if (SourceType == SourceType.Channel) { var sources = ChannelManager.GetStaticMediaSources(this, CancellationToken.None) - .Result.ToList(); + .ToList(); if (sources.Count > 0) { diff --git a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs index f40ab3cdee..e9eca19cf7 100644 --- a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs +++ b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs @@ -8,6 +8,7 @@ using System.Linq; using MediaBrowser.Model.Serialization; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Dto; @@ -42,20 +43,22 @@ namespace MediaBrowser.Controller.Entities.Audio [IgnoreDataMember] public MusicArtist MusicArtist { - get - { - var artist = GetParents().OfType<MusicArtist>().FirstOrDefault(); + get { return GetMusicArtist(new DtoOptions(true)); } + } - if (artist == null) + public MusicArtist GetMusicArtist(DtoOptions options) + { + var artist = GetParents().OfType<MusicArtist>().FirstOrDefault(); + + if (artist == null) + { + var name = AlbumArtist; + if (!string.IsNullOrWhiteSpace(name)) { - var name = AlbumArtist; - if (!string.IsNullOrWhiteSpace(name)) - { - artist = LibraryManager.GetArtist(name); - } + artist = LibraryManager.GetArtist(name, options); } - return artist; } + return artist; } [IgnoreDataMember] @@ -171,7 +174,7 @@ namespace MediaBrowser.Controller.Entities.Audio id.AlbumArtists = AlbumArtists; - var artist = MusicArtist; + var artist = GetMusicArtist(new DtoOptions(false)); if (artist != null) { diff --git a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs index 8d83f8a35e..b0b9493a53 100644 --- a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs +++ b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs @@ -266,20 +266,6 @@ namespace MediaBrowser.Controller.Entities.Audio return info; } - public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems) - { - return inputItems.Where(GetItemFilter()); - } - - public Func<BaseItem, bool> GetItemFilter() - { - return i => - { - var hasArtist = i as IHasArtist; - return hasArtist != null && hasArtist.HasAnyArtist(Name); - }; - } - [IgnoreDataMember] public override bool SupportsPeople { diff --git a/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs b/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs index 2f99e530e3..d4a85b4d07 100644 --- a/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs +++ b/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs @@ -91,16 +91,6 @@ namespace MediaBrowser.Controller.Entities.Audio } } - public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems) - { - return inputItems.Where(GetItemFilter()); - } - - public Func<BaseItem, bool> GetItemFilter() - { - return i => i is IHasMusicGenres && i.Genres.Contains(Name, StringComparer.OrdinalIgnoreCase); - } - [IgnoreDataMember] public override bool SupportsPeople { diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 999f6db3fc..346442f59a 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -21,7 +21,8 @@ using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Common.IO; + +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Extensions; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Sorting; @@ -186,10 +187,15 @@ namespace MediaBrowser.Controller.Entities } set { + var isSortNameDefault = IsSortNameDefault(SortName); + _name = value; - // lazy load this again - _sortName = null; + if (isSortNameDefault) + { + // lazy load this again + SortName = null; + } } } @@ -580,7 +586,6 @@ namespace MediaBrowser.Controller.Entities } } - private string _forcedSortName; /// <summary> /// Gets or sets the name of the forced sort. /// </summary> @@ -588,8 +593,42 @@ namespace MediaBrowser.Controller.Entities [IgnoreDataMember] public string ForcedSortName { - get { return _forcedSortName; } - set { _forcedSortName = value; _sortName = null; } + get + { + var sortName = SortName; + + if (string.IsNullOrWhiteSpace(sortName)) + { + return null; + } + + if (string.Equals(sortName, CreateSortName(), StringComparison.OrdinalIgnoreCase)) + { + return null; + } + + return sortName; + } + set + { + if (string.IsNullOrWhiteSpace(value)) + { + SortName = null; + } + else + { + var newValue = CreateSortNameFromCustomValue(value); + + if (string.Equals(newValue, CreateSortName(), StringComparison.OrdinalIgnoreCase)) + { + SortName = null; + } + else + { + SortName = newValue; + } + } + } } private string _sortName; @@ -604,15 +643,7 @@ namespace MediaBrowser.Controller.Entities { if (_sortName == null) { - if (!string.IsNullOrWhiteSpace(ForcedSortName)) - { - // Need the ToLower because that's what CreateSortName does - _sortName = ModifySortChunks(ForcedSortName).ToLower(); - } - else - { - _sortName = CreateSortName(); - } + _sortName = CreateSortName(); } return _sortName; } @@ -622,6 +653,31 @@ namespace MediaBrowser.Controller.Entities } } + private string CreateSortNameFromCustomValue(string value) + { + return string.IsNullOrWhiteSpace(value) ? null : NormalizeCustomSortName(value); + } + + protected virtual string NormalizeCustomSortName(string value) + { + if (ConfigurationManager.Configuration.EnableSimpleSortNameHandling) + { + return value.RemoveDiacritics().ToLower(); + } + + return ModifySortChunks(value).ToLower(); + } + + public bool IsSortNameDefault(string value) + { + if (string.IsNullOrWhiteSpace(value)) + { + return true; + } + + return string.Equals(CreateSortNameFromCustomValue(value), CreateSortName(), StringComparison.OrdinalIgnoreCase); + } + public string GetInternalMetadataPath() { var basePath = ConfigurationManager.ApplicationPaths.InternalMetadataPath; @@ -643,14 +699,22 @@ namespace MediaBrowser.Controller.Entities return System.IO.Path.Combine(basePath, idString.Substring(0, 2), idString); } + protected string CreateSortName() + { + if (string.IsNullOrWhiteSpace(Name)) + { + return null; + } + + return CreateSortNameInternal(); + } + /// <summary> /// Creates the name of the sort. /// </summary> /// <returns>System.String.</returns> - protected virtual string CreateSortName() + protected virtual string CreateSortNameInternal() { - if (Name == null) return null; //some items may not have name filled in properly - if (!EnableAlphaNumericSorting) { return Name.TrimStart(); @@ -1303,7 +1367,6 @@ namespace MediaBrowser.Controller.Entities public void AfterMetadataRefresh() { - _sortName = null; } /// <summary> @@ -1680,7 +1743,7 @@ namespace MediaBrowser.Controller.Entities private BaseItem FindLinkedChild(LinkedChild info) { - if (!string.IsNullOrEmpty(info.Path)) + if (!string.IsNullOrWhiteSpace(info.Path)) { var itemByPath = LibraryManager.FindByPath(info.Path, null); @@ -1809,10 +1872,13 @@ namespace MediaBrowser.Controller.Entities /// Do whatever refreshing is necessary when the filesystem pertaining to this item has changed. /// </summary> /// <returns>Task.</returns> - public virtual Task ChangedExternally() + public virtual void ChangedExternally() { - ProviderManager.QueueRefresh(Id, new MetadataRefreshOptions(FileSystem), RefreshPriority.High); - return Task.FromResult(true); + ProviderManager.QueueRefresh(Id, new MetadataRefreshOptions(FileSystem) + { + ValidateChildren = true, + + }, RefreshPriority.High); } /// <summary> @@ -2187,8 +2253,6 @@ namespace MediaBrowser.Controller.Entities /// </summary> public virtual bool BeforeMetadataRefresh() { - _sortName = null; - var hasChanges = false; if (string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Path)) @@ -2210,7 +2274,7 @@ namespace MediaBrowser.Controller.Entities return path; } - public virtual Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> itemFields) + public virtual void FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> fields) { if (RunTimeTicks.HasValue) { @@ -2226,8 +2290,6 @@ namespace MediaBrowser.Controller.Entities } } } - - return Task.FromResult(true); } protected Task RefreshMetadataForOwnedItem(BaseItem ownedItem, bool copyTitleMetadata, MetadataRefreshOptions options, CancellationToken cancellationToken) diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs index 24474ba559..0a5faa727c 100644 --- a/MediaBrowser.Controller/Entities/CollectionFolder.cs +++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs @@ -7,7 +7,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Common.IO; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Extensions; diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index edac27f99b..7566911a10 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -10,8 +10,9 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Common.IO; + using MediaBrowser.Controller.Channels; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; @@ -671,8 +672,9 @@ namespace MediaBrowser.Controller.Entities { return ItemRepository.GetItemList(new InternalItemsQuery { - ParentId = Id, - GroupByPresentationUniqueKey = false + Parent = this, + GroupByPresentationUniqueKey = false, + DtoOptions = new DtoOptions(true) }); } @@ -690,9 +692,13 @@ namespace MediaBrowser.Controller.Entities { Recursive = false, Limit = 0, - ParentId = Id + Parent = this, + DtoOptions = new DtoOptions(false) + { + EnableImages = false + } - }).Result; + }); return result.TotalRecordCount; } @@ -705,9 +711,13 @@ namespace MediaBrowser.Controller.Entities IsFolder = false, IsVirtualItem = false, EnableTotalRecordCount = true, - Limit = 0 + Limit = 0, + DtoOptions = new DtoOptions(false) + { + EnableImages = false + } - }).Result.TotalRecordCount; + }).TotalRecordCount; } public QueryResult<BaseItem> QueryRecursive(InternalItemsQuery query) @@ -733,7 +743,10 @@ namespace MediaBrowser.Controller.Entities if (!(this is UserRootFolder) && !(this is AggregateFolder)) { - query.ParentId = query.ParentId ?? Id; + if (!query.ParentId.HasValue) + { + query.Parent = this; + } } if (RequiresPostFiltering2(query)) @@ -813,30 +826,6 @@ namespace MediaBrowser.Controller.Entities } } - if (query.SortBy != null && query.SortBy.Length > 0) - { - if (query.SortBy.Contains(ItemSortBy.AiredEpisodeOrder, StringComparer.OrdinalIgnoreCase)) - { - Logger.Debug("Query requires post-filtering due to ItemSortBy.AiredEpisodeOrder"); - return true; - } - if (query.SortBy.Contains(ItemSortBy.GameSystem, StringComparer.OrdinalIgnoreCase)) - { - Logger.Debug("Query requires post-filtering due to ItemSortBy.GameSystem"); - return true; - } - if (query.SortBy.Contains(ItemSortBy.Players, StringComparer.OrdinalIgnoreCase)) - { - Logger.Debug("Query requires post-filtering due to ItemSortBy.Players"); - return true; - } - if (query.SortBy.Contains(ItemSortBy.VideoBitRate, StringComparer.OrdinalIgnoreCase)) - { - Logger.Debug("Query requires post-filtering due to ItemSortBy.VideoBitRate"); - return true; - } - } - if (query.IsInBoxSet.HasValue) { Logger.Debug("Query requires post-filtering due to IsInBoxSet"); @@ -894,18 +883,6 @@ namespace MediaBrowser.Controller.Entities return true; } - if (query.MinPlayers.HasValue) - { - Logger.Debug("Query requires post-filtering due to MinPlayers"); - return true; - } - - if (query.MaxPlayers.HasValue) - { - Logger.Debug("Query requires post-filtering due to MaxPlayers"); - return true; - } - if (UserViewBuilder.CollapseBoxSetItems(query, this, query.User, ConfigurationManager)) { Logger.Debug("Query requires post-filtering due to CollapseBoxSetItems"); @@ -936,12 +913,6 @@ namespace MediaBrowser.Controller.Entities return true; } - if (!string.IsNullOrWhiteSpace(query.AlbumArtistStartsWithOrGreater)) - { - Logger.Debug("Query requires post-filtering due to AlbumArtistStartsWithOrGreater"); - return true; - } - if (query.IsPlayed.HasValue) { if (query.IncludeItemTypes.Length == 1 && query.IncludeItemTypes.Contains(typeof(Series).Name)) @@ -954,7 +925,7 @@ namespace MediaBrowser.Controller.Entities return false; } - public Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query) + public QueryResult<BaseItem> GetItems(InternalItemsQuery query) { if (query.ItemIds.Length > 0) { @@ -967,20 +938,20 @@ namespace MediaBrowser.Controller.Entities // Try to preserve order result.Items = result.Items.OrderBy(i => ids.IndexOf(i.Id.ToString("N"))).ToArray(); } - return Task.FromResult(result); + return result; } return GetItemsInternal(query); } - protected virtual async Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query) + protected virtual QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query) { if (SourceType == SourceType.Channel) { try { // Don't blow up here because it could cause parent screens with other content to fail - return await ChannelManager.GetChannelItemsInternal(new ChannelItemQuery + return ChannelManager.GetChannelItemsInternal(new ChannelItemQuery { ChannelId = ChannelId, FolderId = Id.ToString("N"), @@ -990,7 +961,7 @@ namespace MediaBrowser.Controller.Entities SortBy = query.SortBy, SortOrder = query.SortOrder - }, new Progress<double>(), CancellationToken.None); + }, new Progress<double>(), CancellationToken.None).Result; } catch { @@ -1355,19 +1326,6 @@ namespace MediaBrowser.Controller.Entities } /// <summary> - /// Folders need to validate and refresh - /// </summary> - /// <returns>Task.</returns> - public override async Task ChangedExternally() - { - var progress = new Progress<double>(); - - await ValidateChildren(progress, CancellationToken.None).ConfigureAwait(false); - - await base.ChangedExternally().ConfigureAwait(false); - } - - /// <summary> /// Marks the played. /// </summary> /// <param name="user">The user.</param> @@ -1391,7 +1349,7 @@ namespace MediaBrowser.Controller.Entities query.IsVirtualItem = false; } - var itemsResult = await GetItems(query).ConfigureAwait(false); + var itemsResult = GetItems(query); // Sweep through recursively and update status var tasks = itemsResult.Items.Select(c => c.MarkPlayed(user, datePlayed, resetPosition)); @@ -1406,14 +1364,14 @@ namespace MediaBrowser.Controller.Entities /// <returns>Task.</returns> public override async Task MarkUnplayed(User user) { - var itemsResult = await GetItems(new InternalItemsQuery + var itemsResult = GetItems(new InternalItemsQuery { User = user, Recursive = true, IsFolder = false, EnableTotalRecordCount = false - }).ConfigureAwait(false); + }); // Sweep through recursively and update status var tasks = itemsResult.Items.Select(c => c.MarkUnplayed(user)); @@ -1430,7 +1388,7 @@ namespace MediaBrowser.Controller.Entities IsVirtualItem = false, EnableTotalRecordCount = false - }).Result; + }); return itemsResult.Items .All(i => i.IsPlayed(user)); @@ -1481,7 +1439,7 @@ namespace MediaBrowser.Controller.Entities } } - public override async Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> itemFields) + public override void FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> fields) { if (!SupportsUserDataFromChildren) { @@ -1490,7 +1448,7 @@ namespace MediaBrowser.Controller.Entities if (itemDto != null) { - if (itemFields.Contains(ItemFields.RecursiveItemCount)) + if (fields.Contains(ItemFields.RecursiveItemCount)) { itemDto.RecursiveItemCount = GetRecursiveChildCount(user); } @@ -1498,16 +1456,20 @@ namespace MediaBrowser.Controller.Entities if (SupportsPlayedStatus) { - var unplayedQueryResult = await GetItems(new InternalItemsQuery(user) + var unplayedQueryResult = GetItems(new InternalItemsQuery(user) { Recursive = true, IsFolder = false, IsVirtualItem = false, EnableTotalRecordCount = true, Limit = 0, - IsPlayed = false + IsPlayed = false, + DtoOptions = new DtoOptions(false) + { + EnableImages = false + } - }).ConfigureAwait(false); + }); double unplayedCount = unplayedQueryResult.TotalRecordCount; diff --git a/MediaBrowser.Controller/Entities/GameGenre.cs b/MediaBrowser.Controller/Entities/GameGenre.cs index 093b191b6b..836020d886 100644 --- a/MediaBrowser.Controller/Entities/GameGenre.cs +++ b/MediaBrowser.Controller/Entities/GameGenre.cs @@ -69,16 +69,6 @@ namespace MediaBrowser.Controller.Entities return false; } - public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems) - { - return inputItems.Where(GetItemFilter()); - } - - public Func<BaseItem, bool> GetItemFilter() - { - return i => i is Game && i.Genres.Contains(Name, StringComparer.OrdinalIgnoreCase); - } - public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query) { query.GenreIds = new[] { Id.ToString("N") }; diff --git a/MediaBrowser.Controller/Entities/Genre.cs b/MediaBrowser.Controller/Entities/Genre.cs index 6569a1e6c0..4b70eae586 100644 --- a/MediaBrowser.Controller/Entities/Genre.cs +++ b/MediaBrowser.Controller/Entities/Genre.cs @@ -81,16 +81,6 @@ namespace MediaBrowser.Controller.Entities } } - public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems) - { - return inputItems.Where(GetItemFilter()); - } - - public Func<BaseItem, bool> GetItemFilter() - { - return i => !(i is Game) && !(i is IHasMusicGenres) && i.Genres.Contains(Name, StringComparer.OrdinalIgnoreCase); - } - public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query) { query.GenreIds = new[] { Id.ToString("N") }; diff --git a/MediaBrowser.Controller/Entities/IHasImages.cs b/MediaBrowser.Controller/Entities/IHasImages.cs index 2104bee09f..e2b3c07771 100644 --- a/MediaBrowser.Controller/Entities/IHasImages.cs +++ b/MediaBrowser.Controller/Entities/IHasImages.cs @@ -3,7 +3,7 @@ using MediaBrowser.Model.Entities; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Common.IO; + using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; using MediaBrowser.Model.IO; diff --git a/MediaBrowser.Controller/Entities/IHasUserData.cs b/MediaBrowser.Controller/Entities/IHasUserData.cs index 0b3b7dc8d9..0029947ee1 100644 --- a/MediaBrowser.Controller/Entities/IHasUserData.cs +++ b/MediaBrowser.Controller/Entities/IHasUserData.cs @@ -15,7 +15,7 @@ namespace MediaBrowser.Controller.Entities /// <summary> /// Fills the user data dto values. /// </summary> - Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> fields); + void FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> fields); bool EnableRememberingTrackSelections { get; } diff --git a/MediaBrowser.Controller/Entities/IItemByName.cs b/MediaBrowser.Controller/Entities/IItemByName.cs index b69c8bdfcc..a02ca1c0c4 100644 --- a/MediaBrowser.Controller/Entities/IItemByName.cs +++ b/MediaBrowser.Controller/Entities/IItemByName.cs @@ -7,13 +7,6 @@ namespace MediaBrowser.Controller.Entities /// </summary> public interface IItemByName : IHasMetadata { - /// <summary> - /// Gets the tagged items. - /// </summary> - /// <param name="inputItems">The input items.</param> - /// <returns>IEnumerable{BaseItem}.</returns> - IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems); - IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query); } diff --git a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs index 3c948487d8..743e7642e1 100644 --- a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs +++ b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs @@ -126,9 +126,27 @@ namespace MediaBrowser.Controller.Entities public bool? IsVirtualItem { get; set; } public Guid? ParentId { get; set; } + public string ParentType { get; set; } public string[] AncestorIds { get; set; } public string[] TopParentIds { get; set; } + public BaseItem Parent + { + set + { + if (value == null) + { + ParentId = null; + ParentType = null; + } + else + { + ParentId = value.Id; + ParentType = value.GetType().Name; + } + } + } + public string[] PresetViews { get; set; } public SourceType[] SourceTypes { get; set; } public SourceType[] ExcludeSourceTypes { get; set; } @@ -136,7 +154,6 @@ namespace MediaBrowser.Controller.Entities public DayOfWeek[] AirDays { get; set; } public SeriesStatus[] SeriesStatuses { get; set; } - public string AlbumArtistStartsWithOrGreater { get; set; } public string ExternalSeriesId { get; set; } public string ExternalId { get; set; } @@ -156,41 +173,11 @@ namespace MediaBrowser.Controller.Entities public DateTime? MinDateCreated { get; set; } public DateTime? MinDateLastSaved { get; set; } + public DateTime? MinDateLastSavedForUser { get; set; } public DtoOptions DtoOptions { get; set; } public int MinSimilarityScore { get; set; } - public bool HasField(ItemFields name) - { - var fields = DtoOptions.Fields; - - switch (name) - { - case ItemFields.ThemeSongIds: - case ItemFields.ThemeVideoIds: - case ItemFields.ProductionLocations: - case ItemFields.Keywords: - case ItemFields.Taglines: - case ItemFields.CustomRating: - case ItemFields.DateCreated: - case ItemFields.SortName: - case ItemFields.Overview: - case ItemFields.HomePageUrl: - case ItemFields.VoteCount: - case ItemFields.DisplayMediaType: - //case ItemFields.ServiceName: - case ItemFields.Genres: - case ItemFields.Studios: - case ItemFields.Settings: - case ItemFields.OriginalTitle: - case ItemFields.Tags: - case ItemFields.DateLastMediaAdded: - return fields.Count == 0 || fields.Contains(name); - default: - return true; - } - } - public InternalItemsQuery() { MinSimilarityScore = 20; diff --git a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs index 3f733ce035..efa85f3ae4 100644 --- a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs +++ b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs @@ -152,7 +152,7 @@ namespace MediaBrowser.Controller.Entities.Movies var currentOfficialRating = OfficialRating; // Gather all possible ratings - var ratings = GetRecursiveChildren(i => i is Movie || i is Series || i is MusicAlbum || i is Game) + var ratings = GetLinkedChildren() .Select(i => i.OfficialRating) .Where(i => !string.IsNullOrEmpty(i)) .Distinct(StringComparer.OrdinalIgnoreCase) diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs index c2a01f4fff..8a5b726e28 100644 --- a/MediaBrowser.Controller/Entities/Movies/Movie.cs +++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Common.IO; + using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Providers; diff --git a/MediaBrowser.Controller/Entities/Person.cs b/MediaBrowser.Controller/Entities/Person.cs index 005fb20142..20d9c7999d 100644 --- a/MediaBrowser.Controller/Entities/Person.cs +++ b/MediaBrowser.Controller/Entities/Person.cs @@ -93,22 +93,6 @@ namespace MediaBrowser.Controller.Entities } } - public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems) - { - var itemsWithPerson = LibraryManager.GetItemIds(new InternalItemsQuery - { - PersonIds = new[] { Id.ToString("N") } - }); - - return inputItems.Where(i => itemsWithPerson.Contains(i.Id)); - } - - - public Func<BaseItem, bool> GetItemFilter() - { - return i => LibraryManager.GetPeople(i).Any(p => string.Equals(p.Name, Name, StringComparison.OrdinalIgnoreCase)); - } - [IgnoreDataMember] public override bool SupportsPeople { diff --git a/MediaBrowser.Controller/Entities/Studio.cs b/MediaBrowser.Controller/Entities/Studio.cs index 2e5e6ce437..8cb65c60a0 100644 --- a/MediaBrowser.Controller/Entities/Studio.cs +++ b/MediaBrowser.Controller/Entities/Studio.cs @@ -88,16 +88,6 @@ namespace MediaBrowser.Controller.Entities } } - public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems) - { - return inputItems.Where(GetItemFilter()); - } - - public Func<BaseItem, bool> GetItemFilter() - { - return i => i.Studios.Contains(Name, StringComparer.OrdinalIgnoreCase); - } - public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query) { query.StudioIds = new[] { Id.ToString("N") }; diff --git a/MediaBrowser.Controller/Entities/TV/Episode.cs b/MediaBrowser.Controller/Entities/TV/Episode.cs index c2f7a6168b..e963ab184e 100644 --- a/MediaBrowser.Controller/Entities/TV/Episode.cs +++ b/MediaBrowser.Controller/Entities/TV/Episode.cs @@ -237,7 +237,7 @@ namespace MediaBrowser.Controller.Entities.TV /// Creates the name of the sort. /// </summary> /// <returns>System.String.</returns> - protected override string CreateSortName() + protected override string CreateSortNameInternal() { return (ParentIndexNumber != null ? ParentIndexNumber.Value.ToString("000 - ") : "") + (IndexNumber != null ? IndexNumber.Value.ToString("0000 - ") : "") + Name; diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs index ed04b5ddcb..4ccf6d6232 100644 --- a/MediaBrowser.Controller/Entities/TV/Season.cs +++ b/MediaBrowser.Controller/Entities/TV/Season.cs @@ -5,6 +5,7 @@ using MediaBrowser.Model.Users; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using MediaBrowser.Controller.Dto; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Serialization; @@ -144,12 +145,12 @@ namespace MediaBrowser.Controller.Entities.TV /// Creates the name of the sort. /// </summary> /// <returns>System.String.</returns> - protected override string CreateSortName() + protected override string CreateSortNameInternal() { return IndexNumber != null ? IndexNumber.Value.ToString("0000") : Name; } - protected override Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query) + protected override QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query) { if (query.User == null) { @@ -160,41 +161,39 @@ namespace MediaBrowser.Controller.Entities.TV Func<BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager); - var items = GetEpisodes(user).Where(filter); + var items = GetEpisodes(user, query.DtoOptions).Where(filter); var result = PostFilterAndSort(items, query, false, false); - return Task.FromResult(result); + return result; } /// <summary> /// Gets the episodes. /// </summary> - /// <param name="user">The user.</param> - /// <returns>IEnumerable{Episode}.</returns> - public IEnumerable<Episode> GetEpisodes(User user) + public IEnumerable<Episode> GetEpisodes(User user, DtoOptions options) { - return GetEpisodes(Series, user); + return GetEpisodes(Series, user, options); } - public IEnumerable<Episode> GetEpisodes(Series series, User user) + public IEnumerable<Episode> GetEpisodes(Series series, User user, DtoOptions options) { - return GetEpisodes(series, user, null); + return GetEpisodes(series, user, null, options); } - public IEnumerable<Episode> GetEpisodes(Series series, User user, IEnumerable<Episode> allSeriesEpisodes) + public IEnumerable<Episode> GetEpisodes(Series series, User user, IEnumerable<Episode> allSeriesEpisodes, DtoOptions options) { - return series.GetSeasonEpisodes(this, user, allSeriesEpisodes); + return series.GetSeasonEpisodes(this, user, allSeriesEpisodes, options); } public IEnumerable<Episode> GetEpisodes() { - return Series.GetSeasonEpisodes(this, null, null); + return Series.GetSeasonEpisodes(this, null, null, new DtoOptions(true)); } public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren) { - return GetEpisodes(user); + return GetEpisodes(user, new DtoOptions(true)); } protected override bool GetBlockUnratedValue(UserPolicy config) diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs index 7641c95234..c54f93f11f 100644 --- a/MediaBrowser.Controller/Entities/TV/Series.cs +++ b/MediaBrowser.Controller/Entities/TV/Series.cs @@ -8,6 +8,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Controller.Dto; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Providers; using MediaBrowser.Model.Serialization; @@ -141,13 +142,12 @@ namespace MediaBrowser.Controller.Entities.TV public override int GetChildCount(User user) { - var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey; var seriesKey = GetUniqueSeriesKey(this); var result = LibraryManager.GetCount(new InternalItemsQuery(user) { - AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey, - SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null, + AncestorWithPresentationUniqueKey = null, + SeriesPresentationUniqueKey = seriesKey, IncludeItemTypes = new[] { typeof(Season).Name }, IsVirtualItem = false, Limit = 0, @@ -166,13 +166,12 @@ namespace MediaBrowser.Controller.Entities.TV public override int GetRecursiveChildCount(User user) { - var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey; var seriesKey = GetUniqueSeriesKey(this); var query = new InternalItemsQuery(user) { - AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey, - SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null, + AncestorWithPresentationUniqueKey = null, + SeriesPresentationUniqueKey = seriesKey, DtoOptions = new Dto.DtoOptions { Fields = new List<ItemFields> @@ -250,12 +249,15 @@ namespace MediaBrowser.Controller.Entities.TV public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren) { - return GetSeasons(user); + return GetSeasons(user, new DtoOptions(true)); } - public IEnumerable<Season> GetSeasons(User user) + public IEnumerable<Season> GetSeasons(User user, DtoOptions options) { - var query = new InternalItemsQuery(user); + var query = new InternalItemsQuery(user) + { + DtoOptions = options + }; SetSeasonQueryOptions(query, user); @@ -266,11 +268,10 @@ namespace MediaBrowser.Controller.Entities.TV { var config = user.Configuration; - var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey; var seriesKey = GetUniqueSeriesKey(this); - query.AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey; - query.SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null; + query.AncestorWithPresentationUniqueKey = null; + query.SeriesPresentationUniqueKey = seriesKey; query.IncludeItemTypes = new[] { typeof(Season).Name }; query.SortBy = new[] {ItemSortBy.SortName}; @@ -288,7 +289,7 @@ namespace MediaBrowser.Controller.Entities.TV } } - protected override Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query) + protected override QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query) { if (query.User == null) { @@ -299,11 +300,10 @@ namespace MediaBrowser.Controller.Entities.TV if (query.Recursive) { - var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey; var seriesKey = GetUniqueSeriesKey(this); - query.AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey; - query.SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null; + query.AncestorWithPresentationUniqueKey = null; + query.SeriesPresentationUniqueKey = seriesKey; if (query.SortBy.Length == 0) { query.SortBy = new[] { ItemSortBy.SortName }; @@ -313,25 +313,25 @@ namespace MediaBrowser.Controller.Entities.TV query.IncludeItemTypes = new[] { typeof(Episode).Name, typeof(Season).Name }; } query.IsVirtualItem = false; - return Task.FromResult(LibraryManager.GetItemsResult(query)); + return LibraryManager.GetItemsResult(query); } SetSeasonQueryOptions(query, user); - return Task.FromResult(LibraryManager.GetItemsResult(query)); + return LibraryManager.GetItemsResult(query); } - public IEnumerable<Episode> GetEpisodes(User user) + public IEnumerable<Episode> GetEpisodes(User user, DtoOptions options) { - var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey; var seriesKey = GetUniqueSeriesKey(this); var query = new InternalItemsQuery(user) { - AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey, - SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null, + AncestorWithPresentationUniqueKey = null, + SeriesPresentationUniqueKey = seriesKey, IncludeItemTypes = new[] { typeof(Episode).Name, typeof(Season).Name }, - SortBy = new[] { ItemSortBy.SortName } + SortBy = new[] { ItemSortBy.SortName }, + DtoOptions = options }; var config = user.Configuration; if (!config.DisplayMissingEpisodes && !config.DisplayUnairedEpisodes) @@ -352,7 +352,7 @@ namespace MediaBrowser.Controller.Entities.TV var allSeriesEpisodes = allItems.OfType<Episode>().ToList(); var allEpisodes = allItems.OfType<Season>() - .SelectMany(i => i.GetEpisodes(this, user, allSeriesEpisodes)) + .SelectMany(i => i.GetEpisodes(this, user, allSeriesEpisodes, options)) .Reverse() .ToList(); @@ -429,10 +429,8 @@ namespace MediaBrowser.Controller.Entities.TV progress.Report(100); } - public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user) + public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user, DtoOptions options) { - var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey; - var queryFromSeries = ConfigurationManager.Configuration.DisplaySpecialsWithinSeasons; // add optimization when this setting is not enabled @@ -442,10 +440,11 @@ namespace MediaBrowser.Controller.Entities.TV var query = new InternalItemsQuery(user) { - AncestorWithPresentationUniqueKey = queryFromSeries && enableSeriesPresentationKey ? null : seriesKey, - SeriesPresentationUniqueKey = queryFromSeries && enableSeriesPresentationKey ? seriesKey : null, + AncestorWithPresentationUniqueKey = queryFromSeries ? null : seriesKey, + SeriesPresentationUniqueKey = queryFromSeries ? seriesKey : null, IncludeItemTypes = new[] { typeof(Episode).Name }, - SortBy = new[] { ItemSortBy.SortName } + SortBy = new[] { ItemSortBy.SortName }, + DtoOptions = options }; if (user != null) { @@ -466,14 +465,14 @@ namespace MediaBrowser.Controller.Entities.TV var allItems = LibraryManager.GetItemList(query).OfType<Episode>(); - return GetSeasonEpisodes(parentSeason, user, allItems); + return GetSeasonEpisodes(parentSeason, user, allItems, options); } - public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user, IEnumerable<Episode> allSeriesEpisodes) + public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user, IEnumerable<Episode> allSeriesEpisodes, DtoOptions options) { if (allSeriesEpisodes == null) { - return GetSeasonEpisodes(parentSeason, user); + return GetSeasonEpisodes(parentSeason, user, options); } var episodes = FilterEpisodesBySeason(allSeriesEpisodes, parentSeason, ConfigurationManager.Configuration.DisplaySpecialsWithinSeasons); diff --git a/MediaBrowser.Controller/Entities/UserRootFolder.cs b/MediaBrowser.Controller/Entities/UserRootFolder.cs index b602990ac8..c93c814015 100644 --- a/MediaBrowser.Controller/Entities/UserRootFolder.cs +++ b/MediaBrowser.Controller/Entities/UserRootFolder.cs @@ -50,23 +50,23 @@ namespace MediaBrowser.Controller.Entities } } - protected override async Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query) + protected override QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query) { if (query.Recursive) { return QueryRecursive(query); } - var result = await UserViewManager.GetUserViews(new UserViewQuery + var result = UserViewManager.GetUserViews(new UserViewQuery { UserId = query.User.Id.ToString("N"), PresetViews = query.PresetViews - }, CancellationToken.None).ConfigureAwait(false); + }, CancellationToken.None).Result; var user = query.User; Func<BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager); - + return PostFilterAndSort(result.Where(filter), query, true, true); } diff --git a/MediaBrowser.Controller/Entities/UserView.cs b/MediaBrowser.Controller/Entities/UserView.cs index 99601b2904..27be696ebd 100644 --- a/MediaBrowser.Controller/Entities/UserView.cs +++ b/MediaBrowser.Controller/Entities/UserView.cs @@ -7,6 +7,7 @@ using System.Collections.Generic; using MediaBrowser.Model.Serialization; using System.Threading.Tasks; using System.Linq; +using MediaBrowser.Controller.Dto; namespace MediaBrowser.Controller.Entities { @@ -53,7 +54,7 @@ namespace MediaBrowser.Controller.Entities return GetChildren(user, true).Count(); } - protected override Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query) + protected override QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query) { var parent = this as Folder; @@ -67,7 +68,7 @@ namespace MediaBrowser.Controller.Entities } return new UserViewBuilder(UserViewManager, LiveTvManager, ChannelManager, LibraryManager, Logger, UserDataManager, TVSeriesManager, ConfigurationManager, PlaylistManager) - .GetUserItems(parent, this, ViewType, query); + .GetUserItems(parent, this, ViewType, query).Result; } public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren) @@ -75,9 +76,10 @@ namespace MediaBrowser.Controller.Entities var result = GetItems(new InternalItemsQuery { User = user, - EnableTotalRecordCount = false + EnableTotalRecordCount = false, + DtoOptions = new DtoOptions(true) - }).Result; + }); return result.Items; } @@ -100,9 +102,11 @@ namespace MediaBrowser.Controller.Entities Recursive = true, EnableTotalRecordCount = false, - ForceDirect = true + ForceDirect = true, + + DtoOptions = query.DtoOptions - }).Result; + }); return result.Items.Where(i => UserViewBuilder.FilterItem(i, query)); } diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index 8da069f62b..91e24caeba 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -17,6 +17,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Dto; using MediaBrowser.Model.Extensions; namespace MediaBrowser.Controller.Entities @@ -83,7 +84,7 @@ namespace MediaBrowser.Controller.Entities Limit = query.Limit, StartIndex = query.StartIndex - }, CancellationToken.None).ConfigureAwait(false); + }, new DtoOptions(), CancellationToken.None).ConfigureAwait(false); return GetResult(result); } @@ -110,7 +111,7 @@ namespace MediaBrowser.Controller.Entities Limit = query.Limit, StartIndex = query.StartIndex - }, CancellationToken.None).ConfigureAwait(false); + }, new DtoOptions(), CancellationToken.None).ConfigureAwait(false); return GetResult(result); } @@ -129,7 +130,7 @@ namespace MediaBrowser.Controller.Entities if (query.Recursive) { query.Recursive = true; - query.ParentId = queryParent.Id; + query.Parent = queryParent; query.SetUser(user); return _libraryManager.GetItemsResult(query); @@ -141,7 +142,7 @@ namespace MediaBrowser.Controller.Entities return GetResult(user.RootFolder.GetChildren(user, true), queryParent, query); case CollectionType.Playlists: - return await GetPlaylistsView(queryParent, user, query).ConfigureAwait(false); + return GetPlaylistsView(queryParent, user, query); case CollectionType.BoxSets: return GetBoxsetView(queryParent, user, query); @@ -180,7 +181,7 @@ namespace MediaBrowser.Controller.Entities return await GetMovieGenres(queryParent, user, query).ConfigureAwait(false); case SpecialFolder.MovieGenre: - return await GetMovieGenreItems(queryParent, displayParent, user, query).ConfigureAwait(false); + return GetMovieGenreItems(queryParent, displayParent, user, query); case SpecialFolder.MovieResume: return GetMovieResume(queryParent, user, query); @@ -354,7 +355,7 @@ namespace MediaBrowser.Controller.Entities private QueryResult<BaseItem> GetMusicPlaylists(Folder parent, User user, InternalItemsQuery query) { - query.ParentId = null; + query.Parent = null; query.IncludeItemTypes = new[] { typeof(Playlist).Name }; query.SetUser(user); query.Recursive = true; @@ -365,7 +366,7 @@ namespace MediaBrowser.Controller.Entities private QueryResult<BaseItem> GetMusicAlbums(Folder parent, User user, InternalItemsQuery query) { query.Recursive = true; - query.ParentId = parent.Id; + query.Parent = parent; query.SetUser(user); query.IncludeItemTypes = new[] { typeof(MusicAlbum).Name }; @@ -376,7 +377,7 @@ namespace MediaBrowser.Controller.Entities private QueryResult<BaseItem> GetMusicSongs(Folder parent, User user, InternalItemsQuery query) { query.Recursive = true; - query.ParentId = parent.Id; + query.Parent = parent; query.SetUser(user); query.IncludeItemTypes = new[] { typeof(Audio.Audio).Name }; @@ -394,7 +395,7 @@ namespace MediaBrowser.Controller.Entities ParentId = parent == null ? null : parent.Id.ToString("N"), GroupItems = true - }).Select(i => i.Item1 ?? i.Item2.FirstOrDefault()).Where(i => i != null); + }, query.DtoOptions).Select(i => i.Item1 ?? i.Item2.FirstOrDefault()).Where(i => i != null); query.SortBy = new string[] { }; @@ -404,7 +405,7 @@ namespace MediaBrowser.Controller.Entities private QueryResult<BaseItem> GetFavoriteSongs(Folder parent, User user, InternalItemsQuery query) { query.Recursive = true; - query.ParentId = parent.Id; + query.Parent = parent; query.SetUser(user); query.IsFavorite = true; query.IncludeItemTypes = new[] { typeof(Audio.Audio).Name }; @@ -415,7 +416,7 @@ namespace MediaBrowser.Controller.Entities private QueryResult<BaseItem> GetFavoriteAlbums(Folder parent, User user, InternalItemsQuery query) { query.Recursive = true; - query.ParentId = parent.Id; + query.Parent = parent; query.SetUser(user); query.IsFavorite = true; query.IncludeItemTypes = new[] { typeof(MusicAlbum).Name }; @@ -423,13 +424,6 @@ namespace MediaBrowser.Controller.Entities return _libraryManager.GetItemsResult(query); } - private async Task<QueryResult<BaseItem>> FindPlaylists(Folder parent, User user, InternalItemsQuery query) - { - var list = _playlistManager.GetPlaylists(user.Id.ToString("N")); - - return GetResult(list, parent, query); - } - private int GetSpecialItemsLimit() { return 50; @@ -465,7 +459,7 @@ namespace MediaBrowser.Controller.Entities private QueryResult<BaseItem> GetFavoriteMovies(Folder parent, User user, InternalItemsQuery query) { query.Recursive = true; - query.ParentId = parent.Id; + query.Parent = parent; query.SetUser(user); query.IsFavorite = true; query.IncludeItemTypes = new[] { typeof(Movie).Name }; @@ -476,7 +470,7 @@ namespace MediaBrowser.Controller.Entities private QueryResult<BaseItem> GetFavoriteSeries(Folder parent, User user, InternalItemsQuery query) { query.Recursive = true; - query.ParentId = parent.Id; + query.Parent = parent; query.SetUser(user); query.IsFavorite = true; query.IncludeItemTypes = new[] { typeof(Series).Name }; @@ -487,7 +481,7 @@ namespace MediaBrowser.Controller.Entities private QueryResult<BaseItem> GetFavoriteEpisodes(Folder parent, User user, InternalItemsQuery query) { query.Recursive = true; - query.ParentId = parent.Id; + query.Parent = parent; query.SetUser(user); query.IsFavorite = true; query.IncludeItemTypes = new[] { typeof(Episode).Name }; @@ -498,7 +492,7 @@ namespace MediaBrowser.Controller.Entities private QueryResult<BaseItem> GetMovieMovies(Folder parent, User user, InternalItemsQuery query) { query.Recursive = true; - query.ParentId = parent.Id; + query.Parent = parent; query.SetUser(user); query.IncludeItemTypes = new[] { typeof(Movie).Name }; @@ -517,7 +511,7 @@ namespace MediaBrowser.Controller.Entities query.SortOrder = SortOrder.Descending; query.Recursive = true; - query.ParentId = parent.Id; + query.Parent = parent; query.SetUser(user); query.Limit = GetSpecialItemsLimit(); query.IncludeItemTypes = new[] { typeof(Movie).Name }; @@ -531,7 +525,7 @@ namespace MediaBrowser.Controller.Entities query.SortOrder = SortOrder.Descending; query.IsResumable = true; query.Recursive = true; - query.ParentId = parent.Id; + query.Parent = parent; query.SetUser(user); query.Limit = GetSpecialItemsLimit(); query.IncludeItemTypes = new[] { typeof(Movie).Name }; @@ -582,10 +576,10 @@ namespace MediaBrowser.Controller.Entities return GetResult(genres, parent, query); } - private async Task<QueryResult<BaseItem>> GetMovieGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query) + private QueryResult<BaseItem> GetMovieGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query) { query.Recursive = true; - query.ParentId = queryParent.Id; + query.Parent = queryParent; query.GenreIds = new[] { displayParent.Id.ToString("N") }; query.SetUser(user); @@ -594,14 +588,14 @@ namespace MediaBrowser.Controller.Entities return _libraryManager.GetItemsResult(query); } - private async Task<QueryResult<BaseItem>> GetPlaylistsView(Folder parent, User user, InternalItemsQuery query) + private QueryResult<BaseItem> GetPlaylistsView(Folder parent, User user, InternalItemsQuery query) { return GetResult(_playlistManager.GetPlaylists(user.Id.ToString("N")), parent, query); } private QueryResult<BaseItem> GetBoxsetView(Folder parent, User user, InternalItemsQuery query) { - query.ParentId = null; + query.Parent = null; query.IncludeItemTypes = new[] { typeof(BoxSet).Name }; query.SetUser(user); query.Recursive = true; @@ -643,7 +637,7 @@ namespace MediaBrowser.Controller.Entities query.SortOrder = SortOrder.Descending; query.Recursive = true; - query.ParentId = parent.Id; + query.Parent = parent; query.SetUser(user); query.Limit = GetSpecialItemsLimit(); query.IncludeItemTypes = new[] { typeof(Episode).Name }; @@ -662,7 +656,7 @@ namespace MediaBrowser.Controller.Entities StartIndex = query.StartIndex, UserId = query.User.Id.ToString("N") - }, parentFolders); + }, parentFolders, query.DtoOptions); return result; } @@ -673,7 +667,7 @@ namespace MediaBrowser.Controller.Entities query.SortOrder = SortOrder.Descending; query.IsResumable = true; query.Recursive = true; - query.ParentId = parent.Id; + query.Parent = parent; query.SetUser(user); query.Limit = GetSpecialItemsLimit(); query.IncludeItemTypes = new[] { typeof(Episode).Name }; @@ -684,7 +678,7 @@ namespace MediaBrowser.Controller.Entities private QueryResult<BaseItem> GetTvSeries(Folder parent, User user, InternalItemsQuery query) { query.Recursive = true; - query.ParentId = parent.Id; + query.Parent = parent; query.SetUser(user); query.IncludeItemTypes = new[] { typeof(Series).Name }; @@ -728,7 +722,7 @@ namespace MediaBrowser.Controller.Entities private QueryResult<BaseItem> GetTvGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query) { query.Recursive = true; - query.ParentId = queryParent.Id; + query.Parent = queryParent; query.GenreIds = new[] { displayParent.Id.ToString("N") }; query.SetUser(user); @@ -1713,17 +1707,6 @@ namespace MediaBrowser.Controller.Entities } } - if (!string.IsNullOrEmpty(query.AlbumArtistStartsWithOrGreater)) - { - var ok = new[] { item }.OfType<IHasAlbumArtist>() - .Any(p => string.Compare(query.AlbumArtistStartsWithOrGreater, p.AlbumArtists.FirstOrDefault(), StringComparison.CurrentCultureIgnoreCase) < 1); - - if (!ok) - { - return false; - } - } - return true; } @@ -1783,7 +1766,7 @@ namespace MediaBrowser.Controller.Entities Status = RecordingStatus.Completed, UserId = user.Id.ToString("N") - }, CancellationToken.None).ConfigureAwait(false); + }, new DtoOptions(), CancellationToken.None).ConfigureAwait(false); } var list = new List<BaseItem>(); diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index 90aa3690a9..fb31d9a474 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -11,7 +11,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.IO; + using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; @@ -282,12 +282,10 @@ namespace MediaBrowser.Controller.Entities public IEnumerable<Video> GetLinkedAlternateVersions() { - var linkedVersions = LinkedAlternateVersions + return LinkedAlternateVersions .Select(GetLinkedChild) .Where(i => i != null) - .OfType<Video>(); - - return linkedVersions + .OfType<Video>() .OrderBy(i => i.SortName); } @@ -554,7 +552,7 @@ namespace MediaBrowser.Controller.Entities if (SourceType == SourceType.Channel) { var sources = ChannelManager.GetStaticMediaSources(this, CancellationToken.None) - .Result.ToList(); + .ToList(); if (sources.Count > 0) { @@ -630,21 +628,24 @@ namespace MediaBrowser.Controller.Entities { info.Path = media.ShortcutPath; - if (info.Path.StartsWith("Http", StringComparison.OrdinalIgnoreCase)) - { - info.Protocol = MediaProtocol.Http; - } - else if (info.Path.StartsWith("Rtmp", StringComparison.OrdinalIgnoreCase)) - { - info.Protocol = MediaProtocol.Rtmp; - } - else if (info.Path.StartsWith("Rtsp", StringComparison.OrdinalIgnoreCase)) - { - info.Protocol = MediaProtocol.Rtsp; - } - else + if (!string.IsNullOrWhiteSpace(info.Path)) { - info.Protocol = MediaProtocol.File; + if (info.Path.StartsWith("Http", StringComparison.OrdinalIgnoreCase)) + { + info.Protocol = MediaProtocol.Http; + } + else if (info.Path.StartsWith("Rtmp", StringComparison.OrdinalIgnoreCase)) + { + info.Protocol = MediaProtocol.Rtmp; + } + else if (info.Path.StartsWith("Rtsp", StringComparison.OrdinalIgnoreCase)) + { + info.Protocol = MediaProtocol.Rtsp; + } + else + { + info.Protocol = MediaProtocol.File; + } } } diff --git a/MediaBrowser.Controller/Entities/Year.cs b/MediaBrowser.Controller/Entities/Year.cs index b352950a09..61b1a3b1ae 100644 --- a/MediaBrowser.Controller/Entities/Year.cs +++ b/MediaBrowser.Controller/Entities/Year.cs @@ -65,20 +65,6 @@ namespace MediaBrowser.Controller.Entities return true; } - public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems) - { - int year; - - var usCulture = new CultureInfo("en-US"); - - if (!int.TryParse(Name, NumberStyles.Integer, usCulture, out year)) - { - return inputItems; - } - - return inputItems.Where(i => i.ProductionYear.HasValue && i.ProductionYear.Value == year); - } - public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query) { int year; @@ -107,12 +93,6 @@ namespace MediaBrowser.Controller.Entities return null; } - public Func<BaseItem, bool> GetItemFilter() - { - var val = GetYearValue(); - return i => i.ProductionYear.HasValue && val.HasValue && i.ProductionYear.Value == val.Value; - } - [IgnoreDataMember] public override bool SupportsPeople { |
