Polish uploader UI and queue handling
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled

This commit is contained in:
Codex Agent
2026-01-12 17:35:05 +01:00
parent 7786e3d134
commit e4100f7800
5 changed files with 252 additions and 21 deletions

View File

@@ -16,12 +16,17 @@ public sealed class UploadService
private readonly ConcurrentDictionary<string, byte> _pending = new(StringComparer.OrdinalIgnoreCase);
private CancellationTokenSource? _cts;
public void Start(PhotoboothSettings settings, Action<string> setStatus)
public void Start(
PhotoboothSettings settings,
Action<string> onQueued,
Action<string> onUploading,
Action<string> onSuccess,
Action<string> onFailure)
{
Stop();
_cts = new CancellationTokenSource();
_ = Task.Run(() => WorkerAsync(settings, setStatus, _cts.Token));
_ = Task.Run(() => WorkerAsync(settings, onQueued, onUploading, onSuccess, onFailure, _cts.Token));
}
public void Stop()
@@ -31,7 +36,7 @@ public sealed class UploadService
_pending.Clear();
}
public void Enqueue(string path)
public void Enqueue(string path, Action<string> onQueued)
{
if (!_pending.TryAdd(path, 0))
{
@@ -39,9 +44,16 @@ public sealed class UploadService
}
_queue.Writer.TryWrite(path);
onQueued(path);
}
private async Task WorkerAsync(PhotoboothSettings settings, Action<string> setStatus, CancellationToken token)
private async Task WorkerAsync(
PhotoboothSettings settings,
Action<string> onQueued,
Action<string> onUploading,
Action<string> onSuccess,
Action<string> onFailure,
CancellationToken token)
{
if (string.IsNullOrWhiteSpace(settings.UploadUrl))
{
@@ -56,9 +68,10 @@ public sealed class UploadService
{
try
{
onUploading(path);
await WaitForFileReadyAsync(path, token);
await UploadAsync(client, settings, path, token);
setStatus($"Hochgeladen: {Path.GetFileName(path)}");
onSuccess(path);
}
catch (OperationCanceledException)
{
@@ -66,7 +79,7 @@ public sealed class UploadService
}
catch
{
setStatus($"Upload fehlgeschlagen: {Path.GetFileName(path)}");
onFailure(path);
}
finally
{