Exemple #1
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();
                }
            }
        }
Exemple #2
0
        private void SettingsEditNoteButton_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            var item = MainDataGrid.SelectedItems
                       .Cast <UserSetting>()
                       .FirstOrDefault();

            if (item == null)
            {
                return;
            }
            var note = item.Comment ?? "";
            var form = new MessageBoxWindow();

            form.MessageTextBox.MaxLength = 1024;
            form.MessageTextBox.Text      = note;
            var result = form.ShowPrompt(note, "X360CE - Edit Note");

            if (result == MessageBoxResult.OK)
            {
                item.Comment = form.MessageTextBox.Text.Trim();
                UpdateNoteLabel();
            }
        }
Exemple #3
0
 public bool ShowPrompt(string title, string text, string yes, string no, IWindowContext parentWindowContext)
 {
     return(MessageBoxWindow.ShowPrompt(title, text, yes, no, parentWindowContext));
 }
        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;
            }
        }
 private bool WindowClosing()
 {
     return(!settingsChanged || MessageBoxWindow.ShowPrompt("Отменить изменения?", "Настройки были изменены. Вы действительно хотите отменить сделанные изменения?", CurrentWindowContext));
 }