Files
NebulaLauncher/Nebula.Launcher/Views/Popup/TfaView.axaml.cs
2025-07-02 21:32:51 +03:00

92 lines
2.2 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Interactivity;
using Nebula.Launcher.ViewModels.Popup;
namespace Nebula.Launcher.Views.Popup;
public partial class TfaView : UserControl
{
public List<TextBox> Boxes = new();
public TfaView()
{
InitializeComponent();
foreach (var textBox in TContainer.Children.Select(UnzipBox))
{
var currIndex = Boxes.Count;
Boxes.Add(textBox);
textBox.TextChanged += (_,_) => OnTextChanged(currIndex);
textBox.PastingFromClipboard += OnPasteFromClipboard;
textBox.KeyUp += (sender, args) =>
{
if (args.Key == Key.Back && string.IsNullOrEmpty(textBox.Text)) OnTextChanged(currIndex);
};
textBox.KeyDown += (sender, args) =>
{
textBox.Text = args.KeySymbol;
textBox.SelectionStart = 1;
//OnTextChanged(currIndex);
};
}
}
private void OnPasteFromClipboard(object? sender, RoutedEventArgs e)
{
// TODO: CLIPBOARD THINK
}
private void OnTextChanged(int index)
{
var box = Boxes[index];
if (string.IsNullOrEmpty(box.Text))
{
if(index == 0) return;
index--;
}
else
{
if(!int.TryParse(box.Text, out var _))
{
box.Text = "";
return;
}
if (index == 5)
{
CheckupCode();
return;
}
index++;
}
Boxes[index].Focus();
}
private void CheckupCode()
{
var str = "";
foreach (var vtTextBox in Boxes)
{
if(string.IsNullOrEmpty(vtTextBox.Text)) return;
str += vtTextBox.Text;
}
((TfaViewModel)DataContext!).OnTfaEnter(str);
}
private TextBox UnzipBox(Control control)
{
var box = (Border)control;
return (TextBox)box.Child!;
}
private void Button_OnClick(object? sender, RoutedEventArgs e)
{
CheckupCode();
}
}