aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Entities/Folder.cs
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2017-09-20 13:22:39 -0400
committerGitHub <noreply@github.com>2017-09-20 13:22:39 -0400
commiteb2a1330045d802bfe0366df7105c220a36f111f (patch)
tree2c1638c424ee9c0837c5de6d6e08a2398da69cdb /MediaBrowser.Controller/Entities/Folder.cs
parentec426d5c92875639ceac64477ce10fab3e639335 (diff)
parenta015e1208885bc6a8788db683c4fe47e93dc26b7 (diff)
Merge pull request #2897 from MediaBrowser/beta
Beta
Diffstat (limited to 'MediaBrowser.Controller/Entities/Folder.cs')
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs110
1 files changed, 70 insertions, 40 deletions
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 8a87f3c6a..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)
{
@@ -952,7 +964,7 @@ namespace MediaBrowser.Controller.Entities
{
var result = LibraryManager.GetItemsResult(query);
- if (query.SortBy.Length == 0)
+ if (query.OrderBy.Length == 0)
{
var ids = query.ItemIds.ToList();
@@ -973,7 +985,7 @@ namespace MediaBrowser.Controller.Entities
{
var result = LibraryManager.GetItemList(query);
- if (query.SortBy.Length == 0)
+ if (query.OrderBy.Length == 0)
{
var ids = query.ItemIds.ToList();
@@ -1000,8 +1012,7 @@ namespace MediaBrowser.Controller.Entities
Limit = query.Limit,
StartIndex = query.StartIndex,
UserId = query.User.Id.ToString("N"),
- SortBy = query.SortBy,
- SortOrder = query.SortOrder
+ OrderBy = query.OrderBy
}, new SimpleProgress<double>(), CancellationToken.None).Result;
}
@@ -1197,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
@@ -1212,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();
@@ -1232,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>