aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Entities/Folder.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller/Entities/Folder.cs')
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs149
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)