private void SetItemCounts(Guid?userId, IEnumerable <BaseItem> allItems, Dictionary <string, Dictionary <Guid, Dictionary <string, int> > > masterDictionary) { foreach (var media in allItems) { var names = media .Genres .Distinct(StringComparer.OrdinalIgnoreCase) .ToList(); CountHelpers.SetItemCounts(userId, media, names, masterDictionary); } }
private async Task UpdateItemByNameCounts(string name, CancellationToken cancellationToken, Dictionary <Guid, Dictionary <CountType, int> > counts) { var itemByName = _libraryManager.GetGameGenre(name); foreach (var libraryId in counts.Keys) { var itemCounts = CountHelpers.GetCounts(counts[libraryId]); itemByName.UserItemCounts[libraryId] = itemCounts; } await itemByName.RefreshMetadata(cancellationToken).ConfigureAwait(false); }
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 async Task UpdateItemByNameCounts(string name, CancellationToken cancellationToken, Dictionary <Guid, Dictionary <string, int> > counts) { var itemByName = await _libraryManager.GetMusicGenre(name, cancellationToken, true, true).ConfigureAwait(false); foreach (var libraryId in counts.Keys.ToList()) { var itemCounts = CountHelpers.GetCounts(counts[libraryId]); if (libraryId == Guid.Empty) { itemByName.ItemCounts = itemCounts; } else { itemByName.UserItemCounts[libraryId] = itemCounts; } } }
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) { cancellationToken.ThrowIfCancellationRequested(); SetItemCounts(lib.Item1, lib.Item2, masterDictionary); numComplete++; double percent = numComplete; percent /= userLibraries.Count; percent *= 8; 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); }
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); // Populate counts of items //SetItemCounts(null, allLibraryItems, masterDictionary); progress.Report(2); var numComplete = 0; foreach (var lib in userLibraries) { cancellationToken.ThrowIfCancellationRequested(); SetItemCounts(lib.Item1, lib.Item2, masterDictionary); numComplete++; double percent = numComplete; percent /= userLibraries.Count; percent *= 8; 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); await itemByName.RefreshMetadata(cancellationToken, allowSlowProviders : false).ConfigureAwait(false); foreach (var libraryId in counts.Keys) { var itemCounts = CountHelpers.GetCounts(counts[libraryId]); itemByName.UserItemCounts[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); }