commit 973a7c780f2747439b2378992513c8cca51b9ca5
parent 9328ef2dff3389fa9b8fff4571211f69ba2b14e2
Author: William Casarin <jb55@jb55.com>
Date: Mon, 19 Aug 2024 21:12:02 -0700
thread: remote subscriptions working
Signed-off-by: William Casarin <jb55@jb55.com>
Diffstat:
4 files changed, 20 insertions(+), 6 deletions(-)
diff --git 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
@@ -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<Filter>) {
for relay in &mut self.relays {
relay.relay.subscribe(subid.clone(), filter.clone());
diff --git 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<String> = 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
@@ -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<String> {
+ &self.remote_sub
}
pub fn remote_subscription_mut(&mut self) -> &mut Option<String> {