Multi-Platform Package Manager for Stable Diffusion
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.6 KiB

using System;
using System.Threading;
using System.Threading.Tasks;
using AsyncAwaitBestPractices;
namespace StabilityMatrix.Avalonia.Controls.TextMarkers;
public class TextMarkerValidatorService
{
private string? currentText;
private Task? currentTask;
private TimeSpan updateInterval;
public EventHandler<TextMarkerValidationEventArgs>? ValidationUpdate;
private void OnValidationUpdate(TextMarkerValidationEventArgs e)
{
ValidationUpdate?.Invoke(this, e);
}
public TextMarkerValidatorService(TimeSpan updateInterval)
{
this.updateInterval = updateInterval;
}
public void UpdateText(string text)
{
// Ignore if text is the same
if (currentText == text) return;
// If previous task is not null, ignore
if (currentTask != null) return;
// Start a task to validate the text, and delay it by the update interval after the last update
currentTask = Task.Run(async () =>
{
await ValidateWithDelayAsync();
}).ContinueWith(_ =>
{
// Set task to null
currentTask = null;
// Set current text
currentText = text;
});
currentTask.SafeFireAndForget();
}
private void Validate()
{
}
private async Task ValidateWithDelayAsync(CancellationToken cancellationToken = default)
{
// Validate the text
Validate();
// Wait for the update interval
await Task.Delay(updateInterval, cancellationToken);
}
}