Beispiel #1
0
        private void SettingsMenuItemClick()
        {
            SettingsWindowViewModel settingsWindowViewModel = new SettingsWindowViewModel(mainModel);
            IWindowContext          settingsWindowContext   = WindowManager.CreateWindow(RegisteredWindows.WindowKey.SETTINGS_WINDOW, settingsWindowViewModel, CurrentWindowContext);

            settingsWindowContext.ShowDialog();
        }
Beispiel #2
0
        private void Import()
        {
            OpenFileDialogParameters selectSqlDumpFileDialogParameters = new OpenFileDialogParameters
            {
                DialogTitle = "Выбор SQL-дампа",
                Filter      = "Все поддерживаемые файлы|*.sql;*zip;*.rar;*.gz;*.7z|SQL -дампы (*.sql)|*.sql|Архивы (*.zip, *.rar, *.gz, *.7z)|*zip;*.rar;*.gz;*.7z|Все файлы (*.*)|*.*",
                Multiselect = false
            };
            OpenFileDialogResult selectSqlDumpFileDialogResult = WindowManager.ShowOpenFileDialog(selectSqlDumpFileDialogParameters);

            if (selectSqlDumpFileDialogResult.DialogResult)
            {
                ImportWindowViewModel importWindowViewModel = new ImportWindowViewModel(mainModel, selectSqlDumpFileDialogResult.SelectedFilePaths.First());
                IWindowContext        importWindowContext   = WindowManager.CreateWindow(RegisteredWindows.WindowKey.IMPORT_WINDOW, importWindowViewModel, CurrentWindowContext);
                importWindowContext.ShowDialog();
                if (IsDefaultSearchTabVisible)
                {
                    DefaultSearchTabViewModel.Refresh(setFocus: true);
                }
                else
                {
                    foreach (SearchTabViewModel searchTabViewModel in TabViewModels.OfType <SearchTabViewModel>())
                    {
                        searchTabViewModel.Refresh(setFocus: searchTabViewModel == SelectedTabViewModel);
                    }
                }
            }
        }
Beispiel #3
0
 private void OpenFictionDetailsRequested(object sender, OpenFictionDetailsEventArgs e)
 {
     Logger.Debug($"Opening fiction book with ID = {e.FictionBook.Id}, Libgen ID = {e.FictionBook.LibgenId}.");
     SearchSettings.DetailsMode openDetailsMode = MainModel.AppSettings.Search.OpenDetailsMode;
     if (openDetailsMode == SearchSettings.DetailsMode.NEW_TAB)
     {
         FictionDetailsTabViewModel fictionDetailsTabViewModel
             = new FictionDetailsTabViewModel(MainModel, CurrentWindowContext, e.FictionBook, isInModalWindow: false);
         fictionDetailsTabViewModel.SelectDownloadRequested += SelectDownloadRequested;
         fictionDetailsTabViewModel.CloseTabRequested       += FictionDetailsCloseTabRequested;
         TabViewModels.Add(fictionDetailsTabViewModel);
         SelectedTabViewModel = fictionDetailsTabViewModel;
     }
     else
     {
         bool modalWindow = openDetailsMode == SearchSettings.DetailsMode.NEW_MODAL_WINDOW;
         FictionDetailsWindowViewModel detailsWindowViewModel = new FictionDetailsWindowViewModel(MainModel, e.FictionBook, modalWindow);
         detailsWindowViewModel.SelectDownloadRequested += SelectDownloadRequested;
         IWindowContext detailsWindowContext = WindowManager.CreateWindow(RegisteredWindows.WindowKey.FICTION_DETAILS_WINDOW, detailsWindowViewModel, CurrentWindowContext);
         FictionDetailsWindowSettings detailsWindowSettings = MainModel.AppSettings.Fiction.DetailsWindow;
         if (modalWindow)
         {
             detailsWindowContext.ShowDialog(detailsWindowSettings.Width, detailsWindowSettings.Height);
             detailsWindowViewModel.SelectDownloadRequested -= SelectDownloadRequested;
         }
         else
         {
             detailsWindowViewModel.WindowClosed += FictionDetailsWindowClosed;
             detailsWindowContext.Show(detailsWindowSettings.Width, detailsWindowSettings.Height);
         }
     }
 }
