| index 6316a12..3be63e4 100644 |
| --- a/ios/LChatCore/Sources/LChatCore/ThreadStore.swift |
| +++ b/ios/LChatCore/Sources/LChatCore/ThreadStore.swift |
| @@ -199,21 +199,14 @@ public final class ThreadStore: ObservableObject { |
| var lastMine = false |
| if let lb = t.last_blob, !lb.isEmpty, let key, |
| let p = try? key.decryptJSON(MessagePayload.self, blob: lb) { |
| - if p.isReactionEvent { |
| - // A trailing reaction stays silent in the sidebar — no |
| - // preview (previewText would render a blank "Name: ") and |
| - // no unread dot, mirroring the web's load path (shell.js). |
| - lastMine = true |
| - } else { |
| - preview = previewText(kind: t.kind, payload: p) |
| - // A chat whose latest message is ours isn't unread — sending from |
| - // any device means we've read it. Old payloads have no uid; fall |
| - // back to the screen name (mirrors ownMessage in web/static/ui.js). |
| - if let uid = p.uid, !myUserId.isEmpty { |
| - lastMine = uid == myUserId |
| - } else if let n = p.name, !n.isEmpty { |
| - lastMine = n == rosterLabels[myUserId] |
| - } |
| + preview = previewText(kind: t.kind, payload: p) |
| + // A chat whose latest message is ours isn't unread — sending from |
| + // any device means we've read it. Old payloads have no uid; fall |
| + // back to the screen name (mirrors ownMessage in web/static/ui.js). |
| + if let uid = p.uid, !myUserId.isEmpty { |
| + lastMine = uid == myUserId |
| + } else if let n = p.name, !n.isEmpty { |
| + lastMine = n == rosterLabels[myUserId] |
| } |
| } |
| // An app thread with no activity yet shows its blurb instead of a |