Add a processing queue page with a live app-bar badge #13
Loading…
Reference in a new issue
No description provided.
Delete branch "d/queue-page"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
A /queue page shows recent Paperless consume tasks (running first) with a functional health strip � reachability, latency, active and failed counts � refreshing quickly while work runs and lazily when idle. The app bar shows a count badge while anything is processing, and the upload toast links straight to the queue.
🤖 Claude AI Code Review
Summary
Adds a
/queuepage with adaptive polling, an app-bar processing badge, and multi-version-aware task parsing inPaperlessClient. Well-structured and covered by new tests.Code Quality ⭐⭐⭐⭐☆
Clean separation, good null-vs-empty semantics for reachability, and thoughtful test coverage across Paperless response shapes.
Issues
🟡 Queue.razor —
LoadAsynccan race with itself. The manualRefreshbutton and thePollLoopAsynctimer both callLoadAsyncconcurrently. Overlapping fetches can assign_tasks/_lastFetchMs/_unreachableout of order, briefly showing stale or flickering state. Consider a guard (e.g. skip if a load is in flight) or aSemaphoreSlim.🟢 Queue.razor —
LoadAsyncpasses noCancellationTokentoListRecentTasksAsync, so on page close (Dispose) an in-flight fetch and its subsequentStateHasChangedare not cancelled. Pass_pollStopper.Tokenfor consistency with the app-bar poller.🟢 Queue.razor —
context.TaskId[..8]assumesTaskIdis at least 8 chars. If a shorter/empty task_id ever comes back this throws in the row template. Guard the substring length.Minor concurrency hardening (in-flight guard + cancellation token) would be worth doing, but nothing here blocks merge.
📊 Tokens: 12022 input + 552 output | 💰 Cost: ~$0.0739
Generated by Claude Opus 4.8 via Gitea Actions