Fix missing tagged events in the replies feed (may still repeat events, but this is better than missing them)

This commit is contained in:
Mike Dilger 2023-01-17 10:04:08 +13:00
parent dd4446f6a8
commit a06380946c
2 changed files with 30 additions and 21 deletions

View File

@ -209,23 +209,27 @@ impl Feed {
*self.general_feed.write() = fevents.iter().map(|e| e.id).collect(); *self.general_feed.write() = fevents.iter().map(|e| e.id).collect();
// Filter differently for the replies feed // Filter differently for the replies feed
if let Some(my_pubkey) = GLOBALS.signer.read().await.public_key() {
let my_events: HashSet<Id> = self.my_event_ids.read().iter().copied().collect(); let my_events: HashSet<Id> = self.my_event_ids.read().iter().copied().collect();
let mut revents: Vec<Event> = events let mut revents: Vec<Event> = events
.iter() .iter()
.filter(|e| !dismissed.contains(&e.id)) .filter(|e| !dismissed.contains(&e.id))
.filter(|e| { .filter(|e| {
// Include if it directly replies to one of my events
// FIXME: maybe try replies_to_ancestors to go deeper // FIXME: maybe try replies_to_ancestors to go deeper
if let Some((id, _)) = e.replies_to() { if let Some((id, _)) = e.replies_to() {
if my_events.contains(&id) { if my_events.contains(&id) {
return true; return true;
} }
} }
false // Include if it tags me
e.people().iter().any(|(p, _, _)| *p == my_pubkey.into())
}) })
.cloned() .cloned()
.collect(); .collect();
revents.sort_by(|a, b| b.created_at.cmp(&a.created_at)); revents.sort_by(|a, b| b.created_at.cmp(&a.created_at));
*self.replies_feed.write() = revents.iter().map(|e| e.id).collect(); *self.replies_feed.write() = revents.iter().map(|e| e.id).collect();
}
// Potentially update thread parent to a higher parent // Potentially update thread parent to a higher parent
let maybe_tp = *self.thread_parent.read(); let maybe_tp = *self.thread_parent.read();

View File

@ -132,11 +132,16 @@ impl Overlord {
let now = Unixtime::now().unwrap(); let now = Unixtime::now().unwrap();
let feed_chunk = GLOBALS.settings.read().await.feed_chunk; let feed_chunk = GLOBALS.settings.read().await.feed_chunk;
let then = now.0 - feed_chunk as i64; let then = now.0 - feed_chunk as i64;
let db_events = DbEvent::fetch(Some(&format!(
" (kind=1 OR kind=5 OR kind=7) AND created_at > {} ORDER BY created_at ASC", let cond = if GLOBALS.settings.read().await.reactions {
format!(" (kind=1 OR kind=5 OR kind=6 OR kind=7) AND created_at > {} ORDER BY created_at ASC", then)
} else {
format!(
" (kind=1 OR kind=5 OR kind=6) AND created_at > {} ORDER BY created_at ASC",
then then
))) )
.await?; };
let db_events = DbEvent::fetch(Some(&cond)).await?;
// Map db events into Events // Map db events into Events
let mut events: Vec<Event> = Vec::with_capacity(db_events.len()); let mut events: Vec<Event> = Vec::with_capacity(db_events.len());