Beispiel #4
0
 private void OpenSciMagDetailsRequested(object sender, OpenSciMagDetailsEventArgs e)
 {
     Logger.Debug($"Opening article with ID = {e.SciMagArticle.Id}, Libgen ID = {e.SciMagArticle.LibgenId}.");
     SearchSettings.DetailsMode openDetailsMode = MainModel.AppSettings.Search.OpenDetailsMode;
     if (openDetailsMode == SearchSettings.DetailsMode.NEW_TAB)
     {
         SciMagDetailsTabViewModel sciMagDetailsTabViewModel =
             new SciMagDetailsTabViewModel(MainModel, CurrentWindowContext, e.SciMagArticle, isInModalWindow: false);
         sciMagDetailsTabViewModel.SelectDownloadRequested += SelectDownloadRequested;
         sciMagDetailsTabViewModel.CloseTabRequested       += SciMagDetailsCloseTabRequested;
         TabViewModels.Add(sciMagDetailsTabViewModel);
         SelectedTabViewModel = sciMagDetailsTabViewModel;
     }
     else
     {
         bool modalWindow = openDetailsMode == SearchSettings.DetailsMode.NEW_MODAL_WINDOW;
         SciMagDetailsWindowViewModel detailsWindowViewModel = new SciMagDetailsWindowViewModel(MainModel, e.SciMagArticle, modalWindow);
         detailsWindowViewModel.SelectDownloadRequested += SelectDownloadRequested;
         IWindowContext detailsWindowContext = WindowManager.CreateWindow(RegisteredWindows.WindowKey.SCI_MAG_DETAILS_WINDOW, detailsWindowViewModel, CurrentWindowContext);
         SciMagDetailsWindowSettings detailsWindowSettings = MainModel.AppSettings.SciMag.DetailsWindow;
         if (modalWindow)
         {
             detailsWindowContext.ShowDialog(detailsWindowSettings.Width, detailsWindowSettings.Height);
             detailsWindowViewModel.SelectDownloadRequested -= SelectDownloadRequested;
         }
         else
         {
             detailsWindowViewModel.WindowClosed += SciMagDetailsWindowClosed;
             detailsWindowContext.Show(detailsWindowSettings.Width, detailsWindowSettings.Height);
         }
     }
 }
Beispiel #5
0
 private void OpenNonFictionDetailsRequested(object sender, NonFictionSearchResultsTabViewModel.OpenNonFictionDetailsEventArgs e)
 {
     Logger.Debug($"Opening non-fiction book with ID = {e.NonFictionBook.Id}, Libgen ID = {e.NonFictionBook.LibgenId}.");
     SearchSettings.DetailsMode openDetailsMode = mainModel.AppSettings.Search.OpenDetailsMode;
     if (openDetailsMode == SearchSettings.DetailsMode.NEW_TAB)
     {
         NonFictionDetailsTabViewModel nonFictionDetailsTabViewModel =
             new NonFictionDetailsTabViewModel(mainModel, CurrentWindowContext, e.NonFictionBook, isInModalWindow: false);
         nonFictionDetailsTabViewModel.CloseTabRequested += NonFictionDetailsCloseTabRequested;
         TabViewModels.Add(nonFictionDetailsTabViewModel);
         SelectedTabViewModel = nonFictionDetailsTabViewModel;
     }
     else
     {
         bool modalWindow = openDetailsMode == SearchSettings.DetailsMode.NEW_MODAL_WINDOW;
         NonFictionDetailsWindowViewModel detailsWindowViewModel = new NonFictionDetailsWindowViewModel(mainModel, e.NonFictionBook, modalWindow);
         IWindowContext detailsWindowContext = WindowManager.CreateWindow(RegisteredWindows.WindowKey.NON_FICTION_DETAILS_WINDOW, detailsWindowViewModel, CurrentWindowContext);
         NonFictionDetailsWindowSettings detailsWindowSettings = mainModel.AppSettings.NonFiction.DetailsWindow;
         if (modalWindow)
         {
             detailsWindowContext.ShowDialog(detailsWindowSettings.Width, detailsWindowSettings.Height);
         }
         else
         {
             detailsWindowContext.Show(detailsWindowSettings.Width, detailsWindowSettings.Height);
         }
     }
 }
        private void OpenBook(LibraryItemViewModel book)
        {
            BookViewModel  bookViewModel     = new BookViewModel(book.Id);
            IWindowContext bookWindowContext = windowManager.CreateWindow(bookViewModel);

            bookWindowContext.ShowDialog();
        }
