Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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;
                }
            }
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }