aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-03-09 18:14:44 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-03-09 18:14:44 -0400
commitd49494476770b3c0a091841bd3bbd44862fb8137 (patch)
treef0bf4bffa8b4d8a91de9e9096941aa34082a8e91 /MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs
parent1ead63b0d1a532cf828a4ed7c5310eef9c255740 (diff)
calculate item by name counts on the fly
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs103
1 files changed, 6 insertions, 97 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs b/MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs
index 86c5dbc4c..d11e62a1a 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs
@@ -1,10 +1,7 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Logging;
using System;
-using System.Collections.Generic;
-using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@@ -18,19 +15,13 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
private readonly ILibraryManager _libraryManager;
/// <summary>
- /// The _user manager
- /// </summary>
- private readonly IUserManager _userManager;
-
- /// <summary>
/// The _logger
/// </summary>
private readonly ILogger _logger;
- public PeoplePostScanTask(ILibraryManager libraryManager, IUserManager userManager, ILogger logger)
+ public PeoplePostScanTask(ILibraryManager libraryManager, ILogger logger)
{
_libraryManager = libraryManager;
- _userManager = userManager;
_logger = logger;
}
@@ -42,94 +33,12 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
/// <returns>Task.</returns>
public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
- return RunInternal(progress, cancellationToken);
- }
-
- private async Task RunInternal(IProgress<double> progress, CancellationToken cancellationToken)
- {
- var userLibraries = _userManager.Users
- .Select(i => new Tuple<Guid, IList<BaseItem>>(i.Id, i.RootFolder.GetRecursiveChildren(i, null)))
- .ToList();
-
- var masterDictionary = new Dictionary<string, Dictionary<Guid, Dictionary<CountType, int>>>(StringComparer.OrdinalIgnoreCase);
-
- progress.Report(2);
-
- var numComplete = 0;
-
- foreach (var lib in userLibraries)
+ return new PeopleValidator(_libraryManager, _logger).ValidatePeople(cancellationToken, new MetadataRefreshOptions
{
- cancellationToken.ThrowIfCancellationRequested();
-
- SetItemCounts(lib.Item1, lib.Item2, masterDictionary);
-
- numComplete++;
- double percent = numComplete;
- percent /= userLibraries.Count;
- percent *= 8;
+ ImageRefreshMode = ImageRefreshMode.ValidationOnly,
+ MetadataRefreshMode = MetadataRefreshMode.None
- progress.Report(percent);
- }
-
- progress.Report(10);
-
- var count = masterDictionary.Count;
- numComplete = 0;
-
- foreach (var name in masterDictionary.Keys)
- {
- cancellationToken.ThrowIfCancellationRequested();
-
- try
- {
- var counts = masterDictionary[name];
-
- var itemByName = _libraryManager.GetPerson(name);
-
- // The only purpose here is to be able to react to image changes without running the people task.
- // All other metadata can wait for that.
- await itemByName.RefreshMetadata(new MetadataRefreshOptions
- {
- ImageRefreshMode = ImageRefreshMode.ValidationOnly,
- MetadataRefreshMode = MetadataRefreshMode.None
-
- }, cancellationToken).ConfigureAwait(false);
-
- foreach (var libraryId in counts.Keys)
- {
- var itemCounts = CountHelpers.GetCounts(counts[libraryId]);
-
- itemByName.SetItemByNameCounts(libraryId, itemCounts);
- }
- }
- catch (Exception ex)
- {
- _logger.ErrorException("Error updating counts for {0}", ex, name);
- }
-
- numComplete++;
- double percent = numComplete;
- percent /= count;
- percent *= 90;
-
- progress.Report(percent + 10);
- }
-
- progress.Report(100);
+ }, progress);
}
-
- private void SetItemCounts(Guid userId, IEnumerable<BaseItem> allItems, Dictionary<string, Dictionary<Guid, Dictionary<CountType, int>>> masterDictionary)
- {
- foreach (var media in allItems)
- {
- var names = media
- .People.Select(i => i.Name)
- .Distinct(StringComparer.OrdinalIgnoreCase)
- .ToList();
-
- CountHelpers.SetItemCounts(userId, media, names, masterDictionary);
- }
- }
-
}
}