using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; namespace ClawdDotNet.Desktop.ViewModels; /// Eingabe eines Lizenzschlüssels. Siehe AvaloniaLicensePrompt. public sealed partial class LicenseViewModel : ViewModelBase { private readonly TaskCompletionSource _completion = new(); [ObservableProperty] private string _key; public string HardwareId { get; } /// Warum der bisherige Schlüssel nicht taugt; leer beim ersten Fragen. public string Problem { get; } /// Der eingegebene Schlüssel, oder null bei Abbruch. public Task Result => _completion.Task; public LicenseViewModel(string hardwareId, string? problem, string? currentKey) { HardwareId = hardwareId; Problem = problem ?? ""; _key = currentKey ?? ""; } [RelayCommand] private void Confirm() { var value = Key.Trim(); // Leere Eingabe ist kein Abbruch — sonst schließt sich das Fenster, wenn jemand // versehentlich die Eingabetaste drückt. if (value.Length == 0) return; _completion.TrySetResult(value); } [RelayCommand] private void Cancel() => _completion.TrySetResult(null); /// Schließt der Benutzer das Fenster, gilt das als Abbruch. public void CancelIfPending() => _completion.TrySetResult(null); }