189 lines
5.6 KiB
C#
189 lines
5.6 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Input;
|
|
using CRAWLER.Models;
|
|
using CRAWLER.Services;
|
|
using CRAWLER.ViewModels;
|
|
|
|
namespace CRAWLER;
|
|
|
|
public partial class MainWindow : Window
|
|
{
|
|
private readonly IFilePickerService _filePickerService;
|
|
private readonly MainWindowViewModel _viewModel;
|
|
|
|
internal MainWindow(
|
|
InstrumentCatalogService catalogService,
|
|
IPdfOpener pdfOpener,
|
|
IFilePickerService filePickerService)
|
|
{
|
|
InitializeComponent();
|
|
_filePickerService = filePickerService;
|
|
_viewModel = new MainWindowViewModel(catalogService, pdfOpener);
|
|
DataContext = _viewModel;
|
|
}
|
|
|
|
private async void Window_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
await ExecuteUiAsync(_viewModel.InitializeAsync);
|
|
}
|
|
|
|
private async void RefreshButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
await ExecuteUiAsync(() => _viewModel.RefreshAsync());
|
|
}
|
|
|
|
private async void SyncButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
await ExecuteUiAsync(async () =>
|
|
{
|
|
var result = await _viewModel.SyncAsync();
|
|
MessageBox.Show(
|
|
$"Обработано страниц: {result.PagesScanned}\n" +
|
|
$"Обработано записей: {result.ProcessedItems}\n" +
|
|
$"Добавлено: {result.AddedRecords}\n" +
|
|
$"Обновлено: {result.UpdatedRecords}\n" +
|
|
$"Пропущено страниц: {result.FailedPages}\n" +
|
|
$"Пропущено записей: {result.FailedItems}\n" +
|
|
$"Карточек без деталей: {result.SkippedDetailRequests}\n" +
|
|
$"Скачано PDF: {result.DownloadedPdfFiles}\n" +
|
|
$"Ошибок PDF: {result.FailedPdfFiles}",
|
|
"CRAWLER",
|
|
MessageBoxButton.OK,
|
|
MessageBoxImage.Information);
|
|
});
|
|
}
|
|
|
|
private async void AddButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var dialog = new Dialogs.EditInstrumentWindow(
|
|
new EditInstrumentWindowViewModel(_viewModel.CreateNewDraft(), true),
|
|
_filePickerService)
|
|
{
|
|
Owner = this
|
|
};
|
|
|
|
if (dialog.ShowDialog() == true)
|
|
{
|
|
await ExecuteUiAsync(() => _viewModel.SaveAsync(dialog.ViewModel.Draft, dialog.ViewModel.GetPendingPaths()));
|
|
}
|
|
}
|
|
|
|
private async void EditButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (_viewModel.SelectedInstrument == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var dialog = new Dialogs.EditInstrumentWindow(
|
|
new EditInstrumentWindowViewModel(_viewModel.CreateDraftFromSelected(), false),
|
|
_filePickerService)
|
|
{
|
|
Owner = this
|
|
};
|
|
|
|
if (dialog.ShowDialog() == true)
|
|
{
|
|
await ExecuteUiAsync(() => _viewModel.SaveAsync(dialog.ViewModel.Draft, dialog.ViewModel.GetPendingPaths()));
|
|
}
|
|
}
|
|
|
|
private async void DeleteButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (_viewModel.SelectedInstrument == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var answer = MessageBox.Show(
|
|
$"Удалить запись \"{_viewModel.SelectedInstrument.Name}\"?",
|
|
"CRAWLER",
|
|
MessageBoxButton.YesNo,
|
|
MessageBoxImage.Warning);
|
|
|
|
if (answer == MessageBoxResult.Yes)
|
|
{
|
|
await ExecuteUiAsync(_viewModel.DeleteSelectedAsync);
|
|
}
|
|
}
|
|
|
|
private async void AddPdfButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (_viewModel.SelectedInstrument == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var paths = _filePickerService.PickPdfFiles(true);
|
|
if (paths.Count == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
await ExecuteUiAsync(() => _viewModel.AddAttachmentsToSelectedAsync(paths));
|
|
}
|
|
|
|
private void OpenAttachmentButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
_viewModel.OpenAttachment(AttachmentGrid.SelectedItem as PdfAttachment);
|
|
}
|
|
|
|
private async void RemoveAttachmentButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var attachment = AttachmentGrid.SelectedItem as PdfAttachment;
|
|
if (attachment == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var answer = MessageBox.Show(
|
|
$"Удалить привязку к PDF \"{attachment.DisplayName}\"?",
|
|
"CRAWLER",
|
|
MessageBoxButton.YesNo,
|
|
MessageBoxImage.Warning);
|
|
|
|
if (answer == MessageBoxResult.Yes)
|
|
{
|
|
await ExecuteUiAsync(() => _viewModel.RemoveAttachmentAsync(attachment));
|
|
}
|
|
}
|
|
|
|
private void OpenSourceButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
_viewModel.OpenSourceUrl();
|
|
}
|
|
|
|
private async void InstrumentGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
|
|
{
|
|
if (_viewModel.SelectedInstrument != null)
|
|
{
|
|
EditButton_Click(sender, e);
|
|
}
|
|
|
|
await Task.CompletedTask;
|
|
}
|
|
|
|
private async void SearchTextBox_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.Key == Key.Enter)
|
|
{
|
|
e.Handled = true;
|
|
await ExecuteUiAsync(() => _viewModel.RefreshAsync());
|
|
}
|
|
}
|
|
|
|
private async Task ExecuteUiAsync(Func<Task> action)
|
|
{
|
|
try
|
|
{
|
|
await action();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message, "CRAWLER", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
}
|
|
}
|
|
}
|