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.cs103
1 files changed, 67 insertions, 36 deletions
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 2e741a8c4..6d88f7015 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -378,6 +378,7 @@ namespace MediaBrowser.Controller.Entities
cancellationToken.ThrowIfCancellationRequested();
var validChildren = new List<BaseItem>();
+ var validChildrenNeedGeneration = false;
var allLibraryPaths = LibraryManager
.GetVirtualFolders()
@@ -474,11 +475,7 @@ namespace MediaBrowser.Controller.Entities
}
else
{
- if (recursive || refreshChildMetadata)
- {
- // used below
- validChildren = Children.ToList();
- }
+ validChildrenNeedGeneration = true;
}
progress.Report(10);
@@ -502,6 +499,12 @@ namespace MediaBrowser.Controller.Entities
ProviderManager.OnRefreshProgress(folder, newPct);
});
+ if (validChildrenNeedGeneration)
+ {
+ validChildren = Children.ToList();
+ validChildrenNeedGeneration = false;
+ }
+
await ValidateSubFolders(validChildren.OfType<Folder>().ToList(), directoryService, innerProgress, cancellationToken).ConfigureAwait(false);
}
}
@@ -536,6 +539,12 @@ namespace MediaBrowser.Controller.Entities
}
else
{
+ if (validChildrenNeedGeneration)
+ {
+ validChildren = Children.ToList();
+ validChildrenNeedGeneration = false;
+ }
+
await RefreshMetadataRecursive(validChildren, refreshOptions, recursive, innerProgress, cancellationToken);
}
}
@@ -565,7 +574,7 @@ namespace MediaBrowser.Controller.Entities
});
await RefreshChildMetadata(child, refreshOptions, recursive && child.IsFolder, innerProgress, cancellationToken)
- .ConfigureAwait(false);
+ .ConfigureAwait(false);
}
numComplete++;
@@ -588,7 +597,10 @@ namespace MediaBrowser.Controller.Entities
}
else
{
- await child.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
+ if (refreshOptions.RefreshItem(child))
+ {
+ await child.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
+ }
if (recursive)
{
@@ -1196,11 +1208,21 @@ namespace MediaBrowser.Controller.Entities
/// Gets the linked children.
/// </summary>
/// <returns>IEnumerable{BaseItem}.</returns>
- public IEnumerable<BaseItem> GetLinkedChildren()
+ public List<BaseItem> GetLinkedChildren()
{
- return LinkedChildren
- .Select(GetLinkedChild)
- .Where(i => i != null);
+ var linkedChildren = LinkedChildren;
+ var list = new List<BaseItem>(linkedChildren.Length);
+
+ foreach (var i in linkedChildren)
+ {
+ var child = GetLinkedChild(i);
+
+ if (child != null)
+ {
+ list.Add(child);
+ }
+ }
+ return list;
}
protected virtual bool FilterLinkedChildrenPerUser
@@ -1211,16 +1233,19 @@ namespace MediaBrowser.Controller.Entities
}
}
- public IEnumerable<BaseItem> GetLinkedChildren(User user)
+ public List<BaseItem> GetLinkedChildren(User user)
{
if (!FilterLinkedChildrenPerUser || user == null)
{
return GetLinkedChildren();
}
- if (LinkedChildren.Length == 0)
+ var linkedChildren = LinkedChildren;
+ var list = new List<BaseItem>(linkedChildren.Length);
+
+ if (linkedChildren.Length == 0)
{
- return new List<BaseItem>();
+ return list;
}
var allUserRootChildren = user.RootFolder.Children.OfType<Folder>().ToList();
@@ -1231,37 +1256,43 @@ namespace MediaBrowser.Controller.Entities
.Select(i => i.Id)
.ToList();
- return LinkedChildren
- .Select(i =>
+ foreach (var i in linkedChildren)
+ {
+ var child = GetLinkedChild(i);
+
+ if (child == null)
{
- var child = GetLinkedChild(i);
+ continue;
+ }
+
+ var childOwner = child.IsOwnedItem ? (child.GetOwner() ?? child) : child;
- if (child != null)
+ if (childOwner != null)
+ {
+ var childLocationType = childOwner.LocationType;
+ if (childLocationType == LocationType.Remote || childLocationType == LocationType.Virtual)
{
- var childLocationType = child.LocationType;
- if (childLocationType == LocationType.Remote || childLocationType == LocationType.Virtual)
+ if (!childOwner.IsVisibleStandalone(user))
{
- if (!child.IsVisibleStandalone(user))
- {
- return null;
- }
+ continue;
}
- else if (childLocationType == LocationType.FileSystem)
- {
- var itemCollectionFolderIds =
- LibraryManager.GetCollectionFolders(child, allUserRootChildren)
- .Select(f => f.Id).ToList();
+ }
+ else if (childLocationType == LocationType.FileSystem)
+ {
+ var itemCollectionFolderIds =
+ LibraryManager.GetCollectionFolders(childOwner, allUserRootChildren).Select(f => f.Id);
- if (!itemCollectionFolderIds.Any(collectionFolderIds.Contains))
- {
- return null;
- }
+ if (!itemCollectionFolderIds.Any(collectionFolderIds.Contains))
+ {
+ continue;
}
}
+ }
+
+ list.Add(child);
+ }
- return child;
- })
- .Where(i => i != null);
+ return list;
}
/// <summary>