This commit is contained in:
Yongkang Zhang 2025-04-10 11:22:48 +02:00
parent 0041872afd
commit 3e9d887a12
3 changed files with 65 additions and 48 deletions

View File

@ -2,7 +2,7 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:PrototypWPFHAG"
StartupUri="MainWindow.xaml">
StartupUri="SearchWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>

View File

@ -50,6 +50,8 @@
<Grid Background="Transparent" AllowDrop="True"
DragEnter="PdfDropCanvas_DragEnter" Drop="PdfDropCanvas_Drop" Margin="0,0,9,0">
<!-- Hinweistext und ggf. Vorschau (zunächst unsichtbar) -->
<Button Grid.Column="0" Content="Wähle PDF aus" Background="LightBlue" Click="ChoosePdfButton_Click"
Margin="296,-2,-15,0"/>
<TextBlock x:Name="DropHintText" Text="PDF hier rein ziehen"
Foreground="Gray" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5"/>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5,30,0,0">

View File

@ -32,6 +32,7 @@ namespace PrototypWPFHAG
private readonly PdfServiceClient _pdfServiceClient = new();
private const string BaseUrl = "http://localhost:8000"; // Microservice-URL
private string _selectedPdfPath;
private List<string> _selectedPdfPaths = new List<string>();
public SearchWindow()
{
InitializeComponent();
@ -150,6 +151,7 @@ namespace PrototypWPFHAG
}
}
private async Task SearchBySimilarityAsync()
{
try
@ -191,18 +193,39 @@ namespace PrototypWPFHAG
e.Handled = true;
}
private void ChoosePdfButton_Click(object sender, RoutedEventArgs e)
{
var openFileDialog = new Microsoft.Win32.OpenFileDialog
{
Filter = "PDF Files (*.pdf)|*.pdf",
Multiselect = true
};
if (openFileDialog.ShowDialog() == true)
{
_selectedPdfPaths.AddRange(openFileDialog.FileNames);
PdfIcon.Visibility = Visibility.Visible;
PdfFileNameText.Text = string.Join(", ", _selectedPdfPaths.Select(System.IO.Path.GetFileName));
PdfFileNameText.Visibility = Visibility.Visible;
DropHintText.Visibility = Visibility.Collapsed;
}
}
private void PdfDropCanvas_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
_selectedPdfPath = files.FirstOrDefault(f => System.IO.Path.GetExtension(f).Equals(".pdf", StringComparison.OrdinalIgnoreCase));
var pdfFiles = files.Where(f => System.IO.Path.GetExtension(f).Equals(".pdf", StringComparison.OrdinalIgnoreCase)).ToList();
if (_selectedPdfPath != null)
if (pdfFiles.Any())
{
// Vorschau anzeigen
_selectedPdfPaths.AddRange(pdfFiles);
// 更新UI以显示所有文件
PdfIcon.Visibility = Visibility.Visible;
PdfFileNameText.Text = System.IO.Path.GetFileName(_selectedPdfPath);
PdfFileNameText.Text = string.Join(", ", _selectedPdfPaths.Select(System.IO.Path.GetFileName));
PdfFileNameText.Visibility = Visibility.Visible;
DropHintText.Visibility = Visibility.Collapsed;
}
@ -262,7 +285,7 @@ namespace PrototypWPFHAG
private async void UploadButton_Click(object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(_selectedPdfPath))
if (!_selectedPdfPaths.Any())
{
MessageBox.Show("Keine PDF ausgewählt!");
return;
@ -275,54 +298,46 @@ namespace PrototypWPFHAG
try
{
using (var httpClient = new HttpClient())
using (var fileStream = File.OpenRead(_selectedPdfPath))
int totalFiles = _selectedPdfPaths.Count;
int currentFile = 0;
foreach (var pdfPath in _selectedPdfPaths)
{
var progress = new Progress<float>(percent =>
currentFile++;
UploadStatusText.Text = $"Upload {currentFile}/{totalFiles}: {System.IO.Path.GetFileName(pdfPath)}";
using (var httpClient = new HttpClient())
using (var fileStream = File.OpenRead(pdfPath))
{
Dispatcher.Invoke(() =>
var content = new StreamContent(fileStream);
var formData = new MultipartFormDataContent();
formData.Add(content, "file", System.IO.Path.GetFileName(pdfPath));
var response = await httpClient.PostAsync($"{BaseUrl}/upload-pdf", formData);
if (response.IsSuccessStatusCode)
{
UploadProgressBar.Value = percent * 100;
UploadStatusText.Text = $"Upload: {(int)(percent * 100)}%";
});
});
var content = new StreamContent(fileStream);
var formData = new MultipartFormDataContent();
formData.Add(content, "file", Path.GetFileName(_selectedPdfPath));
// Simulierter Fortschritt
for (int i = 0; i <= 100; i += 10)
{
await Task.Delay(100);
((IProgress<float>)progress).Report(i / 100f);
}
var response = await httpClient.PostAsync($"{BaseUrl}/upload-pdf", formData);
if (response.IsSuccessStatusCode)
{
// Erfolgsmeldung anzeigen
UploadStatusText.Text = "Erfolgreich hochgeladen!";
// Canvas zurücksetzen
Dispatcher.Invoke(() =>
UploadStatusText.Text = $"Erfolgreich hochgeladen: {System.IO.Path.GetFileName(pdfPath)}";
}
else
{
PdfIcon.Visibility = Visibility.Collapsed;
PdfFileNameText.Visibility = Visibility.Collapsed;
DropHintText.Visibility = Visibility.Visible;
_selectedPdfPath = null;
});
// Erfolgsmeldung nach 3 Sekunden ausblenden
await Task.Delay(3000);
UploadStatusText.Text = string.Empty;
}
else
{
UploadStatusText.Text = "Fehler beim Upload";
UploadStatusText.Text = $"Fehler beim Upload von {System.IO.Path.GetFileName(pdfPath)}";
}
}
}
// Canvas zurücksetzen
Dispatcher.Invoke(() =>
{
PdfIcon.Visibility = Visibility.Collapsed;
PdfFileNameText.Visibility = Visibility.Collapsed;
DropHintText.Visibility = Visibility.Visible;
_selectedPdfPaths.Clear();
});
// Erfolgsmeldung nach 3 Sekunden ausblenden
await Task.Delay(3000);
UploadStatusText.Text = string.Empty;
}
catch (Exception ex)
{