diff --git a/src/feed.rs b/src/feed.rs index 6ab8b78c..727b45af 100644 --- a/src/feed.rs +++ b/src/feed.rs @@ -209,23 +209,27 @@ impl Feed { *self.general_feed.write() = fevents.iter().map(|e| e.id).collect(); // Filter differently for the replies feed - let my_events: HashSet = self.my_event_ids.read().iter().copied().collect(); - let mut revents: Vec = events - .iter() - .filter(|e| !dismissed.contains(&e.id)) - .filter(|e| { - // FIXME: maybe try replies_to_ancestors to go deeper - if let Some((id, _)) = e.replies_to() { - if my_events.contains(&id) { - return true; + if let Some(my_pubkey) = GLOBALS.signer.read().await.public_key() { + let my_events: HashSet = self.my_event_ids.read().iter().copied().collect(); + let mut revents: Vec = events + .iter() + .filter(|e| !dismissed.contains(&e.id)) + .filter(|e| { + // Include if it directly replies to one of my events + // FIXME: maybe try replies_to_ancestors to go deeper + if let Some((id, _)) = e.replies_to() { + if my_events.contains(&id) { + return true; + } } - } - false - }) - .cloned() - .collect(); - revents.sort_by(|a, b| b.created_at.cmp(&a.created_at)); - *self.replies_feed.write() = revents.iter().map(|e| e.id).collect(); + // Include if it tags me + e.people().iter().any(|(p, _, _)| *p == my_pubkey.into()) + }) + .cloned() + .collect(); + revents.sort_by(|a, b| b.created_at.cmp(&a.created_at)); + *self.replies_feed.write() = revents.iter().map(|e| e.id).collect(); + } // Potentially update thread parent to a higher parent let maybe_tp = *self.thread_parent.read(); diff --git a/src/overlord/mod.rs b/src/overlord/mod.rs index 1f9d334a..4efe2649 100644 --- a/src/overlord/mod.rs +++ b/src/overlord/mod.rs @@ -132,11 +132,16 @@ impl Overlord { let now = Unixtime::now().unwrap(); let feed_chunk = GLOBALS.settings.read().await.feed_chunk; 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", - then - ))) - .await?; + + 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 + ) + }; + let db_events = DbEvent::fetch(Some(&cond)).await?; // Map db events into Events let mut events: Vec = Vec::with_capacity(db_events.len());