public async Task <bool> SetCollection(SetCollectionParameters setCollectionParameters)
 {
     return((await BricksetHttpPostUrlEncodeAsync <ResultSetCollection, ParameterSetCollection>(setCollectionParameters.ToParameterSetCollection()).ConfigureAwait(false)).Status == ResultStatus.Success);
 }
예제 #2
0
        public async Task SynchronizeBricksetPrimaryUser(string apiKey, string username, string userHash)
        {
            _messageHub.Publish(new UserSynchronizerStart {
                UserType = BricksetUserType.Primary, Username = username
            });

            try
            {
                var user = _bricksetUserRepository.Get(username);

                if (user.UserSynchronizationTimestamp.HasValue)
                {
                    _messageHub.Publish(new AllMyBricksToBricksetStart());

                    _messageHub.Publish(new AllMyBricksToBricksetAcquiringSetsStart());

                    var updatedSetsSinceLastSynchronization = user.Sets.Where(set => set.LastChangeTimestamp > user.UserSynchronizationTimestamp.Value).ToList();

                    _messageHub.Publish(new AllMyBricksToBricksetAcquiringSetsEnd {
                        Count = updatedSetsSinceLastSynchronization.Count
                    });

                    updatedSetsSinceLastSynchronization.ForEach(bricksetUserSet =>
                    {
                        _messageHub.Publish(new UserSynchronizerSynchronizingSetStart {
                            SetId = bricksetUserSet.Set.SetId
                        });

                        var setCollectionParameter = new SetCollectionParameters
                        {
                            ApiKey   = apiKey,
                            UserHash = userHash,
                            SetID    = bricksetUserSet.Set.SetId,
                            QtyOwned = bricksetUserSet.QuantityOwned,
                            Want     = bricksetUserSet.Wanted,
                            Own      = bricksetUserSet.Owned
                        };

                        _bricksetApiService.SetCollection(setCollectionParameter);

                        _messageHub.Publish(new UserSynchronizerSynchronizingSetEnd {
                            SetId = bricksetUserSet.Set.SetId
                        });
                    });

                    _messageHub.Publish(new AllMyBricksToBricksetEnd());
                }

                _messageHub.Publish(new BricksetToAllMyBricksStart());

                _messageHub.Publish(new BricksetToAllMyBricksAcquiringSetsStart());

                var bricksetUserSets = await GetAllUserSetsFromBrickset(apiKey, userHash : userHash).ConfigureAwait(false);

                var allMyBricksUserSetIds  = user.Sets.Select(bricksetUserSet => bricksetUserSet.Set.SetId);
                var bricksetUserSetIds     = bricksetUserSets.Select(bricksetUserSet => bricksetUserSet.Set.SetId);
                var setIdsNotInAllMyBricks = bricksetUserSetIds.Except(allMyBricksUserSetIds).ToList();

                _messageHub.Publish(new BricksetToAllMyBricksAcquiringSetsEnd {
                    Count = setIdsNotInAllMyBricks.Count
                });

                foreach (var userSetNotInAllMyBricks in bricksetUserSets.Where(bricksetUserSet => setIdsNotInAllMyBricks.Contains(bricksetUserSet.Set.SetId)))
                {
                    _messageHub.Publish(new UserSynchronizerSynchronizingSetStart {
                        SetId = userSetNotInAllMyBricks.Set.SetId
                    });

                    _bricksetUserRepository.AddOrUpdateSet(username, userSetNotInAllMyBricks);

                    _messageHub.Publish(new UserSynchronizerSynchronizingSetEnd {
                        SetId = userSetNotInAllMyBricks.Set.SetId
                    });
                }

                _messageHub.Publish(new BricksetToAllMyBricksEnd());

                _bricksetUserRepository.UpdateUserSynchronizationTimestamp(username, DateTimeOffset.Now);
            }
            catch (Exception ex)
            {
                _messageHub.Publish(new UserSynchronizerException {
                    UserType = BricksetUserType.Primary, Username = username, Exception = ex
                });
            }

            _messageHub.Publish(new UserSynchronizerEnd {
                UserType = BricksetUserType.Primary, Username = username
            });
        }