Testing und interfaces

This commit is contained in:
Meik
2026-02-13 09:06:36 +01:00
parent abbce22aa9
commit 352dc42ae7
8 changed files with 846 additions and 166 deletions

View File

@@ -0,0 +1,83 @@
using System;
using System.Threading.Tasks;
using System.Windows.Threading;
namespace FasdDesktopUi.Basics.Services.Models
{
internal interface ITicketOverviewTimer
{
TimeSpan Interval { get; set; }
bool IsEnabled { get; }
void Start();
void Stop();
}
internal interface ITicketOverviewDispatcher
{
Task InvokeAsync(Action action);
Task InvokeAsync(Func<Task> action);
ITicketOverviewTimer CreateTimer(TimeSpan interval, Action tick);
}
internal sealed class TicketOverviewDispatcher : ITicketOverviewDispatcher
{
private readonly Dispatcher _dispatcher;
internal TicketOverviewDispatcher(Dispatcher dispatcher)
{
_dispatcher = dispatcher ?? throw new ArgumentNullException(nameof(dispatcher));
}
public Task InvokeAsync(Action action)
{
return _dispatcher.InvokeAsync(action, DispatcherPriority.Background).Task;
}
public Task InvokeAsync(Func<Task> action)
{
return _dispatcher.InvokeAsync(action, DispatcherPriority.Background).Task.Unwrap();
}
public ITicketOverviewTimer CreateTimer(TimeSpan interval, Action tick)
{
var timer = new DispatcherTimer(interval, DispatcherPriority.Background, (sender, args) => tick?.Invoke(), _dispatcher)
{
IsEnabled = false
};
return new TicketOverviewTimer(timer);
}
}
internal sealed class TicketOverviewTimer : ITicketOverviewTimer
{
private readonly DispatcherTimer _timer;
internal TicketOverviewTimer(DispatcherTimer timer)
{
_timer = timer ?? throw new ArgumentNullException(nameof(timer));
}
public TimeSpan Interval
{
get => _timer.Interval;
set => _timer.Interval = value;
}
public bool IsEnabled => _timer.IsEnabled;
public void Start()
{
_timer.Start();
}
public void Stop()
{
_timer.Stop();
}
}
}