Beispiel #7
0
        protected void ShowErrorWindow(Exception exception, IWindowContext parentWindowContext)
        {
            Logger.Exception(exception);
            ErrorWindowViewModel errorWindowViewModel = new ErrorWindowViewModel(exception.ToString());
            IWindowContext       errorWindowContext   = WindowManager.CreateWindow(RegisteredWindows.WindowKey.ERROR_WINDOW, errorWindowViewModel, parentWindowContext);

            errorWindowContext.ShowDialog();
        }
Beispiel #8
0
        private void ShowErrorWindow(Exception exception)
        {
            Logger.Exception(exception);
            ErrorWindowViewModel errorWindowViewModel = new ErrorWindowViewModel(exception?.ToString() ?? "(null)");
            IWindowContext       errorWindowContext   = WindowManager.CreateWindow(RegisteredWindows.WindowKey.ERROR_WINDOW, errorWindowViewModel);

            errorWindowContext.ShowDialog();
        }
        private void SqlDebuggerMenuItemClick()
        {
            SqlDebuggerWindowViewModel sqlDebuggerWindowViewModel = new SqlDebuggerWindowViewModel(MainModel);
            IWindowContext             sqlDebuggerWindowContext   =
                WindowManager.CreateWindow(RegisteredWindows.WindowKey.SQL_DEBUGGER_WINDOW, sqlDebuggerWindowViewModel, CurrentWindowContext);

            sqlDebuggerWindowContext.ShowDialog();
        }
Beispiel #10
0
        private void DatabaseMenuItemClick()
        {
            DatabaseWindowViewModel databaseWindowViewModel = new DatabaseWindowViewModel(MainModel);
            IWindowContext          databaseWindowContext   = WindowManager.CreateWindow(RegisteredWindows.WindowKey.DATABASE_WINDOW, databaseWindowViewModel,
                                                                                         CurrentWindowContext);

            databaseWindowContext.ShowDialog();
        }
        public void Import(ImportQueueItemViewModel importQueueItemViewModel)
        {
            string databaseDumpFilePath;

            if (SharedSetupContext.SelectedDownloadMode == SharedSetupContext.DownloadMode.DOWNLOAD_MANAGER)
            {
                databaseDumpFilePath = importQueueItemViewModel.Collection.DownloadFilePath;
            }
            else
            {
                OpenFileDialogResult selectDatabaseDumpFileDialogResult = ImportWindowViewModel.SelectDatabaseDumpFile(MainModel);
                if (!selectDatabaseDumpFileDialogResult.DialogResult)
                {
                    return;
                }
                databaseDumpFilePath = selectDatabaseDumpFileDialogResult.SelectedFilePaths.First();
            }
            importQueueItemViewModel.Status = ImportQueueItemStatus.IMPORTING;
            TableType expectedTableType;

            switch (importQueueItemViewModel.Collection.Identifier)
            {
            case SharedSetupContext.CollectionIdentifier.NON_FICTION:
                expectedTableType = TableType.NON_FICTION;
                break;

            case SharedSetupContext.CollectionIdentifier.FICTION:
                expectedTableType = TableType.FICTION;
                break;

            case SharedSetupContext.CollectionIdentifier.SCIMAG:
                expectedTableType = TableType.SCI_MAG;
                break;

            default:
                throw new Exception($"Unexpected collection identifier: {importQueueItemViewModel.Collection.Identifier}.");
            }
            ImportWindowViewModel importWindowViewModel = new ImportWindowViewModel(MainModel, databaseDumpFilePath, expectedTableType);
            IWindowContext        importWindowContext   = WindowManager.CreateWindow(RegisteredWindows.WindowKey.IMPORT_WINDOW, importWindowViewModel,
                                                                                     SetupWizardWindowContext);

            importWindowContext.ShowDialog();
            switch (importWindowViewModel.Status)
            {
            case ImportWindowViewModel.ImportStatus.IMPORT_COMPLETE:
                importQueueItemViewModel.Status = ImportQueueItemStatus.IMPORT_SUCCESSFUL;
                SelectNextImportQueueItem();
                break;

            case ImportWindowViewModel.ImportStatus.IMPORT_CANCELLED:
                importQueueItemViewModel.Status = ImportQueueItemStatus.IMPORT_CANCELLED;
                break;

            default:
                importQueueItemViewModel.Status = ImportQueueItemStatus.IMPORT_ERROR;
                break;
            }
        }
        private void ProxyServerSettingsClick()
        {
            IWindowContext setupWizardProxySettingsWindowContext = WindowManager.CreateWindow(RegisteredWindows.WindowKey.SETUP_WIZARD_PROXY_SETTINGS_WINDOW,
                                                                                              setupWizardProxySettingsWindowViewModel, SetupWizardWindowContext);

            setupWizardProxySettingsWindowViewModel.PopulateFieldsFromAppSettings();
            setupWizardProxySettingsWindowViewModel.SetFocus();
            setupWizardProxySettingsWindowContext.ShowDialog();
        }
        private void DatabaseMenuItemClick()
        {
            DatabaseWindowViewModel databaseWindowViewModel = new DatabaseWindowViewModel(MainModel);
            IWindowContext          databaseWindowContext   = WindowManager.CreateWindow(RegisteredWindows.WindowKey.DATABASE_WINDOW, databaseWindowViewModel,
                                                                                         CurrentWindowContext);

            databaseWindowContext.ShowDialog();
            RefreshSearchTabCollectionAvailabilities();
        }
