public override async void OnNextButtonClick()
 {
     if (IsCreateNewDatabaseSelected)
     {
         SharedSetupContext.SelectedDatabaseOperation = SharedSetupContext.DatabaseOperation.CREATE_DATABASE;
         base.OnNextButtonClick();
         MoveToPage(SetupWizardStep.DOWNLOAD_MODE);
     }
     else
     {
         if (await DatabaseWindowViewModel.OpenDatabase(MainModel, SetupWizardWindowContext))
         {
             SharedSetupContext.SelectedDatabaseOperation = SharedSetupContext.DatabaseOperation.OPEN_DATABASE;
             SharedSetupContext.IsDatabaseCreated         = false;
             base.OnNextButtonClick();
             MoveToPage(SetupWizardStep.CONFIRMATION);
         }
     }
 }
Exemplo n.º 2
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();
            }
        }