clear expired pinned messages
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user