public LanguagePageViewModel(MainModel mainModel, Func <IWindowContext> setupWizardWindowContextProxy,
                              SetupWizardWindowLocalizator windowLocalization, SharedSetupContext sharedSetupContext)
     : base(mainModel, setupWizardWindowContextProxy, windowLocalization, sharedSetupContext, SetupWizardStep.LANGUAGE)
 {
     Localization  = windowLocalization.LanguageStep;
     languagesList = new ObservableCollection <LanguageItemViewModel>(MainModel.Localization.Languages.Select(language =>
                                                                                                              new LanguageItemViewModel(language)));
     selectedLanguage = languagesList.First(languageItem => languageItem.Language == MainModel.Localization.CurrentLanguage);
 }
        private void Initialize()
        {
            AppSettings appSettings = MainModel.AppSettings;

            settingsChanged       = false;
            isGeneralTabSelected  = true;
            isNetworkTabSelected  = false;
            isDownloadTabSelected = false;
            isMirrorsTabSelected  = false;
            isSearchTabSelected   = false;
            isExportTabSelected   = false;
            isAdvancedTabSelected = false;
            generalLanguagesList  = new ObservableCollection <LanguageItemViewModel>(MainModel.Localization.Languages.Select(language =>
                                                                                                                             new LanguageItemViewModel(language)));
            generalSelectedLanguage        = generalLanguagesList.First(languageItem => languageItem.Language == MainModel.Localization.CurrentLanguage);
            generalUpdateCheckIntervalList = new Dictionary <GeneralSettings.UpdateCheckInterval, string>
            {
                { GeneralSettings.UpdateCheckInterval.NEVER, Localization.GeneralUpdateCheckIntervalNever },
                { GeneralSettings.UpdateCheckInterval.DAILY, Localization.GeneralUpdateCheckIntervalDaily },
                { GeneralSettings.UpdateCheckInterval.WEEKLY, Localization.GeneralUpdateCheckIntervalWeekly },
                { GeneralSettings.UpdateCheckInterval.MONTHLY, Localization.GeneralUpdateCheckIntervalMonthly }
            };
            generalSelectedUpdateCheckInterval = generalUpdateCheckIntervalList.First(interval => interval.Key == appSettings.General.UpdateCheck);
            networkIsOfflineModeOn             = appSettings.Network.OfflineMode;
            networkUseProxy                      = appSettings.Network.UseProxy;
            networkProxyAddress                  = appSettings.Network.ProxyAddress;
            networkProxyPort                     = appSettings.Network.ProxyPort?.ToString() ?? String.Empty;
            networkProxyUserName                 = appSettings.Network.ProxyUserName;
            networkProxyPassword                 = appSettings.Network.ProxyPassword;
            downloadIsOpenInBrowserSelected      = !appSettings.Download.UseDownloadManager;
            downloadIsUseDownloadManagerSelected = !downloadIsOpenInBrowserSelected;
            downloadDirectory                    = appSettings.Download.DownloadDirectory;
            downloadTimeoutDefaultValues         = new ObservableCollection <string> {
                "30", "60", "90", "120", "180", "300", "600", "1200"
            };
            downloadTimeout = appSettings.Download.Timeout.ToString();
            downloadAttemptCountDefaultValues = new ObservableCollection <string> {
                "0", "1", "2", "3", "5", "10", "15", "20"
            };
            downloadAttemptCount            = appSettings.Download.Attempts.ToString();
            downloadRetryDelayDefaultValues = new ObservableCollection <string> {
                "60", "120", "180", "300", "600", "1200"
            };
            downloadRetryDelay = appSettings.Download.RetryDelay.ToString();
            mirrorsNonFictionBooksMirrorList           = BuildMirrorList(mirror => mirror.NonFictionDownloadUrl);
            mirrorsNonFictionCoversMirrorList          = BuildMirrorList(mirror => mirror.NonFictionCoverUrl);
            mirrorsNonFictionSynchronizationMirrorList = BuildMirrorList(mirror => mirror.NonFictionSynchronizationUrl);
            mirrorsFictionBooksMirrorList                  = BuildMirrorList(mirror => mirror.FictionDownloadUrl);
            mirrorsFictionCoversMirrorList                 = BuildMirrorList(mirror => mirror.FictionCoverUrl);
            mirrorsArticlesMirrorList                      = BuildMirrorList(mirror => mirror.SciMagDownloadUrl);
            mirrorsSelectedNonFictionBooksMirror           = GetDisplayMirrorName(appSettings.Mirrors.NonFictionBooksMirrorName);
            mirrorsSelectedNonFictionCoversMirror          = GetDisplayMirrorName(appSettings.Mirrors.NonFictionCoversMirrorName);
            mirrorsSelectedNonFictionSynchronizationMirror = GetDisplayMirrorName(appSettings.Mirrors.NonFictionSynchronizationMirrorName);
            mirrorsSelectedFictionBooksMirror              = GetDisplayMirrorName(appSettings.Mirrors.FictionBooksMirrorName);
            mirrorsSelectedFictionCoversMirror             = GetDisplayMirrorName(appSettings.Mirrors.FictionCoversMirrorName);
            mirrorsSelectedArticlesMirror                  = GetDisplayMirrorName(appSettings.Mirrors.ArticlesMirrorName);
            searchMaximumResultCountDefaultValues          = new ObservableCollection <string> {
                "100", "250", "500", "1000", "2500", "5000", "10000", "25000", "50000", "100000", "250000", "500000", "1000000"
            };
            searchIsLimitResultsOn               = appSettings.Search.LimitResults;
            searchMaximumResultCount             = appSettings.Search.MaximumResultCount.ToString();
            searchIsOpenInModalWindowSelected    = false;
            searchIsOpenInNonModalWindowSelected = false;
            searchIsOpenInNewTabSelected         = false;
            switch (appSettings.Search.OpenDetailsMode)
            {
            case SearchSettings.DetailsMode.NEW_MODAL_WINDOW:
                searchIsOpenInModalWindowSelected = true;
                break;

            case SearchSettings.DetailsMode.NEW_NON_MODAL_WINDOW:
                searchIsOpenInNonModalWindowSelected = true;
                break;

            case SearchSettings.DetailsMode.NEW_TAB:
                searchIsOpenInNewTabSelected = true;
                break;
            }
            exportIsOpenResultsAfterExportEnabled = appSettings.Export.OpenResultsAfterExport;
            exportIsSplitIntoMultipleFilesEnabled = appSettings.Export.SplitIntoMultipleFiles;
            exportMaximumRowsPerFileDefaultValues = new ObservableCollection <string> {
                "50000", "100000", "250000", "500000", "1000000"
            };
            exportMaximumRowsPerFile     = appSettings.Export.MaximumRowsPerFile.ToString();
            advancedIsLoggingEnabled     = appSettings.Advanced.LoggingEnabled;
            advancedIsSqlDebuggerEnabled = appSettings.Advanced.SqlDebuggerEnabled;
            Validate();
        }