예제 #1
0
		public MessageResult ShowMessage( ViewModelBase model, string title=null, string msg=null ) {

			MessageBoxWindow win = new MessageBoxWindow();

			bool? result = win.ShowMessage( title, msg );
			if( result == null ) {
				return MessageResult.Cancel;
			} else if( result == true ) {
				return MessageResult.Accept;
			}
			return MessageResult.Cancel;
			

		} //
예제 #2
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();
                }
            }
        }
예제 #3
0
        private async void Export()
        {
            string directory = GetDirectoryPath(correctPath: false);

            if (directory == null)
            {
                MessageBoxWindow.ShowMessage("Ошибка", "Указанный путь файла для экспорта некорректен.", parentWindowContext);
                return;
            }
            if (!Directory.Exists(directory))
            {
                MessageBoxWindow.ShowMessage("Ошибка", $"Директория {directory} не существует.", parentWindowContext);
                return;
            }
            string fileNameWithoutExtension = GetFileNameWithoutExtension(correctFileName: false);

            if (fileNameWithoutExtension == null)
            {
                MessageBoxWindow.ShowMessage("Ошибка", "Указанное имя файла для экспорта некорректно.", parentWindowContext);
                return;
            }
            string fileExtension = GetFileExtension();

            if (File.Exists(FilePathTemplate) && !MessageBoxWindow.ShowPrompt("Перезаписать файл?", $"Файл {FilePathTemplate} существует. Вы действительно хотите перезаписать его?", parentWindowContext))
            {
                return;
            }
            int?searchResultLimit = isNoLimitSelected ? (int?)null : mainModel.AppSettings.Search.MaximumResultCount;
            Progress <ExportProgress> exportProgressHandler = new Progress <ExportProgress>(HandleExportProgress);

            cancellationTokenSource = new CancellationTokenSource();
            CancellationToken cancellationToken = cancellationTokenSource.Token;
            Func <MainModel, Task <ExportResult> > exportTask = null;

            if (IsXlsxSelected)
            {
                switch (libgenObjectType)
                {
                case LibgenObjectType.NON_FICTION_BOOK:
                    exportTask = mainModel => mainModel.ExportNonFictionToXlsxAsync(Path.Combine(directory, fileNameWithoutExtension), fileExtension,
                                                                                    searchQuery, searchResultLimit, exportProgressHandler, cancellationToken);
                    break;

                case LibgenObjectType.FICTION_BOOK:
                    exportTask = mainModel => mainModel.ExportFictionToXlsxAsync(Path.Combine(directory, fileNameWithoutExtension), fileExtension,
                                                                                 searchQuery, searchResultLimit, exportProgressHandler, cancellationToken);
                    break;

                case LibgenObjectType.SCIMAG_ARTICLE:
                    exportTask = mainModel => mainModel.ExportSciMagToXlsxAsync(Path.Combine(directory, fileNameWithoutExtension), fileExtension,
                                                                                searchQuery, searchResultLimit, exportProgressHandler, cancellationToken);
                    break;
                }
            }
            else
            {
                char separator;
                if (IsCommaSeparatorSelected)
                {
                    separator = ',';
                }
                else if (IsSemicolonSeparatorSelected)
                {
                    separator = ';';
                }
                else
                {
                    separator = '\t';
                }
                switch (libgenObjectType)
                {
                case LibgenObjectType.NON_FICTION_BOOK:
                    exportTask = mainModel => mainModel.ExportNonFictionToCsvAsync(Path.Combine(directory, fileNameWithoutExtension), fileExtension,
                                                                                   separator, searchQuery, searchResultLimit, exportProgressHandler, cancellationToken);
                    break;

                case LibgenObjectType.FICTION_BOOK:
                    exportTask = mainModel => mainModel.ExportFictionToCsvAsync(Path.Combine(directory, fileNameWithoutExtension), fileExtension,
                                                                                separator, searchQuery, searchResultLimit, exportProgressHandler, cancellationToken);
                    break;

                case LibgenObjectType.SCIMAG_ARTICLE:
                    exportTask = mainModel => mainModel.ExportSciMagToCsvAsync(Path.Combine(directory, fileNameWithoutExtension), fileExtension,
                                                                               separator, searchQuery, searchResultLimit, exportProgressHandler, cancellationToken);
                    break;
                }
            }
            if (exportTask == null)
            {
                throw new Exception("Export task is null.");
            }
            UpdateProgressStatus(null, 0, 0);
            IsSettingsPanelVisible        = false;
            IsProgressPanelVisible        = true;
            AreExportResultButtonsVisible = false;
            CancelExportButtonText        = "ПРЕРВАТЬ";
            IsCancelExportButtonEnabled   = true;
            IsCancelExportButtonVisible   = true;
            SaveSettings();
            bool error = false;

            exportResult = null;
            try
            {
                exportResult = await exportTask(mainModel);
            }
            catch (Exception exception)
            {
                ShowErrorWindow(exception, parentWindowContext);
                error = true;
            }
            IsCancelExportButtonVisible = false;
            if (!error)
            {
                if (exportResult.IsExportCancelled && exportResult.ItemsExported == 0)
                {
                    IsSettingsPanelVisible = true;
                    IsProgressPanelVisible = false;
                }
                else
                {
                    string status = null;
                    if (exportResult.IsExportCancelled || exportResult.IsRowsPerFileLimitReached)
                    {
                        status = "Экспорт прерван.";
                    }
                    UpdateProgressStatus(status, exportResult.ItemsExported, exportResult.FilesCreated);
                    if (exportResult.IsRowsPerFileLimitReached)
                    {
                        MessageBoxWindow.ShowMessage("Предел количества строк",
                                                     "Достигнут предел количества строк, допустимый для записи в файл Microsoft Excel. Дальнейший экспорт невозможен. " +
                                                     @"Для экспорта большего числа строк включите опцию ""Делить на несколько файлов"" в настройках программы.", parentWindowContext);
                    }
                    AreExportResultButtonsVisible = true;
                    IsShowResultButtonVisible     = exportResult.ItemsExported > 0 && exportResult.FirstFilePath != null;
                    if (IsShowResultButtonVisible && mainModel.AppSettings.Export.OpenResultsAfterExport && !exportResult.IsExportCancelled &&
                        !exportResult.IsRowsPerFileLimitReached)
                    {
                        ShowResult();
                    }
                }
            }
            else
            {
                ProgressStatus = "Экспорт завершился с ошибкой.";
                AreExportResultButtonsVisible = true;
                IsShowResultButtonVisible     = false;
            }
        }
