Skip to content

Commit 0ec4d07

Browse files
committed
feat: Add delivery_events flag to Config
Added a `deliveryEventsEnabled` flag to the `Config` model. This allows disabling message delivery events on a per-channel basis. Delivery receipts will not be stored or sent if this flag is disabled in the channel configuration.
1 parent 662bd05 commit 0ec4d07

File tree

9 files changed

+40
-9
lines changed

9 files changed

+40
-9
lines changed

stream-chat-android-client/src/main/java/io/getstream/chat/android/client/api2/model/dto/ConfigDto.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ internal data class ConfigDto(
2626
val name: String?,
2727
val typing_events: Boolean,
2828
val read_events: Boolean,
29+
val delivery_events: Boolean?,
2930
val connect_events: Boolean,
3031
val search: Boolean,
3132
val reactions: Boolean,

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ internal class MessageReceiptManager(
112112
}
113113

114114
private fun getUndeliveredMessage(channel: Channel): Message? {
115+
if (!channel.config.deliveryEventsEnabled) {
116+
logger.w { "[getUndeliveredMessage] Delivery events disabled for channel ${channel.cid}" }
117+
return null
118+
}
115119
val currentUser = getCurrentUser() ?: run {
116120
logger.w { "[getUndeliveredMessage] Cannot get undelivered message: current user is null" }
117121
return null

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,7 @@ private fun createConfigJsonString() =
691691
"name": "team",
692692
"typing_events": true,
693693
"read_events": true,
694+
"delivery_events": true,
694695
"connect_events": true,
695696
"search": true,
696697
"reactions": true,

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,7 @@ internal object Mother {
481481
name: String? = randomString(),
482482
typing_events: Boolean = randomBoolean(),
483483
read_events: Boolean = randomBoolean(),
484+
delivery_events: Boolean = randomBoolean(),
484485
connect_events: Boolean = randomBoolean(),
485486
search: Boolean = randomBoolean(),
486487
reactions: Boolean = randomBoolean(),
@@ -507,6 +508,7 @@ internal object Mother {
507508
name = name,
508509
typing_events = typing_events,
509510
read_events = read_events,
511+
delivery_events = delivery_events,
510512
connect_events = connect_events,
511513
search = search,
512514
reactions = reactions,

stream-chat-android-client/src/test/java/io/getstream/chat/android/client/parser2/testdata/ChannelDtoTestData.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ internal object ChannelDtoTestData {
3838
"name" : "config1",
3939
"typing_events": true,
4040
"read_events": true,
41+
"delivery_events": true,
4142
"connect_events": true,
4243
"search": false,
4344
"reactions": true,
@@ -74,6 +75,7 @@ internal object ChannelDtoTestData {
7475
name = "config1",
7576
typing_events = true,
7677
read_events = true,
78+
delivery_events = true,
7779
connect_events = true,
7880
search = false,
7981
reactions = true,

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import io.getstream.chat.android.models.Message
2424
import io.getstream.chat.android.models.User
2525
import io.getstream.chat.android.randomChannel
2626
import io.getstream.chat.android.randomChannelUserRead
27+
import io.getstream.chat.android.randomConfig
2728
import io.getstream.chat.android.randomDate
2829
import io.getstream.chat.android.randomMessage
2930
import io.getstream.chat.android.randomMessageList
@@ -197,6 +198,17 @@ internal class MessageReceiptManagerTest {
197198
fixture.verifyUpsertMessageReceiptsCalled(receipts = receipts)
198199
}
199200

201+
@Test
202+
fun `should skip storing channel delivery receipts when delivery events are disabled`() = runTest {
203+
val channel = randomChannel(config = randomConfig(deliveryEventsEnabled = false))
204+
val fixture = Fixture()
205+
val sut = fixture.get()
206+
207+
sut.markChannelsAsDelivered(channels = listOf(channel))
208+
209+
fixture.verifyUpsertMessageReceiptsCalled(never())
210+
}
211+
200212
@Test
201213
fun `should skip storing channel delivery receipts when current user is null`() = runTest {
202214
val channel = randomChannel()

stream-chat-android-core/api/stream-chat-android-core.api

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -686,8 +686,8 @@ public final class io/getstream/chat/android/models/Command {
686686

687687
public final class io/getstream/chat/android/models/Config {
688688
public fun <init> ()V
689-
public fun <init> (Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;ZZZZZZZZZZZZZLjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ZZZ)V
690-
public synthetic fun <init> (Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;ZZZZZZZZZZZZZLjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
689+
public fun <init> (Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;ZZZZZZZZZZZZZZLjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ZZZ)V
690+
public synthetic fun <init> (Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;ZZZZZZZZZZZZZZLjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
691691
public final fun component1 ()Ljava/util/Date;
692692
public final fun component10 ()Z
693693
public final fun component11 ()Z
@@ -696,25 +696,26 @@ public final class io/getstream/chat/android/models/Config {
696696
public final fun component14 ()Z
697697
public final fun component15 ()Z
698698
public final fun component16 ()Z
699-
public final fun component17 ()Ljava/lang/String;
700-
public final fun component18 ()I
701-
public final fun component19 ()Ljava/lang/String;
699+
public final fun component17 ()Z
700+
public final fun component18 ()Ljava/lang/String;
701+
public final fun component19 ()I
702702
public final fun component2 ()Ljava/util/Date;
703703
public final fun component20 ()Ljava/lang/String;
704704
public final fun component21 ()Ljava/lang/String;
705-
public final fun component22 ()Ljava/util/List;
706-
public final fun component23 ()Z
705+
public final fun component22 ()Ljava/lang/String;
706+
public final fun component23 ()Ljava/util/List;
707707
public final fun component24 ()Z
708708
public final fun component25 ()Z
709+
public final fun component26 ()Z
709710
public final fun component3 ()Ljava/lang/String;
710711
public final fun component4 ()Z
711712
public final fun component5 ()Z
712713
public final fun component6 ()Z
713714
public final fun component7 ()Z
714715
public final fun component8 ()Z
715716
public final fun component9 ()Z
716-
public final fun copy (Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;ZZZZZZZZZZZZZLjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ZZZ)Lio/getstream/chat/android/models/Config;
717-
public static synthetic fun copy$default (Lio/getstream/chat/android/models/Config;Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;ZZZZZZZZZZZZZLjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ZZZILjava/lang/Object;)Lio/getstream/chat/android/models/Config;
717+
public final fun copy (Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;ZZZZZZZZZZZZZZLjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ZZZ)Lio/getstream/chat/android/models/Config;
718+
public static synthetic fun copy$default (Lio/getstream/chat/android/models/Config;Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;ZZZZZZZZZZZZZZLjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ZZZILjava/lang/Object;)Lio/getstream/chat/android/models/Config;
718719
public fun equals (Ljava/lang/Object;)Z
719720
public final fun getAutomod ()Ljava/lang/String;
720721
public final fun getAutomodBehavior ()Ljava/lang/String;
@@ -723,6 +724,7 @@ public final class io/getstream/chat/android/models/Config {
723724
public final fun getConnectEventsEnabled ()Z
724725
public final fun getCreatedAt ()Ljava/util/Date;
725726
public final fun getCustomEventsEnabled ()Z
727+
public final fun getDeliveryEventsEnabled ()Z
726728
public final fun getMarkMessagesPending ()Z
727729
public final fun getMaxMessageLength ()I
728730
public final fun getMessageRemindersEnabled ()Z

stream-chat-android-core/src/main/java/io/getstream/chat/android/models/Config.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ public data class Config(
5050
*/
5151
val readEventsEnabled: Boolean = true,
5252

53+
/**
54+
* Determines if events are fired for message deliveries. Enabled by default.
55+
*/
56+
val deliveryEventsEnabled: Boolean = true,
57+
5358
/**
5459
* Determines if events are fired for connecting and disconnecting to a chat. Enabled by default.
5560
*/

stream-chat-android-core/src/testFixtures/kotlin/io/getstream/chat/android/Mother.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,7 @@ public fun randomConfig(
526526
name: String = randomString(),
527527
typingEventsEnabled: Boolean = randomBoolean(),
528528
readEventsEnabled: Boolean = randomBoolean(),
529+
deliveryEventsEnabled: Boolean = randomBoolean(),
529530
connectEventsEnabled: Boolean = randomBoolean(),
530531
searchEnabled: Boolean = randomBoolean(),
531532
isReactionsEnabled: Boolean = randomBoolean(),
@@ -548,6 +549,7 @@ public fun randomConfig(
548549
name = name,
549550
typingEventsEnabled = typingEventsEnabled,
550551
readEventsEnabled = readEventsEnabled,
552+
deliveryEventsEnabled = deliveryEventsEnabled,
551553
connectEventsEnabled = connectEventsEnabled,
552554
searchEnabled = searchEnabled,
553555
isReactionsEnabled = isReactionsEnabled,

0 commit comments

Comments
 (0)