public async Task <IEnumerable <Subtheme> > Synchronize(string apiKey, Theme theme)
        {
            _messageHub.Publish(new SubthemeSynchronizerStart());

            var subthemes = new List <Subtheme>();

            try
            {
                var getSubthemesParameters = new ParameterTheme
                {
                    ApiKey = apiKey,
                    Theme  = theme.Name
                };

                var bricksetSubthemes = (await _bricksetApiService.GetSubthemes(getSubthemesParameters)).ToList();

                _messageHub.Publish(new SubthemesAcquired {
                    Theme = theme.Name, Count = bricksetSubthemes.Count
                });

                foreach (var bricksetSubtheme in bricksetSubthemes)
                {
                    _messageHub.Publish(new SynchronizingSubthemeStart {
                        Theme = theme.Name, Subtheme = bricksetSubtheme.Subtheme
                    });

                    try
                    {
                        var subtheme = bricksetSubtheme.ToSubtheme();

                        subtheme.Theme = theme;

                        var persistedSubtheme = _subthemeRepository.Get(subtheme.Theme.Name, subtheme.Name);

                        if (persistedSubtheme != null)
                        {
                            subtheme.Id = persistedSubtheme.Id;
                        }

                        _subthemeRepository.AddOrUpdate(subtheme);

                        subthemes.Add(subtheme);
                    }
                    catch (Exception ex)
                    {
                        _messageHub.Publish(new SynchronizingSubthemeException {
                            Theme = theme.Name, Subtheme = bricksetSubtheme.Subtheme, Exception = ex
                        });
                    }

                    _messageHub.Publish(new SynchronizingSubthemeEnd {
                        Theme = theme.Name, Subtheme = bricksetSubtheme.Subtheme
                    });
                }
            }
            catch (Exception ex)
            {
                _messageHub.Publish(new SubthemeSynchronizerException {
                    Theme = theme.Name, Exception = ex
                });
            }

            _messageHub.Publish(new SubthemeSynchronizerEnd());

            return(subthemes);
        }
 public async Task <IEnumerable <Years> > GetYears(ParameterTheme getYearsParameters)
 {
     return((await BricksetHttpPostUrlEncodeAsync <ResultGetYears, ParameterTheme>(getYearsParameters).ConfigureAwait(false)).Years);
 }
        public async Task <IEnumerable <Theme> > Synchronize(string apiKey)
        {
            _messageHub.Publish(new ThemeSynchronizerStart());

            var themeList = new List <Theme>();

            try
            {
                var getThemesParameters = new ParameterApiKey
                {
                    ApiKey = apiKey
                };

                var bricksetThemes = (await _bricksetApiService.GetThemes(getThemesParameters).ConfigureAwait(false)).ToList();

                _messageHub.Publish(new ThemesAcquired {
                    Count = bricksetThemes.Count
                });

                foreach (var bricksetTheme in bricksetThemes)
                {
                    _messageHub.Publish(new SynchronizingThemeStart {
                        Theme = bricksetTheme.Theme
                    });

                    try
                    {
                        var theme = bricksetTheme.ToTheme();

                        var getYearsParameters = new ParameterTheme
                        {
                            ApiKey = apiKey,
                            Theme  = bricksetTheme.Theme
                        };

                        theme.SetCountPerYear = (await _bricksetApiService.GetYears(getYearsParameters).ConfigureAwait(false))
                                                .ToYearSetCountEnumerable()
                                                .ToList();

                        var persistedTheme = _themeRepository.Get(theme.Name);

                        if (persistedTheme != null)
                        {
                            theme.Id = persistedTheme.Id;
                        }

                        _themeRepository.AddOrUpdate(theme);

                        themeList.Add(theme);
                    }
                    catch (Exception ex)
                    {
                        _messageHub.Publish(new SynchronizingThemeException {
                            Theme = bricksetTheme.Theme, Exception = ex
                        });
                    }

                    _messageHub.Publish(new SynchronizingThemeEnd {
                        Theme = bricksetTheme.Theme
                    });
                }
            }
            catch (Exception ex)
            {
                _messageHub.Publish(new ThemeSynchronizerException {
                    Exception = ex
                });
            }

            _messageHub.Publish(new ThemeSynchronizerEnd());

            return(themeList);
        }