using Avalonia.Controls; using Avalonia.Input; using LehrerApp.Desktop.ViewModels; using LehrerApp.Sync; namespace LehrerApp.Desktop.Views; public partial class MainWindow : Window { private static readonly TimeSpan FinalSyncDelay = TimeSpan.FromMilliseconds(350); private SyncEngine? _syncEngine; private bool _finalSyncStarted; private bool _closeAfterFinalSync; public MainWindow() { InitializeComponent(); PointerMoved += (_, _) => NotifyActivity(); PointerPressed += (_, _) => NotifyActivity(); KeyDown += (_, _) => NotifyActivity(); } public void EnableFinalSync(SyncEngine syncEngine) { _syncEngine = syncEngine; Closing += OnClosing; } private async void OnClosing(object? sender, WindowClosingEventArgs e) { if (_closeAfterFinalSync || _finalSyncStarted || _syncEngine is null) return; e.Cancel = true; _finalSyncStarted = true; await _syncEngine.SyncBeforeShutdownAsync(FinalSyncDelay); _closeAfterFinalSync = true; Close(); } private void NotifyActivity() { if (DataContext is MainWindowViewModel vm) vm.AppLock.NotifyActivity(); } private void OnLockScreenKeyDown(object? sender, KeyEventArgs e) { if (e.Key == Key.Enter && DataContext is MainWindowViewModel vm) vm.AppLock.UnlockCommand.Execute(null); } }