Merge branch 'bugfix/deleting_thread_messages' into develop

This commit is contained in:
Bartek Stoliński
2022-02-08 15:48:14 +01:00
@@ -1083,7 +1083,7 @@ class Channel {
} else { } else {
// remove the passed message if response does // remove the passed message if response does
// not contain message // not contain message
state!.removeMessage(message); state!.removeMessage(message, decreaseReplyCount: true);
await _client.chatPersistenceClient?.deleteMessageById(messageId); await _client.chatPersistenceClient?.deleteMessageById(messageId);
} }
return res; return res;
@@ -1758,6 +1758,7 @@ class ChannelClientState {
_subscriptions.add(_channel.on(EventType.messageDeleted).listen((event) { _subscriptions.add(_channel.on(EventType.messageDeleted).listen((event) {
final message = event.message!; final message = event.message!;
if (event.hardDelete == true) { if (event.hardDelete == true) {
//do not decrease reply count here - it is done in _listenMessageUpdated
removeMessage(message, hardDelete: true); removeMessage(message, hardDelete: true);
} else { } else {
addMessage(message); addMessage(message);
@@ -1816,24 +1817,30 @@ class ChannelClientState {
} }
/// Remove a [message] from this [channelState]. /// Remove a [message] from this [channelState].
void removeMessage(Message message, {bool hardDelete = false}) { void removeMessage(
Message message, {
bool hardDelete = false,
bool decreaseReplyCount = false,
}) {
final parentId = message.parentId; final parentId = message.parentId;
// i.e. it's a thread message // i.e. it's a thread message
// 1. Remove the thread message // 1. Remove the thread message
// 2. Reduce total reply count of parent message // 2. Reduce total reply count of parent message
if (parentId != null) { if (parentId != null) {
final allMessages = [...messages]; if (decreaseReplyCount) {
final parentMessage = allMessages.firstWhereOrNull( final allMessages = [...messages];
(it) => it.id == parentId, final parentMessage = allMessages.firstWhereOrNull(
); (it) => it.id == parentId,
);
// return if message not available in the memory // return if message not available in the memory
if (parentMessage == null) return; if (parentMessage == null) return;
final replyCount = parentMessage.replyCount; final replyCount = parentMessage.replyCount;
// return if reply count is null or zero // return if reply count is null or zero
if (replyCount == null || replyCount == 0) return; if (replyCount == null || replyCount == 0) return;
addMessage(parentMessage.copyWith(replyCount: replyCount - 1)); addMessage(parentMessage.copyWith(replyCount: replyCount - 1));
}
updateThreadInfo( updateThreadInfo(
parentId, parentId,
threads[parentId]! threads[parentId]!