12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- using System.Runtime.Serialization;
- using MediaBrowser.Controller.Providers;
- using MediaBrowser.Model.Dto;
- using MediaBrowser.Model.Library;
- using MediaBrowser.Model.Querying;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading;
- using System.Threading.Tasks;
- using MediaBrowser.Controller.Library;
- namespace MediaBrowser.Controller.Entities
- {
- /// <summary>
- /// Special class used for User Roots. Children contain actual ones defined for this user
- /// PLUS the virtual folders from the physical root (added by plug-ins).
- /// </summary>
- public class UserRootFolder : Folder
- {
- protected override async Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query)
- {
- if (query.Recursive)
- {
- return QueryRecursive(query);
- }
- var result = await UserViewManager.GetUserViews(new UserViewQuery
- {
- UserId = query.User.Id.ToString("N"),
- PresetViews = query.PresetViews
- }, CancellationToken.None).ConfigureAwait(false);
- var user = query.User;
- Func<BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager);
-
- return PostFilterAndSort(result.Where(filter), query);
- }
- [IgnoreDataMember]
- protected override bool SupportsShortcutChildren
- {
- get
- {
- return true;
- }
- }
- [IgnoreDataMember]
- public override bool IsPreSorted
- {
- get
- {
- return true;
- }
- }
- protected override IEnumerable<BaseItem> GetEligibleChildrenForRecursiveChildren(User user)
- {
- var list = base.GetEligibleChildrenForRecursiveChildren(user).ToList();
- list.AddRange(LibraryManager.RootFolder.VirtualChildren);
- return list;
- }
- public override bool BeforeMetadataRefresh()
- {
- var hasChanges = base.BeforeMetadataRefresh();
- if (string.Equals("default", Name, StringComparison.OrdinalIgnoreCase))
- {
- Name = "Media Folders";
- hasChanges = true;
- }
- return hasChanges;
- }
- protected override async Task ValidateChildrenInternal(IProgress<double> progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService)
- {
- await base.ValidateChildrenInternal(progress, cancellationToken, recursive, refreshChildMetadata, refreshOptions, directoryService)
- .ConfigureAwait(false);
- // Not the best way to handle this, but it solves an issue
- // CollectionFolders aren't always getting saved after changes
- // This means that grabbing the item by Id may end up returning the old one
- // Fix is in two places - make sure the folder gets saved
- // And here to remedy it for affected users.
- // In theory this can be removed eventually.
- foreach (var item in Children)
- {
- LibraryManager.RegisterItem(item);
- }
- }
- }
- }
|