demo_hard/FunctionWindow.axaml.cs
2025-02-12 14:54:49 +03:00

108 lines
2.8 KiB
C#

using System;
using System.IO;
using System.Threading.Tasks;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using Avalonia.Media.Imaging;
using demo_hard.Model;
namespace demo_hard;
public partial class FunctionWindow : Window
{
private readonly TimeSpan sessionDuration = TimeSpan.FromMinutes(10);
private readonly TimeSpan warningTime = TimeSpan.FromMinutes(5);
//private readonly TimeSpan lockoutDuration = TimeSpan.FromMinutes(1);
private DateTime sessionStartTime;
private bool warningShow = false;
public FunctionWindow(Employee user)
{
InitializeComponent();
DataContext = new ImageEmployee()
{
EmployeId = user.EmployeId,
Fio = user.Fio,
EmployeLogin = user.EmployeLogin,
EmployePassword = user.EmployePassword,
RoleId = user.RoleId,
EmployePhoto = user.EmployePhoto
};
sessionStartTime = DateTime.Now;
StartSessionTimer();
}
public FunctionWindow()
{
InitializeComponent();
}
private async void StartSessionTimer()
{
while (true)
{
TimeSpan elapsedTime = DateTime.Now - sessionStartTime;
TimeSpan remainingTime = sessionDuration - elapsedTime;
this.FindControl<TextBlock>("SessionTimer").Text = $"Осталось: {remainingTime.Minutes}:{remainingTime.Seconds}";
if (!warningShow && remainingTime <= warningTime)
{
warningShow = true;
WarningBlock.Text = "Внимание! Ваш сеанс закончится через 5 минут!";
}
if (remainingTime <= TimeSpan.Zero)
{
EndSession();
break;
}
await Task.Delay(1000);
}
}
private async void EndSession()
{
this.Close();
}
private void Back_Button(object? sender, RoutedEventArgs e)
{
new MainWindow().ShowDialog(this);
}
private void Next_Function_Button(object? sender, RoutedEventArgs e)
{
new SallerWindow().ShowDialog(this);
}
public class ImageEmployee: Employee
{
Bitmap? Image
{
get
{
try
{
string absolutePath = Path.Combine(AppContext.BaseDirectory, EmployePhoto);
return new Bitmap(absolutePath);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
return null;
}
}
}
}
private void History_Button(object? sender, RoutedEventArgs e)
{
new HistoryWindow().ShowDialog(this);
}
}