aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs32
1 files changed, 17 insertions, 15 deletions
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 48d7cbd89..2eff4569f 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -1,4 +1,5 @@
using MediaBrowser.Common.Extensions;
+using MediaBrowser.Common.Progress;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Localization;
@@ -713,7 +714,7 @@ namespace MediaBrowser.Controller.Entities
LibraryManager.ReportLibraryChanged(changedArgs);
}
- progress.Report(15);
+ progress.Report(10);
cancellationToken.ThrowIfCancellationRequested();
@@ -732,10 +733,10 @@ namespace MediaBrowser.Controller.Entities
/// <returns>Task.</returns>
private Task RefreshChildren(IEnumerable<Tuple<BaseItem, bool>> children, IProgress<double> progress, CancellationToken cancellationToken, bool? recursive)
{
- var numComplete = 0;
-
var list = children.ToList();
+ var percentages = new ConcurrentDictionary<Guid, double>(list.Select(i => new KeyValuePair<Guid, double>(i.Item1.Id, 0)));
+
var tasks = list.Select(tuple => Task.Run(async () =>
{
cancellationToken.ThrowIfCancellationRequested();
@@ -745,10 +746,6 @@ namespace MediaBrowser.Controller.Entities
//refresh it
await child.RefreshMetadata(cancellationToken, resetResolveArgs: child.IsFolder).ConfigureAwait(false);
- //and add it to our valid children
- //fire an added event...?
- //if it is a folder we need to validate its children as well
-
// Refresh children if a folder and the item changed or recursive is set to true
var refreshChildren = child.IsFolder && (tuple.Item2 || (recursive.HasValue && recursive.Value));
@@ -765,17 +762,22 @@ namespace MediaBrowser.Controller.Entities
{
cancellationToken.ThrowIfCancellationRequested();
- await ((Folder)child).ValidateChildren(new Progress<double> { }, cancellationToken, recursive: recursive).ConfigureAwait(false);
- }
+ var innerProgress = new ActionableProgress<double>();
- lock (progress)
- {
- numComplete++;
+ innerProgress.RegisterAction(p =>
+ {
+ lock (progress)
+ {
+ percentages.TryUpdate(child.Id, p / 100, percentages[child.Id]);
- double percent = numComplete;
- percent /= list.Count;
+ var percent = percentages.Values.Sum();
+ percent /= list.Count;
+
+ progress.Report((90 * percent) + 10);
+ }
+ });
- progress.Report((85 * percent) + 15);
+ await ((Folder)child).ValidateChildren(innerProgress, cancellationToken, recursive: recursive).ConfigureAwait(false);
}
}));