[#57] MailWindow: Use Task.Run()
All checks were successful
Test / Run tests (push) Successful in 2m0s

This commit is contained in:
2025-07-08 00:19:00 +02:00
parent 6eaa928147
commit 8ff576257b

View File

@ -602,7 +602,7 @@ namespace Elwig.Windows {
PreviewButton.IsEnabled = false; PreviewButton.IsEnabled = false;
PrintButton.IsEnabled = false; PrintButton.IsEnabled = false;
EmailButton.IsEnabled = false; EmailButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.Wait;
GenerateButton.IsEnabled = false; GenerateButton.IsEnabled = false;
DisposeDocs(); DisposeDocs();
@ -828,25 +828,27 @@ namespace Elwig.Windows {
EmailButton.IsEnabled = EmailDocuments != null && App.Config.Smtp != null; EmailButton.IsEnabled = EmailDocuments != null && App.Config.Smtp != null;
} }
private void PreviewButton_Click(object sender, RoutedEventArgs evt) { private async void PreviewButton_Click(object sender, RoutedEventArgs evt) {
var d = new OpenFolderDialog() { var d = new OpenFolderDialog() {
Title = "Ordner auswählen - Elwig", Title = "Ordner auswählen - Elwig",
}; };
if (d.ShowDialog() == true) { if (d.ShowDialog() == true) {
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.Wait;
PrintDocument?.SaveTo($"{d.FolderName}/Print.pdf"); await Task.Run(() => {
if (EmailDocuments != null) { PrintDocument?.SaveTo($"{d.FolderName}/Print.pdf");
foreach (var (m, docs) in EmailDocuments) { if (EmailDocuments != null) {
var folder = $"{d.FolderName}/E-Mail/{m.AdministrativeName.Trim()}"; foreach (var (m, docs) in EmailDocuments) {
Directory.CreateDirectory(folder); var folder = $"{d.FolderName}/E-Mail/{m.AdministrativeName.Trim()}";
foreach (var item in docs.Select((d, i) => new { Index = i, Doc = d })) { Directory.CreateDirectory(folder);
var doc = item.Doc; foreach (var item in docs.Select((d, i) => new { Index = i, Doc = d })) {
var name = Utils.NormalizeFileName(doc.Title); var doc = item.Doc;
doc.SaveTo($"{folder}/{item.Index + 1:00}.{name}.pdf"); var name = Utils.NormalizeFileName(doc.Title);
} doc.SaveTo($"{folder}/{item.Index + 1:00}.{name}.pdf");
}
}
} }
} });
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
Process.Start("explorer.exe", d.FolderName); Process.Start("explorer.exe", d.FolderName);
} }
@ -862,20 +864,22 @@ namespace Elwig.Windows {
var res = MessageBox.Show($"Sollen {PrintDocument.Pages} Blätter ({PrintDocument.TotalPages} Seiten) gedruckt werden?", var res = MessageBox.Show($"Sollen {PrintDocument.Pages} Blätter ({PrintDocument.TotalPages} Seiten) gedruckt werden?",
"Rundschreiben drucken", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No); "Rundschreiben drucken", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
if (res == MessageBoxResult.Yes) { if (res == MessageBoxResult.Yes) {
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.Wait;
if (App.Config.Debug) { await Task.Run(async () => {
PrintDocument.Show(); if (App.Config.Debug) {
} else { PrintDocument.Show();
await PrintDocument.Print(); } else {
await Utils.AddSentMails( await PrintDocument.Print();
PrintMemberDocuments.Select(d => ( await Utils.AddSentMails(
"postal", d.Key.MgNr, d.Key.AdministrativeName, PrintMemberDocuments.Select(d => (
new string[] { d.Value.Select(d => (d as BusinessDocument)?.Address).FirstOrDefault(a => a != null) ?? d.Key.FullAddress }, "postal", d.Key.MgNr, d.Key.AdministrativeName,
d.Value.Select(d => d.Title).FirstOrDefault("Briefkopf"), new string[] { d.Value.Select(d => (d as BusinessDocument)?.Address).FirstOrDefault(a => a != null) ?? d.Key.FullAddress },
d.Value.Select(d => d.Title).ToArray() d.Value.Select(d => d.Title).FirstOrDefault("Briefkopf"),
)) d.Value.Select(d => d.Title).ToArray()
); ))
} );
}
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
@ -893,8 +897,8 @@ namespace Elwig.Windows {
SmtpClient? client = null; SmtpClient? client = null;
try { try {
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.Wait;
client = await Utils.GetSmtpClient(); client = await Task.Run(Utils.GetSmtpClient);
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
var res = MessageBox.Show($"Sollen {EmailDocuments.Count:N0} E-Mails verschickt werden?", var res = MessageBox.Show($"Sollen {EmailDocuments.Count:N0} E-Mails verschickt werden?",
@ -903,31 +907,33 @@ namespace Elwig.Windows {
return; return;
} }
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.Wait;
var subject = EmailSubjectInput.Text; var subject = EmailSubjectInput.Text;
var text = EmailBodyInput.Text; var text = EmailBodyInput.Text;
await Utils.AddSentMailBody(subject, text, EmailDocuments.Count); await Task.Run(async () => {
foreach (var (m, docs) in EmailDocuments) { await Utils.AddSentMailBody(subject, text, EmailDocuments.Count);
using var msg = new MimeMessage(); foreach (var (m, docs) in EmailDocuments) {
msg.From.Add(new MailboxAddress(App.Client.NameFull, App.Config.Smtp.Value.From)); using var msg = new MimeMessage();
msg.To.AddRange(m.EmailAddresses.OrderBy(a => a.Nr).Select(a => new MailboxAddress(m.AdministrativeName, a.Address))); msg.From.Add(new MailboxAddress(App.Client.NameFull, App.Config.Smtp.Value.From));
msg.Subject = subject; msg.To.AddRange(m.EmailAddresses.OrderBy(a => a.Nr).Select(a => new MailboxAddress(m.AdministrativeName, a.Address)));
var body = new Multipart("mixed") { msg.Subject = subject;
new TextPart("plain") { Text = text } var body = new Multipart("mixed") {
}; new TextPart("plain") { Text = text }
foreach (var doc in docs) { };
var name = Utils.NormalizeFileName(doc.Title); foreach (var doc in docs) {
body.Add(doc.AsEmailAttachment($"{name}.pdf")); var name = Utils.NormalizeFileName(doc.Title);
body.Add(doc.AsEmailAttachment($"{name}.pdf"));
}
msg.Body = body;
await client!.SendAsync(msg);
await Utils.AddSentMails([(
"email", m.MgNr, m.AdministrativeName,
m.EmailAddresses.OrderBy(a => a.Nr).Select(a => a.Address).ToArray(),
subject,
docs.Select(d => d.Title).ToArray()
)]);
} }
msg.Body = body; });
await client!.SendAsync(msg);
await Utils.AddSentMails([(
"email", m.MgNr, m.AdministrativeName,
m.EmailAddresses.OrderBy(a => a.Nr).Select(a => a.Address).ToArray(),
subject,
docs.Select(d => d.Title).ToArray()
)]);
}
MessageBox.Show("Erfolgreich alle E-Mails verschickt!", "Rundschreiben verschicken", MessageBoxButton.OK, MessageBoxImage.Information); MessageBox.Show("Erfolgreich alle E-Mails verschickt!", "Rundschreiben verschicken", MessageBoxButton.OK, MessageBoxImage.Information);
} catch (Exception exc) { } catch (Exception exc) {