Beispiel #14
0
        private void AboutMenuItemClick()
        {
            AboutWindowViewModel aboutWindowViewModel = new AboutWindowViewModel(MainModel);
            IWindowContext       aboutWindowContext   = WindowManager.CreateWindow(RegisteredWindows.WindowKey.ABOUT_WINDOW, aboutWindowViewModel,
                                                                                   CurrentWindowContext);

            if (aboutWindowContext.ShowDialog() == true && aboutWindowViewModel.ApplicationUpdateRequested)
            {
                ShowApplicationUpdate(aboutWindowViewModel.UpdateCheckResult, showSkipVersionButton: false);
            }
        }
        private void Import()
        {
            OpenFileDialogResult selectSqlDumpFileDialogResult = ImportWindowViewModel.SelectDatabaseDumpFile(MainModel);

            if (selectSqlDumpFileDialogResult.DialogResult)
            {
                ImportWindowViewModel importWindowViewModel =
                    new ImportWindowViewModel(MainModel, selectSqlDumpFileDialogResult.SelectedFilePaths.First(), null);
                IWindowContext importWindowContext = WindowManager.CreateWindow(RegisteredWindows.WindowKey.IMPORT_WINDOW, importWindowViewModel, CurrentWindowContext);
                importWindowContext.ShowDialog();
                RefreshSearchTabCollectionAvailabilities();
            }
        }
        protected void ShowErrorWindow(Exception exception, IWindowContext parentWindowContext)
        {
            try
            {
                Logger.Exception(exception);
            }
            catch
            {
            }
            ErrorWindowViewModel errorWindowViewModel = new ErrorWindowViewModel(exception.ToString(), MainModel.Localization.CurrentLanguage);
            IWindowContext       errorWindowContext   = WindowManager.CreateWindow(RegisteredWindows.WindowKey.ERROR_WINDOW, errorWindowViewModel, parentWindowContext);

            errorWindowContext.ShowDialog();
        }
Beispiel #17
0
        private void ShowApplicationUpdate(Updater.UpdateCheckResult updateCheckResult, bool showSkipVersionButton)
        {
            ApplicationUpdateWindowViewModel applicationUpdateWindowViewModel =
                new ApplicationUpdateWindowViewModel(MainModel, updateCheckResult, showSkipVersionButton);

            applicationUpdateWindowViewModel.ApplicationShutdownRequested += Shutdown;
            IWindowContext applicationUpdateWindowContext = WindowManager.CreateWindow(RegisteredWindows.WindowKey.APPLICATION_UPDATE_WINDOW,
                                                                                       applicationUpdateWindowViewModel, CurrentWindowContext);

            if (applicationUpdateWindowContext.ShowDialog() == true)
            {
                IsApplicationUpdateAvailable = false;
            }
            applicationUpdateWindowViewModel.ApplicationShutdownRequested -= Shutdown;
        }
