52 lines
1.4 KiB
C#
52 lines
1.4 KiB
C#
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);
|
|
}
|
|
}
|