From 973a7c780f2747439b2378992513c8cca51b9ca5 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Mon, 19 Aug 2024 21:12:02 -0700 Subject: [PATCH] thread: remote subscriptions working Signed-off-by: William Casarin --- Cargo.toml | 4 ++-- enostr/src/relay/pool.rs | 6 ++++++ src/app.rs | 12 ++++++++++-- src/thread.rs | 4 ++-- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 99fbbdb0..7b2467b6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,8 +12,8 @@ default-run = "notedeck" crate-type = ["lib", "cdylib"] [workspace.dependencies] -#nostrdb = { git = "https://github.com/damus-io/nostrdb-rs", rev = "04e5917b44b0112ecfd0eb93e8a1e2c81fce1d75" } -nostrdb = { path = "/Users/jb55/dev/github/damus-io/nostrdb-rs" } +nostrdb = { git = "https://github.com/damus-io/nostrdb-rs", rev = "385a1af481ff8c08949a885248544483a52acbeb" } +#nostrdb = { path = "/Users/jb55/dev/github/damus-io/nostrdb-rs" } #nostrdb = "0.3.4" [dependencies] diff --git a/enostr/src/relay/pool.rs b/enostr/src/relay/pool.rs index a03e1fe0..3485d526 100644 --- a/enostr/src/relay/pool.rs +++ b/enostr/src/relay/pool.rs @@ -72,6 +72,12 @@ impl RelayPool { } } + pub fn unsubscribe(&mut self, subid: String) { + for relay in &mut self.relays { + relay.relay.send(&ClientMessage::close(subid.clone())); + } + } + pub fn subscribe(&mut self, subid: String, filter: Vec) { for relay in &mut self.relays { relay.relay.subscribe(subid.clone(), filter.clone()); diff --git a/src/app.rs b/src/app.rs index fbc3dd59..765d017e 100644 --- a/src/app.rs +++ b/src/app.rs @@ -901,18 +901,21 @@ fn render_panel(ctx: &egui::Context, app: &mut Damus, timeline_ind: usize) { /// Local thread unsubscribe fn thread_unsubscribe(app: &mut Damus, id: &[u8; 32]) { - let unsubscribe = { + let (unsubscribe, remote_subid) = { let txn = Transaction::new(&app.ndb).expect("txn"); let root_id = crate::note::root_note_id_from_selected_id(app, &txn, id); let thread = app.threads.thread_mut(&app.ndb, &txn, root_id).get_ptr(); let unsub = thread.decrement_sub(); + let mut remote_subid: Option = None; if let Ok(DecrementResult::LastSubscriber(_subid)) = unsub { *thread.subscription_mut() = None; + remote_subid = thread.remote_subscription().to_owned(); + *thread.remote_subscription_mut() = None; } - unsub + (unsub, remote_subid) }; match unsubscribe { @@ -926,6 +929,11 @@ fn thread_unsubscribe(app: &mut Damus, id: &[u8; 32]) { app.ndb.subscription_count() ); } + + // unsub from remote + if let Some(subid) = remote_subid { + app.pool.unsubscribe(subid); + } } Ok(DecrementResult::ActiveSubscribers) => { diff --git a/src/thread.rs b/src/thread.rs index e7596d97..2eca410c 100644 --- a/src/thread.rs +++ b/src/thread.rs @@ -86,8 +86,8 @@ impl Thread { self.sub.as_ref() } - pub fn remote_subscription(&self) -> Option<&String> { - self.remote_sub.as_ref() + pub fn remote_subscription(&self) -> &Option { + &self.remote_sub } pub fn remote_subscription_mut(&mut self) -> &mut Option {