Compare commits

..

4 Commits

Author SHA1 Message Date
4b8cd2a0d7 Bump version to 1.0.0.4
All checks were successful
Test / Run tests (push) Successful in 1m40s
Deploy / Build and Deploy (push) Successful in 1m45s
2025-09-01 22:03:46 +02:00
104798d4f2 DeliveryAdminWindow: Enable WineQualityLevelInput in Übernahme
All checks were successful
Test / Run tests (push) Successful in 2m14s
2025-09-01 21:55:22 +02:00
4653a4f129 LogWindow: Improve loading time
All checks were successful
Test / Run tests (push) Successful in 1m46s
2025-08-20 16:33:25 +02:00
07f9a0f522 Utils: Fix thread error when sending emails
All checks were successful
Test / Run tests (push) Successful in 2m27s
2025-08-19 15:42:47 +02:00
5 changed files with 53 additions and 36 deletions

View File

@@ -2,6 +2,23 @@
Changelog Changelog
========= =========
[v1.0.0.4][v1.0.0.4] (2025-09-01) {#v1.0.0.4}
---------------------------------------------
### Behobene Fehler {#v1.0.0.4-bugfixes}
* Absturz beim Verschicken von einzelnen E-Mails außerhalb des Rundschreiben-Fensters (`MailWindow`) behoben. (07f9a0f522)
### Sonstiges {#v1.0.0.4-misc}
* Ladezeit des Fehler-Protokoll-Fensters (`LogWindow`) verbessert. (4653a4f129)
* Im Übernahme-Fenster (`DeliveryAdminWindow`) ist es nun möglich die Qualitätsstufe zu verändern. (104798d4f2)
[v1.0.0.4]: https://git.necronda.net/winzer/elwig/releases/tag/v1.0.0.4
[v1.0.0.3][v1.0.0.3] (2025-08-11) {#v1.0.0.3} [v1.0.0.3][v1.0.0.3] (2025-08-11) {#v1.0.0.3}
--------------------------------------------- ---------------------------------------------

View File

@@ -7,7 +7,7 @@
<UseWPF>true</UseWPF> <UseWPF>true</UseWPF>
<PreserveCompilationContext>true</PreserveCompilationContext> <PreserveCompilationContext>true</PreserveCompilationContext>
<ApplicationIcon>Resources\Images\Elwig.ico</ApplicationIcon> <ApplicationIcon>Resources\Images\Elwig.ico</ApplicationIcon>
<Version>1.0.0.3</Version> <Version>1.0.0.4</Version>
<SatelliteResourceLanguages>de-AT</SatelliteResourceLanguages> <SatelliteResourceLanguages>de-AT</SatelliteResourceLanguages>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<ApplicationManifest>app.manifest</ApplicationManifest> <ApplicationManifest>app.manifest</ApplicationManifest>

View File

@@ -498,10 +498,7 @@ namespace Elwig.Helpers {
public static async Task<bool> SendEmail(Member member, string subject, string text, IEnumerable<Document> docs) { public static async Task<bool> SendEmail(Member member, string subject, string text, IEnumerable<Document> docs) {
if (App.Config.Smtp == null) if (App.Config.Smtp == null)
return false; return false;
return await Task.Run(async () => {
Mouse.OverrideCursor = Cursors.Wait;
var success = await Task.Run(async () => {
SmtpClient? client = null; SmtpClient? client = null;
try { try {
client = await GetSmtpClient(); client = await GetSmtpClient();
@@ -529,18 +526,15 @@ namespace Elwig.Helpers {
} }
return true; return true;
}); });
Mouse.OverrideCursor = null;
return success;
} }
public static async Task ExportDocument(Document doc, ExportMode mode, string? filename = null, (Member, string, string)? emailData = null) { public static async Task ExportDocument(Document doc, ExportMode mode, string? filename = null, (Member Member, string Subject, string Text)? emailData = null) {
if (mode == ExportMode.Print && !App.Config.Debug) { if (mode == ExportMode.Print && !App.Config.Debug) {
await doc.Generate(); await doc.Generate();
await doc.Print(); await doc.Print();
} else if (mode == ExportMode.Email && emailData is (Member, string, string) e) { } else if (mode == ExportMode.Email && emailData is (Member, string, string) e) {
await doc.Generate(); await doc.Generate();
var success = await SendEmail(e.Item1, e.Item2, e.Item3, [doc]); var success = await SendEmail(e.Member, e.Subject, e.Text, [doc]);
if (success) if (success)
MessageBox.Show("Die E-Mail wurde erfolgreich verschickt!", "E-Mail verschickt", MessageBox.Show("Die E-Mail wurde erfolgreich verschickt!", "E-Mail verschickt",
MessageBoxButton.OK, MessageBoxImage.Information); MessageBoxButton.OK, MessageBoxImage.Information);
@@ -567,9 +561,7 @@ namespace Elwig.Helpers {
Log = "Application", Log = "Application",
Source = ".NET Runtime", Source = ".NET Runtime",
}; };
return log.Entries.Cast<EventLogEntry>() return [.. log.Entries.OfType<EventLogEntry>().Where(e => e.InstanceId == 1026).Where(e => e.Message.StartsWith("Application: Elwig.exe"))];
.Where(e => e.Message.StartsWith("Application: Elwig.exe"))
.ToList();
} }
public static int GetEntityIdetifierForPk(params object?[] primaryKey) { public static int GetEntityIdetifierForPk(params object?[] primaryKey) {

View File

@@ -350,7 +350,7 @@ namespace Elwig.Windows {
ViewModel.IsGebunden = null; ViewModel.IsGebunden = null;
InitialDefaultInputs(); InitialDefaultInputs();
WineQualityLevelInput.IsEnabled = false; //WineQualityLevelInput.IsEnabled = false; // disable wine quality level input in Übernahme
ValidateRequiredInputs(); ValidateRequiredInputs();
} }

View File

@@ -1,7 +1,9 @@
using Elwig.Helpers; using Elwig.Helpers;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Input;
namespace Elwig.Windows { namespace Elwig.Windows {
public partial class LogWindow : Window { public partial class LogWindow : Window {
@@ -11,28 +13,34 @@ namespace Elwig.Windows {
WindowState = WindowState.Maximized; WindowState = WindowState.Maximized;
} }
private void Window_Loaded(object sender, RoutedEventArgs evt) { private async void Window_Loaded(object sender, RoutedEventArgs evt) {
var log = Utils.GetLogEntries(); Mouse.OverrideCursor = Cursors.Wait;
EventList.ItemsSource = log await Task.Run(async () => {
.Select(e => new { var list = Utils.GetLogEntries()
Event = e, .Select(e => new {
Lines = e.Message.Split('\n').ToArray(), Event = e,
}) Lines = e.Message.Split('\n').ToArray(),
.Select(e => new { })
e.Event, .Select(e => new {
Exception = e.Lines.FirstOrDefault(l => l.StartsWith("Exception Info: "))?[16..].Trim().Split(':', 2), e.Event,
Location = e.Lines.FirstOrDefault(l => l.StartsWith(" at Elwig."))?[5..].Trim(), Exception = e.Lines.FirstOrDefault(l => l.StartsWith("Exception Info: "))?[16..].Trim().Split(':', 2),
}) Location = e.Lines.FirstOrDefault(l => l.StartsWith(" at Elwig."))?[5..].Trim(),
.Select(e => new { })
e.Event, .Select(e => new {
e.Exception, e.Event,
ExceptionName = e.Exception?[0].Trim(), e.Exception,
ExceptionMessage = e.Exception?.Length >= 2 ? e.Exception?[1].Trim() : null, ExceptionName = e.Exception?[0].Trim(),
e.Location, ExceptionMessage = e.Exception?.Length >= 2 ? e.Exception?[1].Trim() : null,
}) e.Location,
.OrderByDescending(e => e.Event.TimeGenerated) })
.ToList(); .OrderByDescending(e => e.Event.TimeGenerated)
EventList.SelectedIndex = 0; .ToList();
await App.MainDispatcher.BeginInvoke(() => {
EventList.ItemsSource = list;
EventList.SelectedIndex = 0;
});
});
Mouse.OverrideCursor = null;
} }
private void EventList_SelectionChanged(object sender, RoutedEventArgs evt) { private void EventList_SelectionChanged(object sender, RoutedEventArgs evt) {