fix(ui): UsagePillViewModel loads snapshot on connection restore
The ctor-time LoadAsync races WorkerClient.StartAsync, so the SignalR call fails silently and the pill only fills on the next worker poll (up to 900s). Subscribe to ConnectionRestoredEvent, which also fires on the first successful connect, to retry the cached snapshot.
This commit is contained in:
@@ -22,6 +22,7 @@ public sealed partial class UsagePillViewModel : ViewModelBase
|
||||
{
|
||||
_worker = worker;
|
||||
_worker.UsageUpdatedEvent += OnUsageUpdated;
|
||||
_worker.ConnectionRestoredEvent += OnConnectionRestored;
|
||||
_ = LoadAsync();
|
||||
}
|
||||
|
||||
@@ -34,6 +35,8 @@ public sealed partial class UsagePillViewModel : ViewModelBase
|
||||
|
||||
private void OnUsageUpdated(UsageSnapshotDto snapshot) => Snapshot = snapshot;
|
||||
|
||||
private void OnConnectionRestored() => _ = LoadAsync();
|
||||
|
||||
partial void OnSnapshotChanged(UsageSnapshotDto? value)
|
||||
{
|
||||
OnPropertyChanged(nameof(Text));
|
||||
|
||||
@@ -144,4 +144,20 @@ public class UsagePillViewModelTests
|
||||
|
||||
Assert.Contains("12", vm.Text);
|
||||
}
|
||||
|
||||
// ── ConnectionRestored event ─────────────────────────────────────────────
|
||||
|
||||
[Fact]
|
||||
public void ConnectionRestored_Event_LoadsSnapshot()
|
||||
{
|
||||
var worker = new FakeWorker();
|
||||
var vm = new UsagePillViewModel(worker);
|
||||
Assert.Null(vm.Snapshot);
|
||||
|
||||
worker.InitialSnapshot = Snapshot(fiveHourPercent: 25);
|
||||
worker.RaiseConnectionRestored();
|
||||
|
||||
Assert.NotNull(vm.Snapshot);
|
||||
Assert.Contains("25", vm.Text);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user