diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2026-01-02 13:53:47 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2026-01-02 13:55:38 +0000 |
| commit | 11b1655638b5a328662187a27f85a84df60fc759 (patch) | |
| tree | c26adc3bb7b5fcb0b2fe51b1e7bf9823bd970c4e /src/purgatory | |
| parent | 6e70994a30a0d0e537099094df2a8369b559586d (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.rs | 29 |
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 | ||
| 20 | use dashmap::DashMap; | 20 | use dashmap::DashMap; |
| 21 | use nostr_sdk::prelude::*; | 21 | use nostr_sdk::prelude::*; |
| 22 | use std::collections::HashSet; | ||
| 22 | use std::sync::Arc; | 23 | use std::sync::Arc; |
| 23 | use std::time::{Duration, Instant}; | 24 | use 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. |