Beispiel #18
0
        private void ShowCreateDatabaseWindow(MainModel mainModel)
        {
            CreateDatabaseViewModel createDatabaseViewModel = new CreateDatabaseViewModel(mainModel);
            IWindowContext          windowContext           = WindowManager.CreateWindow(RegisteredWindows.WindowKey.CREATE_DATABASE_WINDOW, createDatabaseViewModel);
            bool?result = windowContext.ShowDialog();

            if (result == true)
            {
                ShowMainWindow(mainModel);
            }
            else
            {
                Shutdown();
            }
        }
Beispiel #19
0
        private void ShowSetupWizardWindow(MainModel mainModel)
        {
            SetupWizardWindowViewModel setupWizardWindowViewModel = new SetupWizardWindowViewModel(mainModel);
            IWindowContext             windowContext = WindowManager.CreateWindow(RegisteredWindows.WindowKey.SETUP_WIZARD_WINDOW, setupWizardWindowViewModel);
            bool?result = windowContext.ShowDialog();

            if (result == true)
            {
                ShowMainWindow(mainModel);
            }
            else
            {
                Close();
            }
        }
Beispiel #20
0
        public void Synchronize()
        {
            SynchronizationLocalizator synchronizationLocalizator = MainModel.Localization.CurrentLanguage.Synchronization;

            if (MainModel.DatabaseMetadata.NonFictionFirstImportComplete != true)
            {
                ShowMessage(synchronizationLocalizator.ErrorMessageTitle, synchronizationLocalizator.ImportRequired);
                return;
            }
            if (MainModel.AppSettings.Mirrors.NonFictionSynchronizationMirrorName == null)
            {
                ShowMessage(synchronizationLocalizator.ErrorMessageTitle, synchronizationLocalizator.NoSynchronizationMirror);
                return;
            }
            if (MainModel.AppSettings.Network.OfflineMode)
            {
                if (ShowPrompt(synchronizationLocalizator.OfflineModePromptTitle, synchronizationLocalizator.OfflineModePromptText))
                {
                    MainModel.AppSettings.Network.OfflineMode = false;
                    MainModel.SaveSettings();
                }
                else
                {
                    return;
                }
            }
            SynchronizationWindowViewModel synchronizationWindowViewModel = new SynchronizationWindowViewModel(MainModel);
            IWindowContext synchronizationWindowContext = WindowManager.CreateWindow(RegisteredWindows.WindowKey.SYNCHRONIZATION_WINDOW, synchronizationWindowViewModel, CurrentWindowContext);

            synchronizationWindowContext.ShowDialog();
            if (IsDefaultSearchTabVisible)
            {
                DefaultSearchTabViewModel.SetFocus();
            }
            else
            {
                if (SelectedTabViewModel is SearchTabViewModel searchTabViewModel)
                {
                    searchTabViewModel.SetFocus();
                }
            }
        }
Beispiel #21
0
        public void Synchronize()
        {
            if (mainModel.NonFictionBookCount == 0)
            {
                MessageBoxWindow.ShowMessage("Ошибка", @"Перед синхронизацией списка нехудожественной литературы необходимо выполнить импорт из дампа базы данных (пункт ""Импорт"" в меню).", CurrentWindowContext);
                return;
            }
            if (mainModel.AppSettings.Mirrors.NonFictionSynchronizationMirrorName == null)
            {
                MessageBoxWindow.ShowMessage("Ошибка", @"Не выбрано зеркало для синхронизации списка нехудожественной литературы.", CurrentWindowContext);
                return;
            }
            if (mainModel.AppSettings.Network.OfflineMode)
            {
                if (MessageBoxWindow.ShowPrompt("Автономный режим", "Синхронизация невозможна при включенном автономном режиме. Выключить автономный режим?", CurrentWindowContext))
                {
                    mainModel.AppSettings.Network.OfflineMode = false;
                    mainModel.SaveSettings();
                }
                else
                {
                    return;
                }
            }
            SynchronizationWindowViewModel synchronizationWindowViewModel = new SynchronizationWindowViewModel(mainModel);
            IWindowContext synchronizationWindowContext = WindowManager.CreateWindow(RegisteredWindows.WindowKey.SYNCHRONIZATION_WINDOW, synchronizationWindowViewModel, CurrentWindowContext);

            synchronizationWindowContext.ShowDialog();
            if (IsDefaultSearchTabVisible)
            {
                DefaultSearchTabViewModel.SetFocus();
            }
            else
            {
                if (SelectedTabViewModel is SearchTabViewModel searchTabViewModel)
                {
                    searchTabViewModel.SetFocus();
                }
            }
        }
