bugfix/rework around updating last reply

This commit is contained in:
Mike Dilger 2022-12-30 08:38:57 +13:00
parent 9aa2845366
commit 0adfe4329f
4 changed files with 19 additions and 23 deletions

1
Cargo.lock generated
View File

@ -1685,7 +1685,6 @@ dependencies = [
name = "gossip"
version = "0.3.1-unstable"
dependencies = [
"async-recursion",
"base64 0.20.0",
"dirs",
"eframe",

View File

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

View File

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

View File

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