@@ -117,7 +117,6 @@ extension GroupChannelCollectionManager on CollectionManager {
117117 List <GroupChannel >? addedChannels,
118118 List <GroupChannel >? updatedChannels,
119119 List <String >? deletedChannelUrls,
120- bool doNotUpsertAddedChannels = false , // (includeEmpty == false)
121120 }) async {
122121 sbLog.d (StackTrace .current, eventSource.toString ());
123122
@@ -126,8 +125,14 @@ extension GroupChannelCollectionManager on CollectionManager {
126125 if (deletedChannelUrls != null ) {
127126 await _chat.dbManager.deleteGroupChannels (deletedChannelUrls);
128127 }
129- if (addedChannels != null && ! doNotUpsertAddedChannels) {
130- await _chat.dbManager.upsertGroupChannels (addedChannels);
128+ if (addedChannels != null ) {
129+ if (eventSource == CollectionEventSource .channelLoadMore ||
130+ eventSource == CollectionEventSource .channelCacheLoadMore ||
131+ eventSource == CollectionEventSource .channelChangeLogs) {
132+ // Do upsertGroupChannels() in sendEventsToGroupChannelCollection().
133+ } else {
134+ await _chat.dbManager.upsertGroupChannels (addedChannels);
135+ }
131136 }
132137 if (updatedChannels != null ) {
133138 await _chat.dbManager.upsertGroupChannels (updatedChannels);
@@ -173,18 +178,28 @@ extension GroupChannelCollectionManager on CollectionManager {
173178
174179 //+ [DBManager]
175180 if (_chat.dbManager.isEnabled ()) {
176- if (eventSource == CollectionEventSource .channelLoadMore ||
177- eventSource == CollectionEventSource .channelCacheLoadMore) {
178- if (deletedChannelUrls != null ) {
179- await _chat.dbManager.deleteGroupChannels (deletedChannelUrls);
180- }
181- if (addedChannels != null ) {
181+ if (deletedChannelUrls != null ) {
182+ await _chat.dbManager.deleteGroupChannels (deletedChannelUrls);
183+ }
184+ if (addedChannels != null ) {
185+ if (eventSource == CollectionEventSource .channelLoadMore ||
186+ eventSource == CollectionEventSource .channelCacheLoadMore ||
187+ eventSource == CollectionEventSource .channelChangeLogs) {
188+ List <GroupChannel > unavailableChannels = [];
189+ for (final channel in addedChannels) {
190+ if (! await channelCollection.canAddChannel (eventSource, channel)) {
191+ unavailableChannels.add (channel);
192+ }
193+ }
194+ for (final channel in unavailableChannels) {
195+ addedChannels.remove (channel);
196+ }
182197 await _chat.dbManager.upsertGroupChannels (addedChannels);
183198 }
184- if (updatedChannels != null ) {
185- // Not used
186- await _chat.dbManager. upsertGroupChannels (updatedChannels);
187- }
199+ }
200+ if (updatedChannels != null ) {
201+ // Not used
202+ await _chat.dbManager. upsertGroupChannels (updatedChannels);
188203 }
189204 }
190205 //- [DBManager]
0 commit comments