Ejemplo n.º 1
0
        private async Task GetProductsAsync()
        {
            var productSync = new ProductParser(_skApi, _cts.Token);

            productSync.ProductInfoUpdated += OnProductInfoUpdatedHandler;

            var enabledSubchapters = FiltersManagerVM.FiltersVM.GetEnabledSubchapter();

            TotalSubchapter = enabledSubchapters.Count;

            for (var i = 0; i < enabledSubchapters.Count; i++)
            {
                _cts.Token.ThrowIfCancellationRequested();

                CurrentSubchapterNumber = i + 1;
                var subchapter = enabledSubchapters.ElementAt(i);
                CurrentSubchapterTitle = subchapter.Name;

                Status = "Раздел: " + CurrentSubchapterTitle + "    " + CurrentSubchapterNumber + "/" +
                         enabledSubchapters.Count;
                ProductProcessingStatus = "Получение складчин из раздела...";
                var productsFromSubchapter =
                    await GetPartialProductsFromSubchapterAsync(subchapter.Id).ConfigureAwait(false);

                var filteredProducts = FiltrationPartialProducts(productsFromSubchapter);

                var productsFromDb = await GetSubchapterProductsFromDbAsync(subchapter.Id).ConfigureAwait(false);

                var products           = new List <Product>();
                var goodProductsFromDb = new List <Product>();
                _dbGoodProductsCountOfChapter = 0;

                var productsWithChangedViewsCount = new List <Product>();

                for (int j = 0; j < filteredProducts.Count; j++)
                {
                    _cts.Token.ThrowIfCancellationRequested();
                    var product = filteredProducts.ElementAt(j);

                    var productFromDb = FindSimilarDbProduct(productsFromDb, product);

                    if (productFromDb == null)
                    {
                        products.Add(product);
                    }
                    else
                    {
                        if (productFromDb.ViewCount != product.ViewCount)
                        {
                            productsWithChangedViewsCount.Add(product);
                        }

                        //Проверяем складчину из БД
                        if (Filters.IsGoodProduct(productFromDb, FiltersManagerVM.FiltersVM.Model))
                        {
                            ++_dbGoodProductsCountOfChapter;
                            goodProductsFromDb.Add(productFromDb);
                        }
                    }
                }
                await AddToResultsAsync(goodProductsFromDb).ConfigureAwait(false);

                productSync.ProductUpdateInfo(products);
                if (UpdateViewCount)
                {
                    await Db.Products.UpdateViewCountAsync(productsWithChangedViewsCount).ConfigureAwait(false);
                }
            }
        }