From e4c6d8ccda3a5de4dcdf0b53ca48771ffa4fd146 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Thu, 24 Mar 2022 20:46:05 +0530 Subject: [PATCH] fix(llc): also save reactions while saving threads data in persistence Signed-off-by: xsahil03x --- .../stream_chat/lib/src/client/channel.dart | 8 ++-- .../lib/src/db/chat_persistence_client.dart | 38 +++++++++++++------ 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index 25aaa249..b2887168 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -2122,12 +2122,12 @@ class ChannelClientState { final BehaviorSubject>> _threadsController = BehaviorSubject.seeded({}); - set _threads(Map> v) { - _channel.client.chatPersistenceClient?.updateMessages( + set _threads(Map> threads) { + _threadsController.add(threads); + _channel.client.chatPersistenceClient?.updateChannelThreads( _channel.cid!, - v.values.expand((v) => v).toList(), + threads, ); - _threadsController.add(v); } /// Channel related typing users last value. diff --git a/packages/stream_chat/lib/src/db/chat_persistence_client.dart b/packages/stream_chat/lib/src/db/chat_persistence_client.dart index 82ba181a..4e10dae3 100644 --- a/packages/stream_chat/lib/src/db/chat_persistence_client.dart +++ b/packages/stream_chat/lib/src/db/chat_persistence_client.dart @@ -197,6 +197,22 @@ abstract class ChatPersistenceClient { /// Deletes all the members by channel [cids] Future deleteMembersByCids(List cids); + /// Updates the channel [cid] threads data along with reactions and users. + Future updateChannelThreads( + String cid, + Map> threads, + ) async { + final messages = threads.values.expand((it) => it).toList(); + final reactions = messages.expand(_expandReactions).toList(); + final users = messages.map((it) => it.user).withNullifyer.toList(); + + await Future.wait([ + updateMessages(cid, messages), + updateReactions(reactions), + updateUsers(users), + ]); + } + /// Update the channel state data using [channelState] Future updateChannelState(ChannelState channelState) => updateChannelStates([channelState]); @@ -239,17 +255,8 @@ abstract class ChatPersistenceClient { channelWithMessages[cid] = messages; channelWithPinnedMessages[cid] = pinnedMessages; - List expandReactions(Message message) { - final own = message.ownReactions; - final latest = message.latestReactions; - return [ - if (own != null) ...own.where((r) => r.userId != null), - if (latest != null) ...latest.where((r) => r.userId != null), - ]; - } - - reactions.addAll(messages.expand(expandReactions)); - pinnedReactions.addAll(pinnedMessages.expand(expandReactions)); + reactions.addAll(messages.expand(_expandReactions)); + pinnedReactions.addAll(pinnedMessages.expand(_expandReactions)); users.addAll([ channel.createdBy, @@ -292,4 +299,13 @@ abstract class ChatPersistenceClient { ), ]); } + + List _expandReactions(Message message) { + final own = message.ownReactions; + final latest = message.latestReactions; + return [ + if (own != null) ...own.where((r) => r.userId != null), + if (latest != null) ...latest.where((r) => r.userId != null), + ]; + } }