Skip to content

Commit ec9d868

Browse files
committed
Skip sending delivery receipts for shadowed messages and muted users
This change prevents sending message delivery receipts for messages that are either shadowed or sent by a user who has been muted by the current user.
1 parent 6a6952a commit ec9d868

File tree

2 files changed

+17
-14
lines changed

2 files changed

+17
-14
lines changed

stream-chat-android-client/src/main/java/io/getstream/chat/android/client/receipts/MessageReceiptManager.kt

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,8 @@ import io.getstream.chat.android.client.extensions.internal.lastMessage
2525
import io.getstream.chat.android.client.extensions.userRead
2626
import io.getstream.chat.android.client.persistance.repository.RepositoryFacade
2727
import io.getstream.chat.android.client.persistence.repository.MessageReceiptRepository
28-
import io.getstream.chat.android.client.utils.message.isDeleted
2928
import io.getstream.chat.android.models.Channel
3029
import io.getstream.chat.android.models.Message
31-
import io.getstream.chat.android.models.MessageType
3230
import io.getstream.chat.android.models.User
3331
import io.getstream.log.taggedLogger
3432
import java.util.Date
@@ -56,8 +54,8 @@ internal class MessageReceiptManager(
5654
*
5755
* A delivery message candidate is the last non-deleted message in the channel that:
5856
* - It was not sent by the current user
59-
* - It is not a system message
60-
* - It is not deleted
57+
* - Is not shadow banned
58+
* - Was not sent by a muted user
6159
* - Is not yet marked as read by the current user
6260
* - Is not yet marked as delivered by the current user
6361
*/
@@ -162,15 +160,15 @@ internal class MessageReceiptManager(
162160
return false
163161
}
164162

165-
// Do not send delivery receipts for system messages
166-
if (message.type == MessageType.SYSTEM) {
167-
logger.w { "[canMarkMessageAsDelivered] Message ${message.id} is a system message" }
163+
// Do not send delivery receipts for shadowed messages
164+
if (message.shadowed) {
165+
logger.w { "[canMarkMessageAsDelivered] Message ${message.id} is shadowed" }
168166
return false
169167
}
170168

171-
// Do not send delivery receipts for deleted messages
172-
if (message.isDeleted()) {
173-
logger.w { "[canMarkMessageAsDelivered] Message ${message.id} is deleted" }
169+
// Do not send delivery receipts for messages sent by muted users
170+
if (currentUser.mutes.any { mute -> mute.target?.id == message.user.id }) {
171+
logger.w { "[canMarkMessageAsDelivered] Message ${message.id} was sent by a muted user ${message.user.id}" }
174172
return false
175173
}
176174

stream-chat-android-client/src/test/java/io/getstream/chat/android/client/receipts/MessageReceiptManagerTest.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import io.getstream.chat.android.randomChannel
2727
import io.getstream.chat.android.randomChannelUserRead
2828
import io.getstream.chat.android.randomConfig
2929
import io.getstream.chat.android.randomMessage
30+
import io.getstream.chat.android.randomMute
3031
import io.getstream.chat.android.randomUser
3132
import io.getstream.chat.android.test.asCall
3233
import io.getstream.result.Error
@@ -188,8 +189,8 @@ internal class MessageReceiptManagerTest {
188189
}
189190

190191
@Test
191-
fun `should skip storing message delivery receipt from system messages`() = runTest {
192-
val message = DeliverableMessage.copy(type = "system")
192+
fun `should skip storing message delivery receipt from shadow banned messages`() = runTest {
193+
val message = DeliverableMessage.copy(shadowed = true)
193194
val fixture = Fixture()
194195
val sut = fixture.get()
195196

@@ -199,9 +200,13 @@ internal class MessageReceiptManagerTest {
199200
}
200201

201202
@Test
202-
fun `should skip storing message delivery receipt from deleted messages`() = runTest {
203-
val message = DeliverableMessage.copy(deletedAt = Date())
203+
fun `should skip storing message delivery receipt from muted users`() = runTest {
204+
val message = DeliverableMessage
205+
val currentUser = CurrentUser.copy(
206+
mutes = listOf(randomMute(user = CurrentUser, target = message.user))
207+
)
204208
val fixture = Fixture()
209+
.givenCurrentUser(currentUser)
205210
val sut = fixture.get()
206211

207212
sut.markMessageAsDelivered(message)

0 commit comments

Comments
 (0)