canAddMessage method
Implementation
bool canAddMessage(
CollectionEventSource eventSource,
RootMessage addedMessage,
) {
if (eventSource == CollectionEventSource.messageCacheInitialize ||
eventSource == CollectionEventSource.messageCacheLoadPrevious ||
eventSource == CollectionEventSource.messageCacheLoadNext ||
eventSource == CollectionEventSource.messageInitialize ||
eventSource == CollectionEventSource.messageLoadPrevious ||
eventSource == CollectionEventSource.messageLoadNext ||
eventSource == CollectionEventSource.messageFill ||
eventSource == CollectionEventSource.localMessagePendingCreated ||
eventSource == CollectionEventSource.localMessageFailed ||
eventSource == CollectionEventSource.localMessageCanceled ||
eventSource == CollectionEventSource.localMessageResendStarted) {
return true;
}
if (_isInitialized == false) {
return false;
}
// hasPrevious
if (hasPrevious) {
if (messageList.isNotEmpty) {
if (params.reverse) {
if (addedMessage.createdAt < messageList.last.createdAt) {
return false;
}
} else {
if (addedMessage.createdAt < messageList.first.createdAt) {
return false;
}
}
}
}
// hasNext
if (hasNext) {
if (messageList.isNotEmpty) {
if (params.reverse) {
if (addedMessage.createdAt > messageList.first.createdAt) {
return false;
}
} else {
if (addedMessage.createdAt > messageList.last.createdAt) {
return false;
}
}
}
}
// [Filter] messageType
switch (params.messageType) {
case MessageTypeFilter.all:
break;
case MessageTypeFilter.user:
if (addedMessage.messageType == MessageType.file ||
addedMessage.messageType == MessageType.admin ||
addedMessage.messageType == MessageType.notification) {
return false;
}
break;
case MessageTypeFilter.file:
if (addedMessage.messageType == MessageType.user ||
addedMessage.messageType == MessageType.admin ||
addedMessage.messageType == MessageType.notification) {
return false;
}
break;
case MessageTypeFilter.admin:
if (addedMessage.messageType == MessageType.user ||
addedMessage.messageType == MessageType.file ||
addedMessage.messageType == MessageType.notification) {
return false;
}
break;
}
// [Filter] customTypes
if (params.customTypes != null && params.customTypes!.isNotEmpty) {
bool found = false;
for (final customType in params.customTypes!) {
if (addedMessage.customType == customType) {
found = true;
break;
}
}
if (!found) {
return false;
}
}
// [Filter] senderIds
if (addedMessage is BaseMessage &&
params.senderIds != null &&
params.customTypes!.isNotEmpty) {
bool found = false;
for (final senderId in params.senderIds!) {
if (addedMessage.sender?.userId == senderId) {
found = true;
break;
}
}
if (!found) {
return false;
}
}
return true;
}