canAddChannel method
Future<bool>
canAddChannel(
- CollectionEventSource eventSource,
- GroupChannel addedChannel, {
- bool checkToUpdateChannel = false,
Implementation
Future<bool> canAddChannel(
CollectionEventSource eventSource,
GroupChannel addedChannel, {
bool checkToUpdateChannel = false,
}) async {
if (_isLoadedOnce == false) {
return false;
}
if (_query.includeEmpty == false) {
if (checkToUpdateChannel) {
// This is related to messageDeletionTimestamp.
if (eventSource == CollectionEventSource.eventChannelChanged) {
if (addedChannel.lastMessage == null) {
return false;
}
}
} else {
if (eventSource == CollectionEventSource.channelCacheLoadMore ||
eventSource == CollectionEventSource.channelLoadMore) {
if (addedChannel.lastMessage == null) {
return false;
}
} else if (eventSource == CollectionEventSource.eventMessageSent) {
if (addedChannel.lastMessage == null) {
return true; // Check
}
}
}
}
if (eventSource == CollectionEventSource.channelCacheLoadMore ||
eventSource == CollectionEventSource.channelLoadMore) {
return true;
}
if (channelList.isNotEmpty && hasMore) {
final a = channelList.last;
final b = addedChannel;
switch (_query.order) {
case GroupChannelListQueryOrder.chronological:
if (a.createdAt != null && b.createdAt != null) {
if (b.createdAt!.compareTo(a.createdAt!) == -1) {
// a.createdAt > b.createdAt
return false;
}
}
break;
case GroupChannelListQueryOrder.latestLastMessage:
if (a.lastMessage != null && b.lastMessage == null) {
// a < b
if (checkToUpdateChannel) return true;
return false;
} else if (a.lastMessage == null && b.lastMessage != null) {
// return true
} else if (a.lastMessage != null && b.lastMessage != null) {
if (b.lastMessage!.createdAt.compareTo(a.lastMessage!.createdAt) ==
-1) {
// a.lastMessage!.createdAt > b.lastMessage!.createdAt
if (checkToUpdateChannel) return true;
return false;
}
} else if (a.createdAt != null && b.createdAt != null) {
if (b.createdAt!.compareTo(a.createdAt!) == -1) {
// a.createdAt > b.createdAt
return false;
}
}
break;
case GroupChannelListQueryOrder.channelNameAlphabetical:
if (a.name.compareTo(b.name) == -1) {
// a.name < b.name
return false;
}
break;
case GroupChannelListQueryOrder.metadataValueAlphabetical:
// TODO: (?)
// return true
break;
}
}
if (checkToUpdateChannel) {
if (eventSource == CollectionEventSource.eventChannelHidden) {
return _canAddChannel(query: _query, channel: addedChannel);
}
} else {
//+ DBManager
if (_chat.dbManager.isEnabled()) {
if (await _chat.dbManager.canAddChannel(
query: _query, channelUrl: addedChannel.channelUrl) ==
false) {
return false;
}
}
//- DBManager
else {
if (_canAddChannel(query: _query, channel: addedChannel) == false) {
return false;
}
}
}
return true;
}