From b66a16c7f113ae79bffda30a25aa3a5e72534f3b Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Tue, 23 Feb 2021 13:37:13 +0100 Subject: [PATCH] clear expired pinned messages --- packages/stream_chat/lib/src/api/channel.dart | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index 76611438..024f8724 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -1208,11 +1208,21 @@ class Channel { void _startCleaningPinnedMessages() { _pinnedMessagesTimer = Timer.periodic(Duration(seconds: 30), (_) { final now = DateTime.now(); - final messageExpired = state.channelState.pinnedMessages - .any((m) => m.pinExpires.isBefore(now)); - if (messageExpired) { - state._channelState = - state._channelState.copyWith(pinnedMessages: state.pinnedMessages); + final expiredMessages = state.channelState.pinnedMessages + ?.where((m) => m.pinExpires?.isBefore(now) == true) + ?.toList() ?? + []; + if (expiredMessages.isNotEmpty) { + expiredMessages.forEach((m) => state.addMessage(m.copyWith( + pinExpires: null, + pinned: false, + pinnedAt: null, + pinnedBy: null, + ))); + + state._channelState = state._channelState.copyWith( + pinnedMessages: state.pinnedMessages.where(_pinIsValid()).toList(), + ); } }); } @@ -1527,12 +1537,11 @@ class ChannelClientState { channelStateStream.map((cs) => cs.messages); /// Channel pinned message list - List get pinnedMessages => - _channelState.pinnedMessages?.where(_pinIsValid())?.toList(); + List get pinnedMessages => _channelState.pinnedMessages?.toList(); /// Channel pinned message list as a stream - Stream> get pinnedMessagesStream => channelStateStream - .map((cs) => cs.pinnedMessages?.where(_pinIsValid())?.toList()); + Stream> get pinnedMessagesStream => + channelStateStream.map((cs) => cs.pinnedMessages?.toList()); /// Get channel last message Message get lastMessage => _channelState.messages?.isNotEmpty == true