diff options
Diffstat (limited to 'MediaBrowser.Controller/Entities/Folder.cs')
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 149 |
1 files changed, 82 insertions, 67 deletions
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 3907217be..2761aa5d7 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Progress; +using MediaBrowser.Common.Progress; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Localization; @@ -59,6 +58,20 @@ namespace MediaBrowser.Controller.Entities } } + [IgnoreDataMember] + public override string FileNameWithoutExtension + { + get + { + if (LocationType == LocationType.FileSystem) + { + return System.IO.Path.GetFileName(Path); + } + + return null; + } + } + /// <summary> /// Gets or sets a value indicating whether this instance is physical root. /// </summary> @@ -103,7 +116,7 @@ namespace MediaBrowser.Controller.Entities if (item.Id == Guid.Empty) { - item.Id = item.Path.GetMBId(item.GetType()); + item.Id = LibraryManager.GetNewItemId(item.Path, item.GetType()); } if (ActualChildren.Any(i => i.Id == item.Id)) @@ -164,14 +177,12 @@ namespace MediaBrowser.Controller.Entities } } - /// <summary> - /// Never want folders to be blocked by "BlockNotRated" - /// </summary> [IgnoreDataMember] public override string OfficialRatingForComparison { get { + // Never want folders to be blocked by "BlockNotRated" if (this is Series) { return base.OfficialRatingForComparison; @@ -292,10 +303,10 @@ namespace MediaBrowser.Controller.Entities { if (this is ICollectionFolder) { - if (user.Configuration.BlockedMediaFolders.Contains(Id.ToString("N"), StringComparer.OrdinalIgnoreCase) || + if (user.Policy.BlockedMediaFolders.Contains(Id.ToString("N"), StringComparer.OrdinalIgnoreCase) || // Backwards compatibility - user.Configuration.BlockedMediaFolders.Contains(Name, StringComparer.OrdinalIgnoreCase)) + user.Policy.BlockedMediaFolders.Contains(Name, StringComparer.OrdinalIgnoreCase)) { return false; } @@ -321,7 +332,7 @@ namespace MediaBrowser.Controller.Entities public Task ValidateChildren(IProgress<double> progress, CancellationToken cancellationToken) { - return ValidateChildren(progress, cancellationToken, new MetadataRefreshOptions()); + return ValidateChildren(progress, cancellationToken, new MetadataRefreshOptions(new DirectoryService())); } /// <summary> @@ -334,8 +345,6 @@ namespace MediaBrowser.Controller.Entities /// <returns>Task.</returns> public Task ValidateChildren(IProgress<double> progress, CancellationToken cancellationToken, MetadataRefreshOptions metadataRefreshOptions, bool recursive = true) { - metadataRefreshOptions.DirectoryService = metadataRefreshOptions.DirectoryService ?? new DirectoryService(Logger); - return ValidateChildrenWithCancellationSupport(progress, cancellationToken, recursive, true, metadataRefreshOptions, metadataRefreshOptions.DirectoryService); } @@ -368,47 +377,7 @@ namespace MediaBrowser.Controller.Entities private bool IsValidFromResolver(BaseItem current, BaseItem newItem) { - var currentAsVideo = current as Video; - - if (currentAsVideo != null) - { - var newAsVideo = newItem as Video; - - if (newAsVideo != null) - { - if (currentAsVideo.IsPlaceHolder != newAsVideo.IsPlaceHolder) - { - return false; - } - if (currentAsVideo.IsMultiPart != newAsVideo.IsMultiPart) - { - return false; - } - if (currentAsVideo.HasLocalAlternateVersions != newAsVideo.HasLocalAlternateVersions) - { - return false; - } - } - } - else - { - var currentAsPlaceHolder = current as ISupportsPlaceHolders; - - if (currentAsPlaceHolder != null) - { - var newHasPlaceHolder = newItem as ISupportsPlaceHolders; - - if (newHasPlaceHolder != null) - { - if (currentAsPlaceHolder.IsPlaceHolder != newHasPlaceHolder.IsPlaceHolder) - { - return false; - } - } - } - } - - return current.IsInMixedFolder == newItem.IsInMixedFolder; + return current.IsValidFromResolver(newItem); } /// <summary> @@ -476,6 +445,7 @@ namespace MediaBrowser.Controller.Entities } else { + newItems.Add(child); validChildren.Add(child); } } @@ -575,7 +545,7 @@ namespace MediaBrowser.Controller.Entities foreach (var child in children) { - if (tasks.Count >= 3) + if (tasks.Count >= 2) { await Task.WhenAll(tasks).ConfigureAwait(false); tasks.Clear(); @@ -738,7 +708,9 @@ namespace MediaBrowser.Controller.Entities /// <returns>IEnumerable{BaseItem}.</returns> protected virtual IEnumerable<BaseItem> GetNonCachedChildren(IDirectoryService directoryService) { - return LibraryManager.ResolvePaths<BaseItem>(GetFileSystemChildren(directoryService), directoryService, this); + var collectionType = LibraryManager.GetContentType(this); + + return LibraryManager.ResolvePaths(GetFileSystemChildren(directoryService), directoryService, this, collectionType); } /// <summary> @@ -747,7 +719,16 @@ namespace MediaBrowser.Controller.Entities /// <returns>IEnumerable{BaseItem}.</returns> protected IEnumerable<BaseItem> GetCachedChildren() { - return ItemRepository.GetChildren(Id).Select(RetrieveChild).Where(i => i != null); + var childrenItems = ItemRepository.GetChildrenItems(Id).Select(RetrieveChild).Where(i => i != null); + + //var children = ItemRepository.GetChildren(Id).Select(RetrieveChild).Where(i => i != null).ToList(); + + //if (children.Count != childrenItems.Count) + //{ + // var b = this; + //} + + return childrenItems; } /// <summary> @@ -772,7 +753,36 @@ namespace MediaBrowser.Controller.Entities return item; } - public virtual Task<QueryResult<BaseItem>> GetUserItems(UserItemsQuery query) + private BaseItem RetrieveChild(BaseItem child) + { + if (child.Id == Guid.Empty) + { + Logger.Error("Item found with empty Id: " + (child.Path ?? child.Name)); + return null; + } + + var item = LibraryManager.GetMemoryItemById(child.Id); + + if (item != null) + { + if (item is IByReferenceItem) + { + return LibraryManager.GetOrAddByReferenceItem(item); + } + + item.Parent = this; + } + else + { + child.Parent = this; + LibraryManager.RegisterItem(child); + item = child; + } + + return item; + } + + public virtual Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query) { var user = query.User; @@ -785,9 +795,9 @@ namespace MediaBrowser.Controller.Entities return Task.FromResult(result); } - protected QueryResult<BaseItem> SortAndFilter(IEnumerable<BaseItem> items, UserItemsQuery query) + protected QueryResult<BaseItem> SortAndFilter(IEnumerable<BaseItem> items, InternalItemsQuery query) { - return UserViewBuilder.SortAndFilter(items, null, query, LibraryManager, UserDataManager); + return UserViewBuilder.SortAndFilter(items, this, null, query, LibraryManager, UserDataManager); } /// <summary> @@ -1109,12 +1119,16 @@ namespace MediaBrowser.Controller.Entities /// </summary> /// <param name="user">The user.</param> /// <param name="datePlayed">The date played.</param> - /// <param name="userManager">The user manager.</param> + /// <param name="resetPosition">if set to <c>true</c> [reset position].</param> /// <returns>Task.</returns> - public override async Task MarkPlayed(User user, DateTime? datePlayed, IUserDataManager userManager) + public override async Task MarkPlayed(User user, + DateTime? datePlayed, + bool resetPosition) { // Sweep through recursively and update status - var tasks = GetRecursiveChildren(user, true).Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual).Select(c => c.MarkPlayed(user, datePlayed, userManager)); + var tasks = GetRecursiveChildren(user, true) + .Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual) + .Select(c => c.MarkPlayed(user, datePlayed, resetPosition)); await Task.WhenAll(tasks).ConfigureAwait(false); } @@ -1123,12 +1137,13 @@ namespace MediaBrowser.Controller.Entities /// Marks the unplayed. /// </summary> /// <param name="user">The user.</param> - /// <param name="userManager">The user manager.</param> /// <returns>Task.</returns> - public override async Task MarkUnplayed(User user, IUserDataManager userManager) + public override async Task MarkUnplayed(User user) { // Sweep through recursively and update status - var tasks = GetRecursiveChildren(user, true).Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual).Select(c => c.MarkUnplayed(user, userManager)); + var tasks = GetRecursiveChildren(user, true) + .Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual) + .Select(c => c.MarkUnplayed(user)); await Task.WhenAll(tasks).ConfigureAwait(false); } @@ -1163,14 +1178,14 @@ namespace MediaBrowser.Controller.Entities public override bool IsPlayed(User user) { - return GetRecursiveChildren(user).Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual) + return GetRecursiveChildren(user) + .Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual) .All(i => i.IsPlayed(user)); } public override bool IsUnplayed(User user) { - return GetRecursiveChildren(user).Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual) - .All(i => i.IsUnplayed(user)); + return !IsPlayed(user); } public override void FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, User user) |
