11// Copyright (c) 2023 Sendbird, Inc. All rights reserved.
22
3+ import 'dart:async' ;
4+
35import 'package:collection/collection.dart' ;
46import 'package:sendbird_chat_sdk/sendbird_chat_sdk.dart' ;
57import 'package:sendbird_chat_sdk/src/internal/db/schema/channel/meta/channel_info.dart' ;
@@ -25,6 +27,7 @@ class CollectionManager {
2527 final List <GroupChannelCollection > groupChannelCollections = [];
2628 int lastRequestTsForGroupChannelChangeLogs = 0 ;
2729 String ? lastRequestTokenForGroupChannelChangeLogs;
30+ bool isDoingGroupChannelBackSync = false ;
2831
2932 // MessageCollection
3033 final List <BaseMessageCollection > baseMessageCollections = [];
@@ -34,7 +37,8 @@ class CollectionManager {
3437 String ? lastRequestTokenForPollChangeLogs;
3538 int lastRequestTsForMessagesGap = 0 ;
3639
37- bool isGroupChannelCollectionsRefreshing = false ;
40+ Completer <GroupChannelChangeLogsResult >?
41+ groupChannelCollectionsRefreshingCompleter;
3842 bool isBaseMessageCollectionsRefreshing = false ;
3943
4044 CollectionManager ({required Chat chat}) : _chat = chat {
@@ -96,19 +100,28 @@ class CollectionManager {
96100 Future <void > refreshGroupChannelCollections () async {
97101 sbLog.d (StackTrace .current);
98102
99- isGroupChannelCollectionsRefreshing = true ;
100-
101- List <Future <dynamic >> futures = [];
102-
103103 if (groupChannelCollections.isNotEmpty) {
104- futures.add (_requestGroupChannelChangeLogs ());
105- }
104+ GroupChannelChangeLogsResult result;
105+
106+ if (groupChannelCollectionsRefreshingCompleter == null ) {
107+ groupChannelCollectionsRefreshingCompleter =
108+ Completer <GroupChannelChangeLogsResult >();
109+ result = await _requestGroupChannelChangeLogs ();
110+ groupChannelCollectionsRefreshingCompleter? .complete (result);
111+ groupChannelCollectionsRefreshingCompleter = null ;
112+ } else {
113+ result = await groupChannelCollectionsRefreshingCompleter! .future;
114+ }
106115
107- if (futures.isNotEmpty) {
108- await Future .wait (futures);
116+ if (result.updatedChannels.isNotEmpty ||
117+ result.deletedChannelUrls.isNotEmpty) {
118+ sendEventsToGroupChannelCollectionList (
119+ eventSource: CollectionEventSource .channelChangeLogs,
120+ updatedChannels: result.updatedChannels,
121+ deletedChannelUrls: result.deletedChannelUrls,
122+ );
123+ }
109124 }
110-
111- isGroupChannelCollectionsRefreshing = false ;
112125 }
113126
114127 Future <void > _refreshBaseMessageCollections () async {
@@ -844,3 +857,13 @@ class InternalFeedChannelHandlerForCollectionManager
844857// }
845858// }
846859}
860+
861+ class GroupChannelChangeLogsResult {
862+ final List <GroupChannel > updatedChannels;
863+ final List <String > deletedChannelUrls;
864+
865+ GroupChannelChangeLogsResult ({
866+ required this .updatedChannels,
867+ required this .deletedChannelUrls,
868+ });
869+ }
0 commit comments