From 0adfe4329f18cf5678b5709960635f82b01f486a Mon Sep 17 00:00:00 2001 From: Mike Dilger Date: Fri, 30 Dec 2022 08:38:57 +1300 Subject: [PATCH] bugfix/rework around updating last reply --- Cargo.lock | 1 - Cargo.toml | 1 - src/globals.rs | 29 +++++++++-------------------- src/process.rs | 11 ++++++++++- 4 files changed, 19 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e19b4a60..faf2ef24 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1685,7 +1685,6 @@ dependencies = [ name = "gossip" version = "0.3.1-unstable" dependencies = [ - "async-recursion", "base64 0.20.0", "dirs", "eframe", diff --git a/Cargo.toml b/Cargo.toml index 8b95dc73..82d42f2b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,6 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -async-recursion = "1.0" base64 = "0.20" dirs = "4.0" eframe = { version = "0.20", features = [ "dark-light", "persistence" ] } diff --git a/src/globals.rs b/src/globals.rs index 56a91eb0..8dc9e192 100644 --- a/src/globals.rs +++ b/src/globals.rs @@ -5,7 +5,6 @@ use crate::feed::Feed; use crate::relationship::Relationship; use crate::settings::Settings; use crate::signer::Signer; -use async_recursion::async_recursion; use nostr_types::{Event, Id, IdHex, PublicKey, PublicKeyHex, Unixtime, Url}; use rusqlite::Connection; use std::collections::HashMap; @@ -210,26 +209,16 @@ impl Globals { .or_insert_with(|| vec![r]); } - #[async_recursion] pub async fn update_last_reply(id: Id, time: Unixtime) { - { - let mut last_reply = GLOBALS.last_reply.write().await; - last_reply - .entry(id) - .and_modify(|lasttime| { - if time > *lasttime { - *lasttime = time; - } - }) - .or_insert_with(|| time); - } // drops lock - - // Recurse upwards - if let Some(event) = GLOBALS.events.write().await.get(&id).cloned() { - if let Some((id, _maybe_url)) = event.replies_to() { - Self::update_last_reply(id, event.created_at).await; - } - } + let mut last_reply = GLOBALS.last_reply.write().await; + last_reply + .entry(id) + .and_modify(|lasttime| { + if time > *lasttime { + *lasttime = time; + } + }) + .or_insert_with(|| time); } pub fn get_replies_sync(id: Id) -> Vec { diff --git a/src/process.rs b/src/process.rs index f463f18e..5517f4f5 100644 --- a/src/process.rs +++ b/src/process.rs @@ -136,7 +136,16 @@ pub async fn process_new_event( Globals::add_relationship(id, event.id, Relationship::Reply).await; // Update last_reply - Globals::update_last_reply(id, event.created_at); + let mut id = id; + Globals::update_last_reply(id, event.created_at).await; + while let Some(ev) = GLOBALS.events.read().await.get(&id).cloned() { + if let Some((pid, _)) = ev.replies_to() { + id = pid; + Globals::update_last_reply(id, event.created_at).await; + } else { + break; + } + } } // We desire all ancestors