Example #1
0
        private async Task <IEnumerable <int> > GetAllWantedSetIds(string apiKey, string username = null, string userHash = null)
        {
            if (string.IsNullOrWhiteSpace(apiKey) ||
                (string.IsNullOrWhiteSpace(userHash) && string.IsNullOrWhiteSpace(username)) ||
                (!string.IsNullOrWhiteSpace(userHash) && !string.IsNullOrWhiteSpace(username)))
            {
                return(new List <int>());
            }

            var getSetsParameter = new GetSetsParameters
            {
                ApiKey   = apiKey,
                UserHash = userHash ?? string.Empty,
                Wanted   = true,
                PageSize = Constants.BricksetPageSizeParameter
            };

            var wantedSets         = new List <int>();
            var pageNumber         = 1;
            var currentPageResults = new List <Sets>();

            do
            {
                getSetsParameter.PageNumber = pageNumber;

                currentPageResults = (await _bricksetApiService.GetSets(getSetsParameter).ConfigureAwait(false)).ToList();

                wantedSets.AddRange(currentPageResults.Select(set => set.SetId));

                pageNumber++;
            } while (currentPageResults.Count == Constants.BricksetPageSizeParameter);

            return(wantedSets);
        }
        public async Task Synchronize(string apiKey, DateTimeOffset previousUpdateTimestamp)
        {
            _messageHub.Publish(new SetSynchronizerStart {
                ForSubtheme = false
            });

            try
            {
                var getSetsParameters = new GetSetsParameters
                {
                    UpdatedSince = previousUpdateTimestamp.UtcDateTime
                };

                var recentlyUpdatedSets = await GetAllSetsFor(apiKey, getSetsParameters);

                _messageHub.Publish(new AcquiringSetsEnd {
                    Count = recentlyUpdatedSets.Count
                });

                foreach (var themeGroup in recentlyUpdatedSets.GroupBy(bricksetSet => bricksetSet.Theme))
                {
                    var theme = _themeRepository.Get(themeGroup.Key);

                    foreach (var subthemeGroup in themeGroup.GroupBy(themeSets => themeSets.Subtheme))
                    {
                        var subtheme = _subthemeRepository.Get(theme.Name, subthemeGroup.Key);

                        foreach (var bricksetSet in subthemeGroup)
                        {
                            await AddOrUpdateSet(apiKey, theme, subtheme, bricksetSet);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _messageHub.Publish(new SetSynchronizerException {
                    Exception = ex
                });
            }

            _messageHub.Publish(new SetSynchronizerEnd {
                ForSubtheme = false
            });
        }
        public async Task Synchronize(string apiKey, Theme theme, Subtheme subtheme)
        {
            _messageHub.Publish(new SetSynchronizerStart {
                ForSubtheme = true
            });

            for (var year = subtheme.YearFrom; year <= subtheme.YearTo; year++)
            {
                try
                {
                    _messageHub.Publish(new AcquiringSetsStart {
                        Theme = theme.Name, Subtheme = subtheme.Name, Year = year
                    });

                    var getSetsParameters = new GetSetsParameters
                    {
                        Theme    = theme.Name,
                        Subtheme = subtheme.Name.Replace("{None}", ""),
                        Year     = year
                    };

                    var bricksetSets = await GetAllSetsFor(apiKey, getSetsParameters);

                    _messageHub.Publish(new AcquiringSetsEnd {
                        Theme = theme.Name, Subtheme = subtheme.Name, Count = bricksetSets.Count, Year = year
                    });

                    foreach (var bricksetSet in bricksetSets)
                    {
                        await AddOrUpdateSet(apiKey, theme, subtheme, bricksetSet, year);
                    }
                }
                catch (Exception ex)
                {
                    _messageHub.Publish(new SetSynchronizerException {
                        Exception = ex
                    });
                }
            }

            _messageHub.Publish(new SetSynchronizerEnd {
                ForSubtheme = true
            });
        }
Example #4
0
        private async Task <IDictionary <long, BricksetUserSet> > GetAllOwnedSets(string apiKey, string username = null, string userHash = null)
        {
            if (string.IsNullOrWhiteSpace(apiKey) ||
                (string.IsNullOrWhiteSpace(userHash) && string.IsNullOrWhiteSpace(username)) ||
                (!string.IsNullOrWhiteSpace(userHash) && !string.IsNullOrWhiteSpace(username)))
            {
                return(new Dictionary <long, BricksetUserSet>());
            }

            var getSetsParameter = new GetSetsParameters
            {
                ApiKey   = apiKey,
                UserHash = userHash ?? string.Empty,
                Owned    = true,
                PageSize = Constants.BricksetPageSizeParameter
            };

            var ownedSets          = new List <BricksetUserSet>();
            var pageNumber         = 1;
            var currentPageResults = new List <Sets>();

            do
            {
                getSetsParameter.PageNumber = pageNumber;

                currentPageResults = (await _bricksetApiService.GetSets(getSetsParameter).ConfigureAwait(false)).ToList();

                ownedSets.AddRange(currentPageResults.Select(set => new BricksetUserSet
                {
                    Set           = _setRepository.Get(set.SetId),
                    Owned         = true,
                    QuantityOwned = (short)(set.Collection?.QtyOwned ?? 0)
                }));

                pageNumber++;
            } while (currentPageResults.Count == Constants.BricksetPageSizeParameter);

            return(ownedSets.ToDictionary(bricksetUserSet => bricksetUserSet.Set.SetId));
        }
        private async Task <IList <Sets> > GetAllSetsFor(string apiKey, GetSetsParameters getSetsParameters)
        {
            getSetsParameters.ApiKey       = apiKey;
            getSetsParameters.PageSize     = Constants.BricksetPageSizeParameter;
            getSetsParameters.ExtendedData = true;

            var foundSets  = new List <Sets>();
            var pageNumber = 1;

            List <Sets> currentPageResults;

            do
            {
                getSetsParameters.PageNumber = pageNumber;

                currentPageResults = (await _bricksetApiService.GetSets(getSetsParameters)).ToList();

                foundSets.AddRange(currentPageResults);

                pageNumber++;
            } while (currentPageResults.Count == Constants.BricksetPageSizeParameter);

            return(foundSets);
        }
 public async Task <IEnumerable <Sets> > GetSets(GetSetsParameters getSetsParameters)
 {
     return((await BricksetHttpPostUrlEncodeAsync <ResultGetSets, ParameterSets>(getSetsParameters.ToParameterSets()).ConfigureAwait(false)).Sets);
 }