Beachte die Einstellung ob Projekte und Gemeinden aktiv sind. Verbiete Änderungen an der Freistellung, wenn sie genehmigt wurde. Vereinfache das Speichern der Einstellungen Bessere Fehlerbehandlung, einheitlichere API
151 lines
5.4 KiB
C#
151 lines
5.4 KiB
C#
using Jugenddienst_Stunden.Models;
|
||
using ZXing.Net.Maui;
|
||
using Jugenddienst_Stunden.Types;
|
||
|
||
namespace Jugenddienst_Stunden.Views;
|
||
|
||
/// <summary>
|
||
/// Die Loginseite mit dem Barcodescanner
|
||
/// </summary>
|
||
public partial class LoginPage : ContentPage {
|
||
|
||
private DateTime _lastDetectionTime;
|
||
private readonly TimeSpan _detectionInterval = TimeSpan.FromSeconds(5);
|
||
|
||
|
||
|
||
/// <summary>
|
||
/// CTOR
|
||
/// </summary>
|
||
public LoginPage() {
|
||
InitializeComponent();
|
||
|
||
|
||
barcodeScannerView.Options = new BarcodeReaderOptions {
|
||
Formats = BarcodeFormat.QrCode,
|
||
AutoRotate = true,
|
||
Multiple = false
|
||
};
|
||
|
||
//if (BindingContext is LoginViewModel vm) {
|
||
// vm.AlertEvent += Vm_AlertEvent;
|
||
// vm.InfoEvent += Vm_InfoEvent;
|
||
// vm.MsgEvent += Vm_MsgEvent;
|
||
//}
|
||
}
|
||
|
||
|
||
|
||
private void BarcodesDetected(object sender, BarcodeDetectionEventArgs e) {
|
||
|
||
var currentTime = DateTime.Now;
|
||
if ((currentTime - _lastDetectionTime) > _detectionInterval) {
|
||
_lastDetectionTime = currentTime;
|
||
foreach (var barcode in e.Results) {
|
||
if (GlobalVar.ApiKey != barcode.Value) {
|
||
_ = MainThread.InvokeOnMainThreadAsync(async () => {
|
||
//await DisplayAlert("Barcode erkannt", $"Barcode: {barcode.Format} - {barcode.Value}", "OK");
|
||
|
||
try {
|
||
var tokendata = new TokenData(barcode.Value);
|
||
GlobalVar.ApiUrl = tokendata.Url;
|
||
User user = await HoursBase.LoadUser(barcode.Value);
|
||
|
||
GlobalVar.ApiKey = barcode.Value;
|
||
GlobalVar.Name = user.Name;
|
||
GlobalVar.Surname = user.Surname;
|
||
GlobalVar.EmployeeId = user.Id;
|
||
|
||
Title = user.Name + " " + user.Surname;
|
||
ServerLabel.Text = "Server: " + tokendata.Url.Replace("/appapi", "").Replace("https://", "").Replace("http://", "");
|
||
|
||
//Preferences.Default.Set("apiKey", barcode.Value);
|
||
//Preferences.Default.Set("name", op.name);
|
||
//Preferences.Default.Set("surname", op.surname);
|
||
//Preferences.Default.Set("EmployeeId", int.Parse(op.id));
|
||
|
||
await DisplayAlert("Login erfolgreich", user.Name + " " + user.Surname, "OK");
|
||
if (Navigation.NavigationStack.Count > 1)
|
||
await Navigation.PopAsync();
|
||
|
||
} catch (Exception e) {
|
||
await DisplayAlert("Fehler", e.Message, "OK");
|
||
}
|
||
|
||
});
|
||
} else {
|
||
MainThread.InvokeOnMainThreadAsync(() => {
|
||
DisplayAlert("Bereits eingeloggt",
|
||
Preferences.Default.Get("name", "") + " " + Preferences.Default.Get("surname", ""),
|
||
"OK");
|
||
});
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
protected override void OnDisappearing() {
|
||
base.OnDisappearing();
|
||
|
||
barcodeScannerView.CameraLocation = CameraLocation.Front;
|
||
barcodeScannerView.IsDetecting = false;
|
||
|
||
}
|
||
|
||
protected override void OnAppearing() {
|
||
base.OnAppearing();
|
||
|
||
barcodeScannerView.IsDetecting = true;
|
||
barcodeScannerView.CameraLocation = CameraLocation.Rear;
|
||
|
||
}
|
||
|
||
public bool IsCameraAvailable() {
|
||
var status = Permissions.CheckStatusAsync<Permissions.Camera>().Result;
|
||
if (status != PermissionStatus.Granted) {
|
||
status = Permissions.RequestAsync<Permissions.Camera>().Result;
|
||
}
|
||
return status != PermissionStatus.Granted;
|
||
}
|
||
|
||
private async void OnLoginButtonClicked(object sender, EventArgs e) {
|
||
var username = UsernameEntry.Text;
|
||
var password = PasswordEntry.Text;
|
||
var server = ServerEntry.Text;
|
||
|
||
if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(server)) {
|
||
await DisplayAlert("Fehler", "Bitte alle Felder ausf<73>llen", "OK");
|
||
return;
|
||
}
|
||
try {
|
||
Types.User response = await BaseFunc.AuthUserPass(username, password, server);
|
||
|
||
GlobalVar.ApiKey = response.Token;
|
||
GlobalVar.Name = response.Name;
|
||
GlobalVar.Surname = response.Surname;
|
||
GlobalVar.EmployeeId = response.Id;
|
||
GlobalVar.ApiUrl = server;
|
||
|
||
Title = response.Name + " " + response.Surname;
|
||
ServerLabel.Text = "Server: " + server.Replace("/appapi", "").Replace("https://", "").Replace("http://", "");
|
||
|
||
await DisplayAlert("Login erfolgreich", response.Name + " " + response.Surname, "OK");
|
||
if (Navigation.NavigationStack.Count > 1)
|
||
await Navigation.PopAsync();
|
||
} catch (Exception ex) {
|
||
await DisplayAlert("Fehler", ex.Message, "OK");
|
||
}
|
||
}
|
||
|
||
//private void Vm_AlertEvent(object? sender, string e) {
|
||
// DisplayAlert("Fehler:", e, "OK");
|
||
//}
|
||
//private void Vm_InfoEvent(object? sender, string e) {
|
||
// DisplayAlert("Information:", e, "OK");
|
||
//}
|
||
//private async Task Vm_MsgEvent(string title, string message) {
|
||
// await DisplayAlert(title, message, "OK");
|
||
//}
|
||
}
|