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
{{ message }}
Repository navigation
Commit 19d1dbd
Browse filesBrowse the repository at this point in the historyBrowse files
fix(chat): settle a denied send instead of offering a retry (#1760)
* fix(chat): store a denied send as its own status
* fix(chat): settle a denied send instead of failing it
The server answers Denied when it won't take a message from this user in
this chat, so a retry gets the same answer. Text and photo sends now mark
the row DENIED instead of FAILED, and the photo path drops its stored
blob as it already does for EncryptionNotAllowed.
* fix(chat): say a denied message can't be posted instead of offering a retry
A DENIED row now reads "Not Delivered. You can't post in this chat" in
the error colour, always shows, and isn't tappable. Photo bubbles stop
offering Retry for any failure the send path marked non-retryable; they
used to ignore that flag.
* fix(chat): re-read a chat's rules after a denied send
Denied carries no reason. If a speaker rule changed, the stored rules are
stale and the composer stays up; re-reading the chat lets speakerBlock
see the new rules and hide it. A removal from the group still isn't
visible, because GetChat doesn't return the caller's membership.
* fix(chat): stop reporting a denied send, typing notice or read pointer
A denied send now settles as DENIED with its own message, and typing and
read-pointer callers already ignore the result, so these refusals no
longer need to reach Bugsnag. One user produced 6 of the 18 overnight
events this way.
* fix(chat): keep stored membership when re-reading after a denied send
ChatEntityMapper.toEntity writes is_member = 1 by default. If the stream's
MemberLeft landed before the re-read returned, the upsert put a removed
user back in the feed as a member. The re-read now keeps whatever
membership is stored.
Copy file name to clipboardExpand all lines: apps/flipcash/features/messenger/src/main/kotlin/com/flipcash/app/messenger/internal/screens/components/ReceiptLabel.kt
Copy file name to clipboardExpand all lines: apps/flipcash/features/messenger/src/main/kotlin/com/flipcash/app/messenger/internal/screens/components/ReceiptRules.kt
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -71,7 +71,7 @@ internal fun shouldShowReceiptLabel(
71
71
// A split message's receipt goes under its last row only; the rows above share its status.
72
72
if (!item.isLastRow) returnfalse
73
73
val status = effectiveReceiptStatus(item, otherReadPointer) ?:returnfalse
74
-
if (status ==ReceiptStatus.FAILED) returntrue
74
+
if (status ==ReceiptStatus.FAILED|| status ==ReceiptStatus.DENIED) returntrue
75
75
val confirmed = item.confirmedStatus(otherReadPointer, settlingKey) ?:returnfalse
76
76
77
77
// Walking toward the newest: it keeps its line while nothing newer takes it -- no newer send
Copy file name to clipboardExpand all lines: apps/flipcash/features/messenger/src/test/kotlin/com/flipcash/app/messenger/internal/screens/components/ReceiptHandoffTest.kt
Copy file name to clipboardExpand all lines: apps/flipcash/shared/chat/src/main/kotlin/com/flipcash/shared/chat/internal/delegates/MediaSendDelegate.kt
+12-4Lines changed: 12 additions & 4 deletions
Original file line number
Diff line number
Diff line change
@@ -333,9 +333,12 @@ class MediaSendDelegate internal constructor(
333
333
}
334
334
}
335
335
.onFailure { cause ->
336
-
// A chat that stopped taking ciphertext won't take this blob on a retry either.
337
-
val terminal = cause isSendMessageError.EncryptionNotAllowed
Copy file name to clipboardExpand all lines: apps/flipcash/shared/chat/src/main/kotlin/com/flipcash/shared/chat/internal/delegates/MessagingDelegate.kt
0 commit comments