You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Receiving a tapback/reaction previously produced no local notification:
both notification branches in textMessageAppPacket gated on
isEmoji == false, so a reaction was stored but only visible with the
conversation already open.
Now, when a reaction arrives and the sender/channel isn't muted, look up
the reacted-to message locally by messageId == replyID and schedule an
iMessage-style notification (e.g. `Alice reacted 👍 to "See you soon"`).
If the original message isn't known locally (a "phantom" tapback whose
replyID matches nothing), the reaction is still stored but no
notification is shown — mirroring Android's rememberReaction guard.
- Add MeshPackets.reactionNotificationBody(replyID:emoji:senderName:context:)
(static + context-injected so it's unit-testable) which returns nil for
phantom tapbacks and formats the localized body otherwise.
- Add makeMessageNotification(...) factory to collapse the DM/channel by
regular/reaction Notification construction into one path.
- Add the reaction body format key to Localizable.xcstrings.
Out of scope (unchanged): unread-count/badge behavior. The isEmoji == false
filters in the *EntityExtension unread counts stay, so a reaction notifies
without bumping the conversation's unread badge (matching iMessage/Google
Messages).
Adds ReactionNotificationTests (7 tests) covering the phantom-tapback guard
(unknown/zero/negative replyID), the formatted body, emoji fallbacks, and
the nil-original-payload-still-notifies edge.
Copy file name to clipboardExpand all lines: Localizable.xcstrings
+3Lines changed: 3 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,9 @@
1
1
{
2
2
"sourceLanguage" : "en",
3
3
"strings" : {
4
+
"%1$@ reacted %2$@ to \"%3$@\"" : {
5
+
"comment" : "Tapback/reaction notification body. %1$@ is the sender name, %2$@ is the reaction emoji, %3$@ is the original message text that was reacted to."
6
+
},
4
7
"%@ entered %@" : {
5
8
"comment" : "Geofence notification body. First %@ is the node name, second %@ is the waypoint name."
0 commit comments