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 }); }
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); }