From c305bc63b752660ce52ec25362befbdb4948e8c9 Mon Sep 17 00:00:00 2001 From: DaPi Date: Sun, 13 Oct 2024 12:28:41 +0200 Subject: [PATCH] Comments etc. --- Jugenddienst Stunden/Models/TokenData.cs | 21 ++++----- .../ViewModels/LoginViewModel.cs | 40 ++++++++++++++--- .../ViewModels/NotesViewModel.cs | 43 ++++++++++--------- Jugenddienst Stunden/Views/LoginPage.xaml.cs | 38 +++++++++++----- Jugenddienst Stunden/Views/StundePage.xaml.cs | 4 +- .../Views/StundenPage.xaml.cs | 25 +++++++++-- 6 files changed, 116 insertions(+), 55 deletions(-) diff --git a/Jugenddienst Stunden/Models/TokenData.cs b/Jugenddienst Stunden/Models/TokenData.cs index cf3bbdf..7688128 100644 --- a/Jugenddienst Stunden/Models/TokenData.cs +++ b/Jugenddienst Stunden/Models/TokenData.cs @@ -1,22 +1,19 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Text; -namespace Jugenddienst_Stunden.Models; +namespace Jugenddienst_Stunden.Models; + class TokenData { public string token { get; set; } public string apiKey { get; set; } public string url { get; set; } public string operator_id { get; set; } - public TokenData(string apiKey) { - string dat = Encoding.UTF8.GetString(System.Convert.FromBase64String(apiKey)); - this.token = dat.Split('|')[1]; ; - this.url = dat.Split('|')[2]; ; - this.operator_id = dat.Split('|')[0]; ; - this.apiKey = apiKey; + public TokenData(string ak) { + string dat = Encoding.UTF8.GetString(Convert.FromBase64String(ak)); + token = dat.Split('|')[1]; ; + url = dat.Split('|')[2]; ; + operator_id = dat.Split('|')[0]; ; + apiKey = ak; } } diff --git a/Jugenddienst Stunden/ViewModels/LoginViewModel.cs b/Jugenddienst Stunden/ViewModels/LoginViewModel.cs index a6c07eb..d9026f0 100644 --- a/Jugenddienst Stunden/ViewModels/LoginViewModel.cs +++ b/Jugenddienst Stunden/ViewModels/LoginViewModel.cs @@ -1,19 +1,45 @@ -using CommunityToolkit.Mvvm.Input; -using System.Windows.Input; -using Microsoft.Maui.Dispatching; -using CommunityToolkit.Mvvm.ComponentModel; -//using BarcodeScanning; +using CommunityToolkit.Mvvm.ComponentModel; -namespace Jugenddienst_Stunden.ViewModels; +namespace Jugenddienst_Stunden.ViewModels; + +/// +/// Die Loginseite +/// public class LoginViewModel { + /// + /// Name der Anwendung + /// public string AppTitle => AppInfo.Name; + + /// + /// Programmversion + /// public string Version => AppInfo.VersionString; + /// + /// Kurze Mitteilung für den Anwender + /// public string Message => "Scanne den QR-Code von deinem Benutzerprofil auf der Stundenseite."; - public string Server { get; set; } = "Server: " + Preferences.Default.Get("apiUrl","").Replace("/appapi","").Replace("https://","").Replace("http://",""); + /// + /// Genutzer Server für die API + /// + public string Server { get; set; } = "Server: " + Preferences.Default.Get("apiUrl", "").Replace("/appapi", "").Replace("https://", "").Replace("http://", ""); + + + /// + /// Titel der Seite - im Moment der aktuelle Anwender + /// public string Title { get; set; } = Preferences.Default.Get("name", "") + " " + Preferences.Default.Get("surname", ""); + + //public event EventHandler AlertEvent; + //public event EventHandler InfoEvent; + //public event Func MsgEvent; + + + + } diff --git a/Jugenddienst Stunden/ViewModels/NotesViewModel.cs b/Jugenddienst Stunden/ViewModels/NotesViewModel.cs index bd9808f..a154921 100644 --- a/Jugenddienst Stunden/ViewModels/NotesViewModel.cs +++ b/Jugenddienst Stunden/ViewModels/NotesViewModel.cs @@ -6,46 +6,49 @@ using System.Windows.Input; namespace Jugenddienst_Stunden.ViewModels; internal class NotesViewModel : IQueryAttributable { - public ObservableCollection AllNotes { get; } + public ObservableCollection AllNotes { get; } public ICommand NewCommand { get; } public ICommand SelectNoteCommand { get; } public NotesViewModel() { - AllNotes = new ObservableCollection(Models.Note.LoadAll().Select(n => new NoteViewModel(n))); + AllNotes = new ObservableCollection(Models.Note.LoadAll().Select(n => new NoteViewModel(n))); NewCommand = new AsyncRelayCommand(NewNoteAsync); - SelectNoteCommand = new AsyncRelayCommand(SelectNoteAsync); + SelectNoteCommand = new AsyncRelayCommand(SelectNoteAsync); } private async Task NewNoteAsync() { await Shell.Current.GoToAsync(nameof(Views.NotePage)); } - private async Task SelectNoteAsync(ViewModels.NoteViewModel note) { + private async Task SelectNoteAsync(NoteViewModel? note) { if (note != null) await Shell.Current.GoToAsync($"{nameof(Views.NotePage)}?load={note.Identifier}"); } void IQueryAttributable.ApplyQueryAttributes(IDictionary query) { if (query.ContainsKey("deleted")) { - string noteId = query["deleted"].ToString(); - NoteViewModel matchedNote = AllNotes.Where((n) => n.Identifier == noteId).FirstOrDefault(); + string? noteId = query["deleted"]?.ToString(); + if (noteId != null) { + NoteViewModel? matchedNote = AllNotes.Where((n) => n.Identifier == noteId).FirstOrDefault(); - // If note exists, delete it - if (matchedNote != null) - AllNotes.Remove(matchedNote); - } else if (query.ContainsKey("saved")) { - string noteId = query["saved"].ToString(); - NoteViewModel matchedNote = AllNotes.Where((n) => n.Identifier == noteId).FirstOrDefault(); - - // If note is found, update it - if (matchedNote != null) { - matchedNote.Reload(); - AllNotes.Move(AllNotes.IndexOf(matchedNote), 0); + // If note exists, delete it + if (matchedNote != null) + AllNotes.Remove(matchedNote); } + } else if (query.ContainsKey("saved")) { + string? noteId = query["saved"]?.ToString(); + if (noteId != null) { + NoteViewModel? matchedNote = AllNotes.FirstOrDefault((n) => n.Identifier == noteId); - // If note isn't found, it's new; add it. - else - AllNotes.Insert(0, new NoteViewModel(Note.Load(noteId))); + // If note is found, update it + if (matchedNote != null) { + matchedNote.Reload(); + AllNotes.Move(AllNotes.IndexOf(matchedNote), 0); + } + + // If note isn't found, it's new; add it. + else { AllNotes.Insert(0, new NoteViewModel(Note.Load(noteId))); } + } } } } diff --git a/Jugenddienst Stunden/Views/LoginPage.xaml.cs b/Jugenddienst Stunden/Views/LoginPage.xaml.cs index 588553c..e1541b6 100644 --- a/Jugenddienst Stunden/Views/LoginPage.xaml.cs +++ b/Jugenddienst Stunden/Views/LoginPage.xaml.cs @@ -1,3 +1,4 @@ +using System; using Jugenddienst_Stunden.Models; using Jugenddienst_Stunden.ViewModels; using Microsoft.Maui.Controls; @@ -6,15 +7,26 @@ using ZXing.Net.Maui; namespace Jugenddienst_Stunden.Views; +/// +/// Die Loginseite mit dem Barcodescanner +/// public partial class LoginPage : ContentPage { private DateTime _lastDetectionTime; private readonly TimeSpan _detectionInterval = TimeSpan.FromSeconds(5); - private readonly LoginViewModel _loginViewModel = new LoginViewModel(); + /// + /// CTOR + /// public LoginPage() { InitializeComponent(); + //if (BindingContext is LoginViewModel vm) { + // vm.AlertEvent += Vm_AlertEvent; + // vm.InfoEvent += Vm_InfoEvent; + // vm.MsgEvent += Vm_MsgEvent; + //} + barcodeScannerView.Options = new ZXing.Net.Maui.BarcodeReaderOptions { Formats = ZXing.Net.Maui.BarcodeFormat.QrCode, AutoRotate = true, @@ -22,40 +34,34 @@ public partial class LoginPage : ContentPage { }; } - //public event EventHandler AlertEvent; private void BarcodesDetected(object sender, ZXing.Net.Maui.BarcodeDetectionEventArgs e) { - //var first = e.Results?.FirstOrDefault(); var currentTime = DateTime.Now; if ((currentTime - _lastDetectionTime) > _detectionInterval) { _lastDetectionTime = currentTime; foreach (var barcode in e.Results) { if (Stunde.apiKey != barcode.Value) { - MainThread.InvokeOnMainThreadAsync(async () => { + _ = MainThread.InvokeOnMainThreadAsync(async () => { //await DisplayAlert("Barcode erkannt", $"Barcode: {barcode.Format} - {barcode.Value}", "OK"); try { + var tokendata = new TokenData(barcode.Value); var op = await Models.Operator.LoadData(barcode.Value); Models.Stunde.apiKey = barcode.Value; Models.Stunde.name = op.name; Models.Stunde.surname = op.surname; Models.Stunde.EmployeeId = int.Parse(op.id); Title = op.name + " " + op.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)); - //Preferences.Default.Set("apiUrl", Pre); - _loginViewModel.Server = Preferences.Default.Get("apiUrl", ""); - await DisplayAlert("Login erfolgreich", op.name + " " + op.surname, "OK"); } catch (Exception e) { - //AlertEvent?.Invoke(this, e.Message); - await DisplayAlert("Fehler", - e.Message, - "OK"); + await DisplayAlert("Fehler", e.Message, "OK"); } }); @@ -84,4 +90,14 @@ public partial class LoginPage : ContentPage { barcodeScannerView.IsDetecting = true; barcodeScannerView.CameraLocation = CameraLocation.Rear; } + + //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"); + //} } diff --git a/Jugenddienst Stunden/Views/StundePage.xaml.cs b/Jugenddienst Stunden/Views/StundePage.xaml.cs index 303ede5..33c5591 100644 --- a/Jugenddienst Stunden/Views/StundePage.xaml.cs +++ b/Jugenddienst Stunden/Views/StundePage.xaml.cs @@ -5,7 +5,9 @@ namespace Jugenddienst_Stunden.Views; public partial class StundePage : ContentPage { - + /// + /// CTOR + /// public StundePage() { InitializeComponent(); diff --git a/Jugenddienst Stunden/Views/StundenPage.xaml.cs b/Jugenddienst Stunden/Views/StundenPage.xaml.cs index 3c9f135..06ff147 100644 --- a/Jugenddienst Stunden/Views/StundenPage.xaml.cs +++ b/Jugenddienst Stunden/Views/StundenPage.xaml.cs @@ -3,12 +3,23 @@ using Jugenddienst_Stunden.ViewModels; namespace Jugenddienst_Stunden.Views; public partial class StundenPage : ContentPage { + + /// + /// CTOR + /// public StundenPage() { InitializeComponent(); - if(BindingContext is StundenViewModel vm) { + if (BindingContext is StundenViewModel vm) { vm.AlertEvent += Vm_AlertEvent; vm.InfoEvent += Vm_InfoEvent; } + + //// Bildschirmhöhe abrufen + //var screenHeight = DeviceDisplay.MainDisplayInfo.Height / DeviceDisplay.MainDisplayInfo.Density; + + //// Berechnen der gewünschten Höhe + //var desiredHeight = screenHeight - 450; // Abzüglich der Stundenübersicht + //stundeItems.HeightRequest = desiredHeight; } private void Vm_AlertEvent(object? sender, string e) { @@ -18,16 +29,22 @@ public partial class StundenPage : ContentPage { DisplayAlert("Information:", e, "OK"); } + /// + /// Beim Laden der Seite den Titel setzen + /// protected override void OnAppearing() { base.OnAppearing(); Title = Preferences.Default.Get("name", "") + " " + Preferences.Default.Get("surname", ""); } + /// + /// Das ausgewählte Datum merken + /// + /// + /// protected void OnDateSelected(object sender, DateChangedEventArgs e) { DateTime selectedDate = e.NewDate; } - private void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e) { - throw new Exception(); - } + } \ No newline at end of file