@@ -211,22 +211,61 @@ class CGroupChannel extends CBaseChannel {
211211 return await cGroupChannel? .toGroupChannel (chat, isar);
212212 }
213213
214+ static Future <bool > canAddChannel (
215+ Chat chat,
216+ Isar isar,
217+ GroupChannelListQuery query,
218+ String channelUrl,
219+ ) async {
220+ final groupChannels = await _getChannels (
221+ chat: chat,
222+ isar: isar,
223+ query: query,
224+ channelUrl: channelUrl,
225+ );
226+ return groupChannels.isNotEmpty;
227+ }
228+
214229 static Future <List <GroupChannel >> getChannels (
215230 Chat chat,
216231 Isar isar,
217232 GroupChannelListQuery query,
218233 int ? offset,
219234 ) async {
235+ return _getChannels (
236+ chat: chat,
237+ isar: isar,
238+ query: query,
239+ offset: offset,
240+ );
241+ }
242+
243+ static Future <List <GroupChannel >> _getChannels ({
244+ required Chat chat,
245+ required Isar isar,
246+ required GroupChannelListQuery query,
247+ int ? offset,
248+ String ? channelUrl,
249+ }) async {
220250 // [includeMetaData]
221251 // When calling API, this value have to be `true` to make chunk.
222252 // But we must always call API for GroupChannel, because we must always get `hasNext` value from API.
223253 // So we do not need the chunk for GroupChannel.
224254
225- final cGroupChannels = await isar.cGroupChannels
226- .where ()
227- .channelTypeEqualToAnyChannelUrl (ChannelType .group) // Check
228- .filter ()
255+ QueryBuilder <CGroupChannel , CGroupChannel , QFilterCondition > queryBuilder;
256+ if (channelUrl != null && channelUrl.isNotEmpty) {
257+ queryBuilder = isar.cGroupChannels
258+ .where ()
259+ .channelTypeChannelUrlEqualTo (ChannelType .group, channelUrl)
260+ .filter ();
261+ } else {
262+ queryBuilder = isar.cGroupChannels
263+ .where ()
264+ .channelTypeEqualToAnyChannelUrl (ChannelType .group) // Check
265+ .filter ();
266+ }
229267
268+ final cGroupChannels = await queryBuilder
230269 // channelUrlsFilter
231270 .optional (query.channelUrlsFilter.isNotEmpty, (q) {
232271 return q.group ((groupQ) {
0 commit comments