upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src/purgatory
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2026-01-02 13:53:47 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2026-01-02 13:55:38 +0000
commit11b1655638b5a328662187a27f85a84df60fc759 (patch)
treec26adc3bb7b5fcb0b2fe51b1e7bf9823bd970c4e /src/purgatory
parent6e70994a30a0d0e537099094df2a8369b559586d (diff)
sync: use purgatory
don't save new events destined for purgatory events directly to db or serve on websockets don't download events already in purgatory via negentropy sync
Diffstat (limited to 'src/purgatory')
-rw-r--r--src/purgatory/mod.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/purgatory/mod.rs b/src/purgatory/mod.rs
index 18a55d5..2987f15 100644
--- a/src/purgatory/mod.rs
+++ b/src/purgatory/mod.rs
@@ -19,6 +19,7 @@ pub use types::{PrPurgatoryEntry, RefPair, RefUpdate, StatePurgatoryEntry};
19 19
20use dashmap::DashMap; 20use dashmap::DashMap;
21use nostr_sdk::prelude::*; 21use nostr_sdk::prelude::*;
22use std::collections::HashSet;
22use std::sync::Arc; 23use std::sync::Arc;
23use std::time::{Duration, Instant}; 24use std::time::{Duration, Instant};
24 25
@@ -253,6 +254,34 @@ impl Purgatory {
253 self.pr_events.remove(event_id); 254 self.pr_events.remove(event_id);
254 } 255 }
255 256
257 /// Get all event IDs currently stored in purgatory.
258 ///
259 /// Returns a HashSet of all event IDs for both state events and PR events
260 /// held in purgatory. Useful for negentropy sync to avoid fetching events
261 /// that are already in purgatory awaiting git data.
262 ///
263 /// # Returns
264 /// HashSet of event IDs (as EventId) for all events in purgatory
265 pub fn event_ids(&self) -> HashSet<EventId> {
266 let mut ids = HashSet::new();
267
268 // Collect state event IDs
269 for entry in self.state_events.iter() {
270 for state_entry in entry.value().iter() {
271 ids.insert(state_entry.event.id);
272 }
273 }
274
275 // Collect PR event IDs (only actual events, not placeholders)
276 for entry in self.pr_events.iter() {
277 if let Some(ref event) = entry.value().event {
278 ids.insert(event.id);
279 }
280 }
281
282 ids
283 }
284
256 /// Get all PR placeholder event IDs (git-data-first entries without events). 285 /// Get all PR placeholder event IDs (git-data-first entries without events).
257 /// 286 ///
258 /// Returns event IDs for entries where git data arrived before the PR event. 287 /// Returns event IDs for entries where git data arrived before the PR event.