< Summary

Information
Class: LOCKnet.App.ViewModels.TutorialStep
Assembly: LOCKnet.App
File(s): /home/runner/work/LOCKnet/LOCKnet/src/LOCKnet.App/ViewModels/TutorialViewModel.cs
Line coverage
100%
Covered lines: 1
Uncovered lines: 0
Coverable lines: 1
Total lines: 93
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_Title()100%11100%

File(s)

/home/runner/work/LOCKnet/LOCKnet/src/LOCKnet.App/ViewModels/TutorialViewModel.cs

#LineLine coverage
 1using CommunityToolkit.Mvvm.ComponentModel;
 2using CommunityToolkit.Mvvm.Input;
 3
 4namespace LOCKnet.App.ViewModels;
 5
 6/// <summary>
 7/// ViewModel für die Tutorial-/Hilfe-Ansicht.
 8/// </summary>
 9public partial class TutorialViewModel : ViewModelBase
 10{
 11  public event EventHandler? Closed;
 12
 13  [ObservableProperty]
 14  private int _currentStep;
 15
 16  public TutorialStep[] Steps { get; } =
 17  [
 18    new(
 19      "🔒 Willkommen bei LOCKnet",
 20      "LOCKnet ist dein persönlicher, vollständig offline arbeitender Passwortmanager. " +
 21      "Alle Daten liegen verschlüsselt auf deinem USB-Stick — keine Cloud, keine externen Server.",
 22      "1 / 5"),
 23    new(
 24      "🔑 Master-Passwort",
 25      "Beim ersten Start richtest du ein Master-Passwort ein. " +
 26      "Dieses Passwort schützt alle deine Zugangsdaten. " +
 27      "Wähle ein starkes Passwort und bewahre es sicher auf — es gibt keine Wiederherstellung.",
 28      "2 / 5"),
 29    new(
 30      "➕ Neuen Eintrag anlegen",
 31      "Klicke auf \"+ Neu\" in der oberen Leiste, um einen neuen Eintrag zu erstellen. " +
 32      "Trage Titel, Benutzernamen, Passwort, URL und optionale Notizen ein. " +
 33      "Mit 🙈/👁️ kannst du das Passwort ein- und ausblenden.",
 34      "3 / 5"),
 35    new(
 36      "📋 Eintrag verwenden",
 37      "Klicke auf einen Eintrag in der Liste, um ihn auszuwählen. " +
 38      "Dann kannst du das Passwort mit \"📋 Passwort kopieren\" in die Zwischenablage kopieren. " +
 39      "Das Passwort wird nach 30 Sekunden automatisch aus der Zwischenablage gelöscht.",
 40      "4 / 5"),
 41    new(
 42      "🛡️ Sicherheitshinweise",
 43      "• LOCKnet sperrt sich nach 60 Sekunden Inaktivität automatisch.\n" +
 44      "• Klicke auf \"🔒 Sperren\" um die App sofort zu sperren.\n" +
 45      "• Trenne den USB-Stick niemals während des Betriebs.\n" +
 46      "• Erstelle regelmäßig eine Sicherungskopie des Sticks.",
 47      "5 / 5"),
 48  ];
 49
 50  public TutorialStep CurrentStepData => Steps[CurrentStep];
 51  public bool CanGoBack => CurrentStep > 0;
 52  public bool CanGoForward => CurrentStep < Steps.Length - 1;
 53  public bool IsLastStep => CurrentStep == Steps.Length - 1;
 54
 55  [RelayCommand(CanExecute = nameof(CanGoBack))]
 56  private void Back()
 57  {
 58    if (CurrentStep > 0)
 59    {
 60      CurrentStep--;
 61      OnPropertyChanged(nameof(CurrentStepData));
 62      OnPropertyChanged(nameof(CanGoBack));
 63      OnPropertyChanged(nameof(CanGoForward));
 64      OnPropertyChanged(nameof(IsLastStep));
 65      BackCommand.NotifyCanExecuteChanged();
 66      ForwardCommand.NotifyCanExecuteChanged();
 67    }
 68  }
 69
 70  [RelayCommand(CanExecute = nameof(CanGoForward))]
 71  private void Forward()
 72  {
 73    if (CurrentStep < Steps.Length - 1)
 74    {
 75      CurrentStep++;
 76      OnPropertyChanged(nameof(CurrentStepData));
 77      OnPropertyChanged(nameof(CanGoBack));
 78      OnPropertyChanged(nameof(CanGoForward));
 79      OnPropertyChanged(nameof(IsLastStep));
 80      BackCommand.NotifyCanExecuteChanged();
 81      ForwardCommand.NotifyCanExecuteChanged();
 82    }
 83  }
 84
 85  [RelayCommand]
 86  private void Close() => Closed?.Invoke(this, EventArgs.Empty);
 87}
 88
 89/// <summary>Ein einzelner Tutorial-Schritt.</summary>
 90/// <param name="Title">Überschrift des Schritts.</param>
 91/// <param name="Content">Erklärungstext.</param>
 92/// <param name="StepLabel">Fortschrittsanzeige z.B. "1 / 5".</param>
 1593public record TutorialStep(string Title, string Content, string StepLabel);

Methods/Properties

get_Title()