Beispiel #22
0
        private void Import()
        {
            ImportLocalizator importLocalizator = MainModel.Localization.CurrentLanguage.Import;
            StringBuilder     filterBuilder     = new StringBuilder();

            filterBuilder.Append(importLocalizator.AllSupportedFiles);
            filterBuilder.Append("|*.sql;*zip;*.rar;*.gz;*.7z|");
            filterBuilder.Append(importLocalizator.SqlDumps);
            filterBuilder.Append(" (*.sql)|*.sql|");
            filterBuilder.Append(importLocalizator.Archives);
            filterBuilder.Append(" (*.zip, *.rar, *.gz, *.7z)|*zip;*.rar;*.gz;*.7z|");
            filterBuilder.Append(importLocalizator.AllFiles);
            filterBuilder.Append(" (*.*)|*.*");
            OpenFileDialogParameters selectSqlDumpFileDialogParameters = new OpenFileDialogParameters
            {
                DialogTitle = importLocalizator.BrowseImportFileDialogTitle,
                Filter      = filterBuilder.ToString(),
                Multiselect = false
            };
            OpenFileDialogResult selectSqlDumpFileDialogResult = WindowManager.ShowOpenFileDialog(selectSqlDumpFileDialogParameters);

            if (selectSqlDumpFileDialogResult.DialogResult)
            {
                ImportWindowViewModel importWindowViewModel = new ImportWindowViewModel(MainModel, selectSqlDumpFileDialogResult.SelectedFilePaths.First());
                IWindowContext        importWindowContext   = WindowManager.CreateWindow(RegisteredWindows.WindowKey.IMPORT_WINDOW, importWindowViewModel, CurrentWindowContext);
                importWindowContext.ShowDialog();
                if (IsDefaultSearchTabVisible)
                {
                    DefaultSearchTabViewModel.Refresh(setFocus: true);
                }
                else
                {
                    foreach (SearchTabViewModel searchTabViewModel in TabViewModels.OfType <SearchTabViewModel>())
                    {
                        searchTabViewModel.Refresh(setFocus: searchTabViewModel == SelectedTabViewModel);
                    }
                }
            }
        }
Beispiel #23
0
 private void ShowErrorWindow(Exception exception)
 {
     if (!Dispatcher.CheckAccess())
     {
         Dispatcher.Invoke(() => ShowErrorWindow(exception));
     }
     else
     {
         Logger.Exception(exception);
         try
         {
             ErrorWindowViewModel errorWindowViewModel = new ErrorWindowViewModel(exception?.ToString() ?? "(null)",
                                                                                  mainModel?.Localization?.CurrentLanguage);
             IWindowContext errorWindowContext = WindowManager.CreateWindow(RegisteredWindows.WindowKey.ERROR_WINDOW, errorWindowViewModel);
             errorWindowContext.ShowDialog();
         }
         catch (Exception errorWindowException)
         {
             Logger.Exception(errorWindowException);
         }
     }
 }
