[#50] MailWindow: Add button to cancel document generation
Some checks failed
Test / Run tests (push) Has been cancelled
Some checks failed
Test / Run tests (push) Has been cancelled
This commit is contained in:
@@ -13,6 +13,7 @@ using System.Collections.ObjectModel;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
@@ -61,6 +62,8 @@ namespace Elwig.Windows {
|
||||
protected Dictionary<Member, List<Document>>? PrintMemberDocuments;
|
||||
protected Dictionary<Member, List<Document>>? EmailDocuments;
|
||||
|
||||
private CancellationTokenSource? CancelGeneration;
|
||||
|
||||
public static readonly DependencyProperty PostalAllCountProperty = DependencyProperty.Register(nameof(PostalAllCount), typeof(int), typeof(MailWindow));
|
||||
public int PostalAllCount {
|
||||
get => (int)GetValue(PostalAllCountProperty);
|
||||
@@ -594,20 +597,32 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
private void Window_Closed(object sender, EventArgs evt) {
|
||||
CancelGeneration?.Dispose();
|
||||
DisposeDocs();
|
||||
}
|
||||
|
||||
private async void AbortButton_Click(object sender, RoutedEventArgs evt) {
|
||||
AbortButton.IsEnabled = false;
|
||||
CancelGeneration?.Cancel();
|
||||
}
|
||||
|
||||
private async void GenerateButton_Click(object sender, RoutedEventArgs evt) {
|
||||
LockInputs();
|
||||
PreviewButton.IsEnabled = false;
|
||||
PrintButton.IsEnabled = false;
|
||||
EmailButton.IsEnabled = false;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
AbortButton.IsEnabled = true;
|
||||
AbortButton.Visibility = Visibility.Visible;
|
||||
GenerateButton.IsEnabled = false;
|
||||
GenerateButton.Visibility = Visibility.Hidden;
|
||||
|
||||
DisposeDocs();
|
||||
await UpdateClientParameters();
|
||||
|
||||
CancelGeneration?.Dispose();
|
||||
CancelGeneration = new();
|
||||
|
||||
using var ctx = new AppDbContext();
|
||||
|
||||
var doublePaged = DoublePagedInput.IsChecked == true;
|
||||
@@ -662,6 +677,9 @@ namespace Elwig.Windows {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
UnlockInputs();
|
||||
GenerateButton.IsEnabled = true;
|
||||
GenerateButton.Visibility = Visibility.Visible;
|
||||
AbortButton.IsEnabled = false;
|
||||
AbortButton.Visibility = Visibility.Hidden;
|
||||
Mouse.OverrideCursor = null;
|
||||
return;
|
||||
}
|
||||
@@ -679,6 +697,9 @@ namespace Elwig.Windows {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
UnlockInputs();
|
||||
GenerateButton.IsEnabled = true;
|
||||
GenerateButton.Visibility = Visibility.Visible;
|
||||
AbortButton.IsEnabled = false;
|
||||
AbortButton.Visibility = Visibility.Hidden;
|
||||
Mouse.OverrideCursor = null;
|
||||
return;
|
||||
}
|
||||
@@ -740,6 +761,9 @@ namespace Elwig.Windows {
|
||||
if (res != MessageBoxResult.OK) {
|
||||
UnlockInputs();
|
||||
GenerateButton.IsEnabled = true;
|
||||
GenerateButton.Visibility = Visibility.Visible;
|
||||
AbortButton.IsEnabled = false;
|
||||
AbortButton.Visibility = Visibility.Hidden;
|
||||
Mouse.OverrideCursor = null;
|
||||
return;
|
||||
}
|
||||
@@ -771,7 +795,7 @@ namespace Elwig.Windows {
|
||||
try {
|
||||
foreach (var item1 in email.Select((e, i) => new { Index = i, e.Key, e.Value })) {
|
||||
foreach (var item2 in item1.Value.Select((d, i) => new { Index = i, Doc = d })) {
|
||||
await item2.Doc.Generate(new Progress<double>(v => {
|
||||
await item2.Doc.Generate(CancelGeneration.Token, new Progress<double>(v => {
|
||||
ProgressBar.Value = v * (item2.Index + 1) / item1.Value.Count / totalNum + 100.0 * item1.Index / totalNum;
|
||||
}));
|
||||
}
|
||||
@@ -780,6 +804,9 @@ namespace Elwig.Windows {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
UnlockInputs();
|
||||
GenerateButton.IsEnabled = true;
|
||||
GenerateButton.Visibility = Visibility.Visible;
|
||||
AbortButton.IsEnabled = false;
|
||||
AbortButton.Visibility = Visibility.Hidden;
|
||||
Mouse.OverrideCursor = null;
|
||||
return;
|
||||
}
|
||||
@@ -814,7 +841,7 @@ namespace Elwig.Windows {
|
||||
try {
|
||||
var print = Document.Merge(printDocs);
|
||||
print.IsDoublePaged = doublePaged;
|
||||
await print.Generate(new Progress<double>(v => {
|
||||
await print.Generate(CancelGeneration.Token, new Progress<double>(v => {
|
||||
ProgressBar.Value = 100.0 * emailNum / totalNum + v * printNum / totalNum;
|
||||
}));
|
||||
PrintDocument = print;
|
||||
@@ -823,6 +850,9 @@ namespace Elwig.Windows {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
UnlockInputs();
|
||||
GenerateButton.IsEnabled = true;
|
||||
GenerateButton.Visibility = Visibility.Visible;
|
||||
AbortButton.IsEnabled = false;
|
||||
AbortButton.Visibility = Visibility.Hidden;
|
||||
Mouse.OverrideCursor = null;
|
||||
return;
|
||||
}
|
||||
@@ -834,6 +864,9 @@ namespace Elwig.Windows {
|
||||
|
||||
UnlockInputs();
|
||||
GenerateButton.IsEnabled = true;
|
||||
GenerateButton.Visibility = Visibility.Visible;
|
||||
AbortButton.IsEnabled = false;
|
||||
AbortButton.Visibility = Visibility.Hidden;
|
||||
Mouse.OverrideCursor = null;
|
||||
PreviewButton.IsEnabled = true;
|
||||
PrintButton.IsEnabled = PrintDocument != null && !hasPreviewDocs;
|
||||
|
||||
Reference in New Issue
Block a user