clear expired pinned messages

This commit is contained in:
Salvatore Giordano
2021-02-23 13:37:13 +01:00
parent 750c5305f4
commit b66a16c7f1
+18 -9
View File
@@ -1208,11 +1208,21 @@ class Channel {
void _startCleaningPinnedMessages() { void _startCleaningPinnedMessages() {
_pinnedMessagesTimer = Timer.periodic(Duration(seconds: 30), (_) { _pinnedMessagesTimer = Timer.periodic(Duration(seconds: 30), (_) {
final now = DateTime.now(); final now = DateTime.now();
final messageExpired = state.channelState.pinnedMessages final expiredMessages = state.channelState.pinnedMessages
.any((m) => m.pinExpires.isBefore(now)); ?.where((m) => m.pinExpires?.isBefore(now) == true)
if (messageExpired) { ?.toList() ??
state._channelState = [];
state._channelState.copyWith(pinnedMessages: state.pinnedMessages); 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); channelStateStream.map((cs) => cs.messages);
/// Channel pinned message list /// Channel pinned message list
List<Message> get pinnedMessages => List<Message> get pinnedMessages => _channelState.pinnedMessages?.toList();
_channelState.pinnedMessages?.where(_pinIsValid())?.toList();
/// Channel pinned message list as a stream /// Channel pinned message list as a stream
Stream<List<Message>> get pinnedMessagesStream => channelStateStream Stream<List<Message>> get pinnedMessagesStream =>
.map((cs) => cs.pinnedMessages?.where(_pinIsValid())?.toList()); channelStateStream.map((cs) => cs.pinnedMessages?.toList());
/// Get channel last message /// Get channel last message
Message get lastMessage => _channelState.messages?.isNotEmpty == true Message get lastMessage => _channelState.messages?.isNotEmpty == true