Beispiel #24
0
        protected override async void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            SetupExceptionHandlers();
            try
            {
                mainModel = new MainModel();
                string databaseFilePath = mainModel.AppSettings.DatabaseFileName;
                bool   saveDatabaseFilePathAfterSuccessfulOpen    = false;
                MainModel.OpenDatabaseOptions openDatabaseOptions = MainModel.OpenDatabaseOptions.NONE;
                DatabaseOpenResult            databaseOpenResult  = DatabaseOpenResult.IN_PROGRESS;
                while (databaseOpenResult == DatabaseOpenResult.IN_PROGRESS)
                {
                    MainModel.DatabaseStatus databaseStatus = await mainModel.OpenDatabase(databaseFilePath, openDatabaseOptions);

                    if (databaseStatus == MainModel.DatabaseStatus.OPENED)
                    {
                        databaseOpenResult = DatabaseOpenResult.DATABASE_OPENED;
                        if (saveDatabaseFilePathAfterSuccessfulOpen)
                        {
                            mainModel.AppSettings.DatabaseFileName = MainModel.GetDatabaseNormalizedPath(databaseFilePath);
                            mainModel.SaveSettings();
                        }
                    }
                    else if (databaseStatus == MainModel.DatabaseStatus.NOT_SET)
                    {
                        databaseOpenResult = DatabaseOpenResult.SHOW_SETUP_WIZARD;
                    }
                    else
                    {
                        DatabaseErrorWindowViewModel.OptionSet optionSet;
                        switch (databaseStatus)
                        {
                        case MainModel.DatabaseStatus.NOT_FOUND:
                            optionSet = DatabaseErrorWindowViewModel.OptionSet.DATABASE_NOT_FOUND;
                            break;

                        case MainModel.DatabaseStatus.POSSIBLE_DUMP_FILE:
                            optionSet = DatabaseErrorWindowViewModel.OptionSet.DATABASE_DUMP_FILE;
                            break;

                        case MainModel.DatabaseStatus.OLD_FICTION_SCHEMA:
                            optionSet = DatabaseErrorWindowViewModel.OptionSet.OLD_FICTION_SCHEMA;
                            break;

                        case MainModel.DatabaseStatus.CORRUPTED:
                            optionSet = DatabaseErrorWindowViewModel.OptionSet.DATABASE_NOT_VALID;
                            break;

                        case MainModel.DatabaseStatus.SERVER_DATABASE:
                            optionSet = DatabaseErrorWindowViewModel.OptionSet.SERVER_DATABASE;
                            break;

                        default:
                            throw new Exception($"Unknown database status: {databaseStatus}.");
                        }
                        DatabaseErrorWindowViewModel databaseErrorWindowViewModel = new DatabaseErrorWindowViewModel(mainModel, optionSet, databaseFilePath);
                        IWindowContext windowContext = WindowManager.CreateWindow(RegisteredWindows.WindowKey.DATABASE_ERROR_WINDOW,
                                                                                  databaseErrorWindowViewModel);
                        windowContext.ShowDialog();
                        switch (databaseErrorWindowViewModel.Result)
                        {
                        case DatabaseErrorWindowViewModel.DatabaseErrorWindowResult.OPEN_ANOTHER_DATABASE:
                            OpenFileDialogResult selectDatabaseFileDialogResult = DatabaseWindowViewModel.SelectDatabaseFile(mainModel);
                            if (selectDatabaseFileDialogResult.DialogResult)
                            {
                                databaseFilePath = selectDatabaseFileDialogResult.SelectedFilePaths.First();
                                saveDatabaseFilePathAfterSuccessfulOpen = true;
                            }
                            break;

                        case DatabaseErrorWindowViewModel.DatabaseErrorWindowResult.START_SETUP_WIZARD:
                            databaseOpenResult = DatabaseOpenResult.SHOW_SETUP_WIZARD;
                            break;

                        case DatabaseErrorWindowViewModel.DatabaseErrorWindowResult.DELETE_FICTION:
                            openDatabaseOptions = MainModel.OpenDatabaseOptions.MIGRATE_FICTION;
                            break;

                        case DatabaseErrorWindowViewModel.DatabaseErrorWindowResult.EXIT:
                        case DatabaseErrorWindowViewModel.DatabaseErrorWindowResult.CANCEL:
                            databaseOpenResult = DatabaseOpenResult.EXIT_REQUESTED;
                            break;

                        default:
                            throw new Exception($"Unknown database error view model result: {databaseErrorWindowViewModel.Result}.");
                        }
                    }
                }
                switch (databaseOpenResult)
                {
                case DatabaseOpenResult.DATABASE_OPENED:
                    ShowMainWindow(mainModel);
                    break;

                case DatabaseOpenResult.SHOW_SETUP_WIZARD:
                    ShowSetupWizardWindow(mainModel);
                    break;

                default:
                    Close();
                    break;
                }
            }
            catch (Exception exception)
            {
                Logger.EnableLogging();
                ShowErrorWindow(exception);
                Close();
            }
        }