Skip to content

Commit 53ca8a3

Browse files
Merge pull request #127 from sendbird/v4.2.27
Add 4.2.27.
2 parents 63a0786 + 645d016 commit 53ca8a3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+221
-131
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
## v4.2.27 (Nov 6, 2024)
2+
3+
### Features
4+
- Applied the message threading policy for last message and unread message count in `GroupChannel`
5+
6+
### Improvements
7+
- Fixed a bug where update events are not called for messages with OGTags
8+
- Fixed the reconnection events to be called in pairs
9+
110
## v4.2.26 (Oct 28, 2024)
211

312
### Features

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ Before installing Sendbird Chat SDK, you need to create a Sendbird application o
5050

5151
```yaml
5252
dependencies:
53-
sendbird_chat_sdk: ^4.2.26
53+
sendbird_chat_sdk: ^4.2.27
5454
```
5555
5656
- Run `flutter pub get` command in your project directory.

lib/src/internal/main/chat/chat.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ part 'chat_notifications.dart';
6262
part 'chat_push.dart';
6363
part 'chat_user.dart';
6464

65-
const sdkVersion = '4.2.26';
65+
const sdkVersion = '4.2.27';
6666

6767
// Internal implementation for main class. Do not directly access this class.
6868
class Chat with WidgetsBindingObserver {

lib/src/internal/main/chat_manager/command_manager.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,7 @@ class CommandManager {
447447

448448
groupChannel.updateMember(event.sender);
449449

450+
// Last message
450451
if (channel is GroupChannel && message is BaseMessage) {
451452
if (groupChannel.shouldUpdateLastMessage(message, message.sender)) {
452453
shouldCallChannelChanged = true;
@@ -459,6 +460,7 @@ class CommandManager {
459460
}
460461
}
461462

463+
// Unread message count
462464
if (groupChannel.fromCache && groupChannel.updateUnreadCount(message)) {
463465
shouldCallChannelChanged = true;
464466
}

lib/src/internal/main/chat_manager/connection_manager.dart

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -258,9 +258,6 @@ class ConnectionManager {
258258
if (isReconnecting()) {
259259
reconnectTimer?.cancel();
260260
reconnectTimer = null;
261-
if (clear) {
262-
chat.eventManager.notifyReconnectFailed();
263-
}
264261
}
265262

266263
final isClosedSuccessfully = await webSocketClient.close();
@@ -298,6 +295,9 @@ class ConnectionManager {
298295
if (fromEnterBackground && !chat.isBackground && !isClosedSuccessfully) {
299296
chat.connectionManager.reconnect(reset: true); // Check
300297
} else {
298+
if (isReconnecting()) {
299+
chat.eventManager.notifyReconnectFailed();
300+
}
301301
changeState(DisconnectedState(chat: chat));
302302

303303
if (clear && disconnectedUserId.isNotEmpty) {
@@ -309,11 +309,13 @@ class ConnectionManager {
309309
Future<bool> doReconnect({bool reset = false}) async {
310310
sbLog.i(StackTrace.current, 'reset: $reset');
311311

312+
bool doNotCallReconnectStartedEvent = false;
313+
if (isReconnecting() && reset) {
314+
doNotCallReconnectStartedEvent = true;
315+
}
316+
312317
if (chat.chatContext.currentUser == null ||
313318
chat.chatContext.sessionKey == null) {
314-
if (isReconnecting()) {
315-
chat.eventManager.notifyReconnectFailed();
316-
}
317319
changeState(DisconnectedState(chat: chat));
318320
return false;
319321
}
@@ -348,8 +350,10 @@ class ConnectionManager {
348350
);
349351

350352
if (chat.chatContext.reconnectTask?.retryCount == 1) {
351-
await chat.eventDispatcher.onReconnecting();
352-
chat.eventManager.notifyReconnectStarted();
353+
if (!doNotCallReconnectStartedEvent) {
354+
await chat.eventDispatcher.onReconnecting();
355+
chat.eventManager.notifyReconnectStarted();
356+
}
353357
}
354358

355359
// ===== Reconnect =====

lib/src/internal/main/extensions/group_channel_extensions.dart

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ part of 'package:sendbird_chat_sdk/src/public/core/channel/group_channel/group_c
44

55
extension GroupChannelExtensions on GroupChannel {
66
bool shouldUpdateLastMessage(BaseMessage message, Sender? sender) {
7+
if (_shouldUpdateLastMessageByThreadingPolicy(message) == false) {
8+
return false;
9+
}
10+
711
final lm = lastMessage;
812
if (!message.isSilent ||
913
sender?.isCurrentUser == true ||
@@ -22,6 +26,10 @@ extension GroupChannelExtensions on GroupChannel {
2226
}
2327

2428
bool updateUnreadCount(RootMessage message) {
29+
if (_shouldUpdateUnreadMessageCountByThreadingPolicy(message) == false) {
30+
return false;
31+
}
32+
2533
final currentUser = chat.chatContext.currentUser;
2634

2735
if (message is BaseMessage) {
@@ -165,4 +173,46 @@ extension GroupChannelExtensions on GroupChannel {
165173
.toList()
166174
.length;
167175
}
176+
177+
bool _shouldUpdateLastMessageByThreadingPolicy(RootMessage message) {
178+
return _shouldUpdateByThreadingPolicy(
179+
message: message,
180+
threadingPolicy: chat.chatContext.appInfo?.lastMsgThreadingPolicy,
181+
);
182+
}
183+
184+
bool _shouldUpdateUnreadMessageCountByThreadingPolicy(RootMessage message) {
185+
return _shouldUpdateByThreadingPolicy(
186+
message: message,
187+
threadingPolicy: chat.chatContext.appInfo?.unreadCntThreadingPolicy,
188+
);
189+
}
190+
191+
bool _shouldUpdateByThreadingPolicy({
192+
required RootMessage message,
193+
required int? threadingPolicy,
194+
}) {
195+
bool result = true;
196+
bool isReplyMessage = message is BaseMessage &&
197+
message.parentMessageId != null &&
198+
message.parentMessageId! > 0;
199+
200+
if (isReplyMessage && threadingPolicy != null) {
201+
switch (threadingPolicy) {
202+
case 0: // NONE
203+
break;
204+
case 1: // INCLUDE_REPLY
205+
break;
206+
case 2: // EXCLUDE_REPLY
207+
result = false;
208+
break;
209+
case 3: // INCLUDE_REPLY_TO_CHANNEL
210+
if (message.isReplyToChannel == false) {
211+
result = false;
212+
}
213+
break;
214+
}
215+
}
216+
return result;
217+
}
168218
}

lib/src/internal/main/model/delivery_status.g.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/internal/main/model/group_channel_filter.g.dart

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/internal/main/model/read_status.g.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/internal/main/model/reconnect_configuration.g.dart

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/internal/main/model/unread_message_count_info.g.dart

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/internal/network/http/http_client/response/responses.g.dart

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/internal/network/websocket/command/command.g.dart

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/internal/network/websocket/event/channel_event.g.dart

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/internal/network/websocket/event/login_event.g.dart

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/internal/network/websocket/event/mcnt_event.g.dart

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/internal/network/websocket/event/message_event.g.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/internal/network/websocket/event/user_event.g.dart

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/public/core/channel/group_channel/group_channel.g.dart

Lines changed: 12 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/public/core/channel/open_channel/open_channel.g.dart

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)