jellyfin/MediaBrowser.Controller/Entities/UserRootFolder.cs

103 lines
3.4 KiB
C#
Raw Normal View History

2015-08-15 01:44:30 +00:00
using System.Runtime.Serialization;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Library;
using MediaBrowser.Model.Querying;
2014-03-06 05:17:13 +00:00
using System;
2014-02-10 20:11:46 +00:00
using System.Collections.Generic;
using System.Linq;
2014-06-04 03:34:36 +00:00
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Controller.Library;
2013-02-21 01:33:05 +00:00
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)
{
2014-10-06 23:58:46 +00:00
if (query.Recursive)
{
2016-03-20 06:46:51 +00:00
return QueryRecursive(query);
2014-10-06 23:58:46 +00:00
}
var result = await UserViewManager.GetUserViews(new UserViewQuery
{
2016-03-01 18:42:39 +00:00
UserId = query.User.Id.ToString("N"),
PresetViews = query.PresetViews
}, CancellationToken.None).ConfigureAwait(false);
2016-03-20 06:46:51 +00:00
var user = query.User;
Func<BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager);
2015-01-25 06:34:50 +00:00
return PostFilterAndSort(result.Where(filter), query);
}
2016-06-16 13:24:12 +00:00
public override int GetChildCount(User user)
{
return GetChildren(user, true).Count();
}
2015-08-15 01:44:30 +00:00
[IgnoreDataMember]
protected override bool SupportsShortcutChildren
{
get
{
return true;
}
}
[IgnoreDataMember]
2014-09-06 23:06:14 +00:00
public override bool IsPreSorted
{
get
{
return true;
}
}
2015-10-30 16:40:47 +00:00
protected override IEnumerable<BaseItem> GetEligibleChildrenForRecursiveChildren(User user)
{
2015-11-03 04:34:47 +00:00
var list = base.GetEligibleChildrenForRecursiveChildren(user).ToList();
list.AddRange(LibraryManager.RootFolder.VirtualChildren);
return list;
2015-10-30 16:40:47 +00:00
}
2014-02-13 05:11:54 +00:00
public override bool BeforeMetadataRefresh()
2014-02-10 20:11:46 +00:00
{
2014-02-13 05:11:54 +00:00
var hasChanges = base.BeforeMetadataRefresh();
2014-02-10 20:11:46 +00:00
2014-03-06 05:17:13 +00:00
if (string.Equals("default", Name, StringComparison.OrdinalIgnoreCase))
2014-02-10 20:11:46 +00:00
{
2014-02-21 05:04:11 +00:00
Name = "Media Folders";
2014-02-13 05:11:54 +00:00
hasChanges = true;
2014-02-10 20:11:46 +00:00
}
2014-02-13 05:11:54 +00:00
return hasChanges;
2014-02-10 20:11:46 +00:00
}
2014-06-04 03:34:36 +00:00
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);
}
}
2013-02-21 01:33:05 +00:00
}
}