thread: remote subscriptions working

Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
William Casarin 2024-08-19 21:12:02 -07:00
parent 9328ef2dff
commit 973a7c780f
4 changed files with 20 additions and 6 deletions

View File

@ -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]

View File

@ -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());

View File

@ -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) => {

View File

@ -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> {