Skip to content

Commit ff3997f

Browse files
committed
Don't let a late autosync snapshot resurrect a just-cleared pause
The snapshot fetch is async and reflects a moment before any live clear event; track namespaces resolved since mount and skip them in the merge, so a resolved package can't be re-marked red until it pauses again.
1 parent c43d33b commit ff3997f

1 file changed

Lines changed: 16 additions & 3 deletions

File tree

quilt-sync/ui/src/pages/installed_packages_list.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::collections::HashMap;
1+
use std::collections::{HashMap, HashSet};
22
use std::sync::Arc;
33
use std::sync::atomic::{AtomicBool, Ordering};
44

@@ -85,12 +85,19 @@ pub fn InstalledPackagesList() -> impl IntoView {
8585
// Page-scoped autosync-paused map. Seeded from the watcher snapshot
8686
// below so pauses that predate this mount are still shown red.
8787
let paused_map: PausedMapSignal = RwSignal::new(HashMap::new());
88+
// Namespaces a live clear event (publish / non-paused status) resolved
89+
// since mount. The snapshot fetch below is async and reflects a moment
90+
// *before* those events, so it must not resurrect a pause the user has
91+
// already resolved — the merge skips anything in this set.
92+
let resolved_since_mount: RwSignal<HashSet<String>> = RwSignal::new(HashSet::new());
8893
leptos::task::spawn_local(async move {
8994
if let Ok(snapshot) = commands::get_autosync_snapshot().await {
90-
// Merge (not replace): a live `autosync-paused` event may have
91-
// already landed before this fetch resolves.
95+
let resolved = resolved_since_mount.get_untracked();
9296
paused_map.update(|map| {
9397
for entry in snapshot.paused {
98+
if resolved.contains(&entry.namespace) {
99+
continue;
100+
}
94101
if let Some(message) = entry.message {
95102
map.insert(entry.namespace, message);
96103
}
@@ -107,6 +114,9 @@ pub fn InstalledPackagesList() -> impl IntoView {
107114
paused_map.update(|map| {
108115
map.remove(&ns);
109116
});
117+
resolved_since_mount.update(|r| {
118+
r.insert(ns);
119+
});
110120
}
111121
status_event.set(Some(ev));
112122
});
@@ -121,6 +131,9 @@ pub fn InstalledPackagesList() -> impl IntoView {
121131
paused_map.update(|map| {
122132
map.remove(&ns);
123133
});
134+
resolved_since_mount.update(|r| {
135+
r.insert(ns);
136+
});
124137
notification.set(Some(Notification::Success(format!(
125138
"Autosync published {} — {}",
126139
ev.namespace, ev.message,

0 commit comments

Comments
 (0)