예제 #4
0
 private void OkButtonClick()
 {
     if (IsCreateDatabaseSelected)
     {
         SaveFileDialogParameters saveFileDialogParameters = new SaveFileDialogParameters
         {
             DialogTitle     = "Сохранение новой базы данных",
             Filter          = "Базы данных (*.db)|*.db|Все файлы (*.*)|*.*",
             OverwritePrompt = true
         };
         if (eventType == EventType.DATABASE_CORRUPTED)
         {
             string databaseFilePath = mainModel.GetDatabaseFullPath(mainModel.AppSettings.DatabaseFileName);
             saveFileDialogParameters.InitialDirectory = Path.GetDirectoryName(databaseFilePath);
             saveFileDialogParameters.InitialFileName  = Path.GetFileName(databaseFilePath);
         }
         else
         {
             saveFileDialogParameters.InitialDirectory = Environment.AppDataDirectory;
             saveFileDialogParameters.InitialFileName  = Constants.DEFAULT_DATABASE_FILE_NAME;
         }
         SaveFileDialogResult saveFileDialogResult = WindowManager.ShowSaveFileDialog(saveFileDialogParameters);
         if (saveFileDialogResult.DialogResult)
         {
             if (mainModel.CreateDatabase(saveFileDialogResult.SelectedFilePath))
             {
                 mainModel.AppSettings.DatabaseFileName = mainModel.GetDatabaseNormalizedPath(saveFileDialogResult.SelectedFilePath);
                 mainModel.SaveSettings();
                 CurrentWindowContext.CloseDialog(true);
             }
             else
             {
                 MessageBoxWindow.ShowMessage("Ошибка", "Не удалось создать базу данных.", CurrentWindowContext);
             }
         }
     }
     else
     {
         OpenFileDialogParameters openFileDialogParameters = new OpenFileDialogParameters
         {
             DialogTitle = "Выбор базы данных",
             Filter      = "Базы данных (*.db)|*.db|Все файлы (*.*)|*.*",
             Multiselect = false
         };
         OpenFileDialogResult openFileDialogResult = WindowManager.ShowOpenFileDialog(openFileDialogParameters);
         if (openFileDialogResult.DialogResult)
         {
             string databaseFilePath = openFileDialogResult.SelectedFilePaths.First();
             if (mainModel.OpenDatabase(databaseFilePath))
             {
                 mainModel.AppSettings.DatabaseFileName = mainModel.GetDatabaseNormalizedPath(databaseFilePath);
                 mainModel.SaveSettings();
                 CurrentWindowContext.CloseDialog(true);
             }
             else
             {
                 UpdateHeaderAndEventType(Path.GetFileName(databaseFilePath));
                 NotifyPropertyChanged(nameof(Header));
             }
         }
     }
 }
예제 #5
0
 public void ShowMessage(string title, string text, string ok, IWindowContext parentWindowContext)
 {
     MessageBoxWindow.ShowMessage(title, text, ok, parentWindowContext);
 }