Add User edit

This commit is contained in:
2021-01-25 21:08:38 +01:00
parent e42974886d
commit 2a74c047dd
3 changed files with 203 additions and 1 deletions

View File

@@ -94,6 +94,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Views\DataDisplay.cs" />
<Compile Include="Views\EditUserDisplay.cs" />
<Compile Include="Views\EntryDialog.cs" />
<Compile Include="Views\FingerprintDialog.cs" />
<Compile Include="Program.cs" />

201
Views/EditUserDisplay.cs Normal file
View File

@@ -0,0 +1,201 @@
using Akari.Provider.WaveshareUART.Users;
using NStack;
using System;
using System.Linq;
using System.Threading.Tasks;
using Terminal.Gui;
using WaveshareUARTFingerprintSensor;
namespace Akari.Provider.WaveshareUART.Views
{
public class EditUserDisplay : Toplevel
{
public UsersManager UsersManager => WaveshareUARTProvider.Instance.UsersManager;
public FingerprintSensor FingerprintSensor => WaveshareUARTProvider.Instance.FingerprintSensor;
private readonly User _user;
private Label _infoLabel;
private Label _fingerprintsCountLabel;
private Label _startLabel;
public EditUserDisplay(User user)
{
_user = user;
Init();
}
private void Init()
{
Modal = true;
ColorScheme = Colors.Error;
// Creates the top-level window to show
var win = new Window("Manage Users")
{
X = 0,
Y = 0,
// By using Dim.Fill(), it will automatically resize without manual intervention
Width = Dim.Fill(),
Height = Dim.Fill()
};
win.ColorScheme = Colors.ColorSchemes["Dialog"];
Add(win);
// Window Content
_infoLabel = new Label($"Name: {_user.Name}")
{
X = 2,
Y = 1,
Width = Dim.Fill()
};
_startLabel = new Label($"First ID: {_user.Start}")
{
X = Pos.Left(_infoLabel),
Y = Pos.Bottom(_infoLabel),
Width = Dim.Fill()
};
_fingerprintsCountLabel = new Label($"Fingerprints: {_user.Count}")
{
X = Pos.Left(_startLabel),
Y = Pos.Bottom(_startLabel),
Width = Dim.Fill()
};
var addButton = new Button("_Add Fingerprint")
{
X = Pos.Right(this) - 69,
Y = Pos.Bottom(this) - 3
};
addButton.Clicked += AddButton_Clicked;
var editTokenButton = new Button("Edit Token")
{
X = Pos.Right(addButton) + 1,
Y = Pos.Top(addButton)
};
editTokenButton.Clicked += EditTokenButton_Clicked;
var clearButton = new Button("Clear Fingerprints")
{
X = Pos.Right(editTokenButton) + 1,
Y = Pos.Top(editTokenButton)
};
clearButton.Clicked += ClearButton_Clicked;
var quitButton = new Button("_Quit")
{
X = Pos.Right(clearButton) + 1,
Y = Pos.Top(clearButton)
};
quitButton.Clicked += () => { Application.RequestStop(); };
win.Add(_infoLabel, _startLabel, _fingerprintsCountLabel, addButton, editTokenButton, clearButton, quitButton);
}
private void UpdateCount()
{
_fingerprintsCountLabel.Text = $"Fingerprints: {_user.Count}";
}
private void AddButton_Clicked()
{
if (_user.IsFull())
{
MessageBox.ErrorQuery("Add Fingerprint", "Can't add more fingerprints to this user", "Ok");
return;
}
var dialog = new FingerprintDialog("Add Fingerprint", "Can't add fingerprint, try to place your finger flat on the sensor");
Task.Run(() =>
{
// In case an external program messed with the fingerprints
FingerprintSensor.DeleteUser(_user.Position);
switch (FingerprintSensor.AddFingerprint(_user.Position, UserPermission.Level1))
{
case ResponseType.Success:
dialog.Cancel();
lock (_user)
{
Console.WriteLine(_user.IncrementPosition());
}
Application.MainLoop.Invoke(() => MessageBox.Query("Add Fingerprint", "Successfully added fingerprint", "Ok"));
break;
case ResponseType.Full:
dialog.ErrorMessage = "Sensor full, can't add more users";
dialog.CancelAndShowError();
break;
case ResponseType.NoUser:
dialog.ErrorMessage = "Can't add fingerprint, invalid id";
dialog.CancelAndShowError();
break;
case ResponseType.FingerOccupied:
dialog.ErrorMessage = "Can't add fingerprint, finger already registered";
dialog.CancelAndShowError();
break;
case ResponseType.UserOccupied:
dialog.ErrorMessage = "Can't add fingerprint, id already used";
dialog.CancelAndShowError();
break;
default:
dialog.CancelAndShowError();
break;
}
});
dialog.Show();
UsersManager.Save();
UpdateCount();
}
private void EditTokenButton_Clicked()
{
if (new EntryDialog("Edit Token", s => !string.IsNullOrWhiteSpace(s.ToString()), "Token cannot be empty").TryShow(out ustring input))
{
_user.Token = input.ToString();
UsersManager.Save();
}
}
private void ClearButton_Clicked()
{
if (MessageBox.Query("Delete Users", "Do you really to clear all the user fingerprints?", "yes", "No") != 0)
{
return;
}
for (ushort i = _user.Start; i < _user.Position; i++)
{
FingerprintSensor.DeleteUser(i);
}
_user.ResetPosition();
UsersManager.Save();
UpdateCount();
}
}
}

View File

@@ -89,7 +89,7 @@ namespace Akari.Provider.WaveshareUART.Views
private void ListView_OpenSelectedItem(ListViewItemEventArgs item)
{
Application.Run(new EditUserDisplay((User)item.Value));
}
private void AddButton_Clicked()