Добавьте файлы проекта.

This commit is contained in:
Курнат Андрей
2026-04-04 10:52:30 +03:00
parent 9b34a92f15
commit 5a55bc5f4c
30 changed files with 3446 additions and 0 deletions

188
MainWindow.xaml.cs Normal file
View File

@@ -0,0 +1,188 @@
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);
}
}
}