aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs62
1 files changed, 10 insertions, 52 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs
index e0a9e2ce8..b0dee9aaf 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs
@@ -3,7 +3,6 @@ using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Logging;
using System;
-using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@@ -42,38 +41,24 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
/// <returns>Task.</returns>
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
- var userLibraries = _userManager.Users
- .Select(i => new Tuple<Guid, IList<BaseItem>>(i.Id, i.RootFolder.GetRecursiveChildren(i, m => !(m is IHasMusicGenres) && !(m is Game))))
+ var items = _libraryManager.RootFolder.RecursiveChildren.Where(i => !(i is IHasMusicGenres) && !(i is Game))
+ .SelectMany(i => i.Genres)
+ .Distinct(StringComparer.OrdinalIgnoreCase)
.ToList();
- var masterDictionary = new Dictionary<string, Dictionary<Guid, Dictionary<CountType, int>>>(StringComparer.OrdinalIgnoreCase);
-
progress.Report(2);
-
var numComplete = 0;
+ var count = items.Count;
- foreach (var lib in userLibraries)
+ foreach (var name in items)
{
- SetItemCounts(lib.Item1, lib.Item2, masterDictionary);
-
- numComplete++;
- double percent = numComplete;
- percent /= userLibraries.Count;
- percent *= 8;
-
- progress.Report(percent);
- }
+ cancellationToken.ThrowIfCancellationRequested();
- progress.Report(10);
-
- var count = masterDictionary.Count;
- numComplete = 0;
-
- foreach (var name in masterDictionary.Keys)
- {
try
{
- await UpdateItemByNameCounts(name, cancellationToken, masterDictionary[name]).ConfigureAwait(false);
+ var itemByName = _libraryManager.GetGenre(name);
+
+ await itemByName.RefreshMetadata(cancellationToken).ConfigureAwait(false);
}
catch (OperationCanceledException)
{
@@ -82,7 +67,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
}
catch (Exception ex)
{
- _logger.ErrorException("Error updating counts for {0}", ex, name);
+ _logger.ErrorException("Error refreshing {0}", ex, name);
}
numComplete++;
@@ -95,32 +80,5 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
progress.Report(100);
}
-
- private Task UpdateItemByNameCounts(string name, CancellationToken cancellationToken, Dictionary<Guid, Dictionary<CountType, int>> counts)
- {
- var itemByName = _libraryManager.GetGenre(name);
-
- foreach (var libraryId in counts.Keys)
- {
- var itemCounts = CountHelpers.GetCounts(counts[libraryId]);
-
- itemByName.SetItemByNameCounts(libraryId, itemCounts);
- }
-
- return itemByName.RefreshMetadata(cancellationToken);
- }
-
- private void SetItemCounts(Guid userId, IEnumerable<BaseItem> allItems, Dictionary<string, Dictionary<Guid, Dictionary<CountType, int>>> masterDictionary)
- {
- foreach (var media in allItems)
- {
- var names = media
- .Genres
- .Distinct(StringComparer.OrdinalIgnoreCase)
- .ToList();
-
- CountHelpers.SetItemCounts(userId, media, names, masterDictionary);
- }
- }
}
}