From eaddf0c3cb328db534f5cfdcdb80144b552404de Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Mon, 17 Aug 2026 23:29:31 +0200 Subject: [PATCH] SyncService: Add distinction main/non-main device --- Elwig/Helpers/Config.cs | 2 ++ Elwig/Services/SyncService.cs | 13 +++++++++++-- Elwig/Windows/MainWindow.xaml.cs | 26 ++++++++++++++++++++++---- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/Elwig/Helpers/Config.cs b/Elwig/Helpers/Config.cs index fb7e3ca..c0afe05 100644 --- a/Elwig/Helpers/Config.cs +++ b/Elwig/Helpers/Config.cs @@ -50,6 +50,7 @@ namespace Elwig.Helpers { public string? SyncUrl = null; public string SyncUsername = ""; public string SyncPassword = ""; + public bool SyncMain = false; public string? SmtpHost = null; public int? SmtpPort = null; @@ -86,6 +87,7 @@ namespace Elwig.Helpers { SyncUrl = config["sync:url"]; SyncUsername = config["sync:username"] ?? ""; SyncPassword = config["sync:password"] ?? ""; + SyncMain = TrueValues.Contains(config["sync:main"]?.ToLower()); SmtpHost = config["smtp:host"]; SmtpPort = config["smtp:port"]?.All(char.IsAsciiDigit) == true && config["smtp:port"]?.Length > 0 ? int.Parse(config["smtp:port"]!) : null; diff --git a/Elwig/Services/SyncService.cs b/Elwig/Services/SyncService.cs index 10e8903..a906d15 100644 --- a/Elwig/Services/SyncService.cs +++ b/Elwig/Services/SyncService.cs @@ -214,7 +214,7 @@ namespace Elwig.Services { ]; } - public static async Task Download(string url, string username, string password) { + public static async Task Download(string url, string username, string password, bool confirmImports) { try { var import = await GetFilesToImport(url, username, password); var paths = new List(); @@ -226,7 +226,7 @@ namespace Elwig.Services { paths.Add(filename); } } - await ElwigData.Import(paths, ElwigData.ImportMode.FromBranches); + await ElwigData.Import(paths, confirmImports ? ElwigData.ImportMode.Interactively : ElwigData.ImportMode.FromBranches); } catch (HttpRequestException exc) { InteractionService.ShowException("Daten herunterladen", "Eventuell Internetverbindung prüfen!", exc); } catch (TaskCanceledException exc) { @@ -264,5 +264,14 @@ namespace Elwig.Services { return false; } } + + public static async Task ChangesAvailable(AppDbContext ctx, string url, string username, string password, int? year = null) { + try { + year ??= Utils.CurrentLastSeason; + return await ctx.Deliveries.Where(d => d.ZwstId == App.ZwstId && d.Year == year).Where(ChangedDeliveries).AnyAsync() || (Utils.HasInternetConnectivity() && (await GetFilesToImport(url, username, password)).Count > 0); + } catch { + return false; + } + } } } diff --git a/Elwig/Windows/MainWindow.xaml.cs b/Elwig/Windows/MainWindow.xaml.cs index c6138c1..1daa711 100644 --- a/Elwig/Windows/MainWindow.xaml.cs +++ b/Elwig/Windows/MainWindow.xaml.cs @@ -200,8 +200,13 @@ namespace Elwig.Windows { return; Mouse.OverrideCursor = Cursors.Wait; await Task.Run(async () => { - await SyncService.Download(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); - await SyncService.UploadModified(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); + if (App.Config.SyncMain) { + await SyncService.Download(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword, true); + await SyncService.UploadModified(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); + } else { + await SyncService.Download(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword, false); + await SyncService.UploadBranchDeliveries(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); + } }); Mouse.OverrideCursor = null; } @@ -211,7 +216,7 @@ namespace Elwig.Windows { return; Mouse.OverrideCursor = Cursors.Wait; await Task.Run(async () => { - await SyncService.Download(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); + await SyncService.Download(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword, App.Config.SyncMain); }); Mouse.OverrideCursor = null; } @@ -229,6 +234,10 @@ namespace Elwig.Windows { private async void Menu_Sync_UploadModified_Click(object sender, RoutedEventArgs evt) { if (App.Config.SyncUrl == null) return; + if (!App.Config.SyncMain) { + InteractionService.ShowInformation("Mitglieder und Lieferungen hochladen", "Hochladen nicht möglich: Dieses Gerät ist nicht das Hauptgerät!"); + return; + } Mouse.OverrideCursor = Cursors.Wait; await Task.Run(async () => { await SyncService.UploadModified(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); @@ -296,6 +305,11 @@ namespace Elwig.Windows { if (App.Config.SyncUrl == null) return; + if (!App.Config.SyncMain) { + InteractionService.ShowInformation("Datenbank hochladen", "Hochladen nicht möglich: Dieses Gerät ist nicht das Hauptgerät!"); + return; + } + if (!InteractionService.AskContinue("Datenbank hochladen", "Sind Sie wirklich sicher, dass Sie die Datenbank dieses\nGerätes hochladen möchten? Das sollte nur vom Hauptgerät aus passieren!")) return; @@ -367,7 +381,11 @@ namespace Elwig.Windows { await Task.Delay(delay); var ch = false; using (var ctx = new AppDbContext()) { - ch = await SyncService.ChangesAvailable(ctx, App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); + if (App.Config.SyncMain) { + ch = await SyncService.ChangesAvailable(ctx, App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); + } else { + ch = await SyncService.ChangesAvailable(ctx, App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword, default); + } } await App.MainDispatcher.BeginInvoke(() => { if (ch) {