fix(llc): fix pinnedMessage inconsistencies.

Signed-off-by: xsahil03x <[email protected]>
This commit is contained in:
Sahil Kumar
2022-02-23 17:55:34 +05:30
committed by xsahil03x
parent ae44406b96
commit a361e89aba
2 changed files with 27 additions and 20 deletions
@@ -1744,15 +1744,6 @@ class ChannelClientState {
ownReactions: oldMessage?.ownReactions,
);
addMessage(message);
if (message.pinned) {
_channelState = _channelState.copyWith(
pinnedMessages: [
..._channelState.pinnedMessages,
message,
],
);
}
}));
}
@@ -1804,8 +1795,24 @@ class ChannelClientState {
newMessages.add(message);
}
final newPinnedMessages = [...pinnedMessages];
final oldPinnedIndex =
newPinnedMessages.indexWhere((m) => m.id == message.id);
// Handle pinned messages
if (message.pinned) {
if (oldPinnedIndex != -1) {
newPinnedMessages[oldPinnedIndex] = message;
} else {
newPinnedMessages.add(message);
}
} else {
newPinnedMessages.removeWhere((m) => m.id == message.id);
}
_channelState = _channelState.copyWith(
messages: newMessages..sort(_sortByCreatedAt),
pinnedMessages: newPinnedMessages,
channel: _channelState.channel?.copyWith(
lastMessageAt: message.createdAt,
),
@@ -1898,11 +1905,12 @@ class ChannelClientState {
.distinct(const ListEquality().equals);
/// Channel pinned message list.
List<Message> get pinnedMessages => _channelState.pinnedMessages.toList();
List<Message> get pinnedMessages => _channelState.pinnedMessages;
/// Channel pinned message list as a stream.
Stream<List<Message>> get pinnedMessagesStream =>
channelStateStream.map((cs) => cs.pinnedMessages.toList());
Stream<List<Message>> get pinnedMessagesStream => channelStateStream
.map((cs) => cs.pinnedMessages)
.distinct(const ListEquality().equals);
/// Get channel last message.
Message? get lastMessage =>
@@ -2213,7 +2221,7 @@ class ChannelClientState {
.toList();
updateChannelState(_channelState.copyWith(
pinnedMessages: pinnedMessages.where(_pinIsValid()).toList(),
pinnedMessages: pinnedMessages.where(_pinIsValid).toList(),
messages: expiredMessages,
));
}
@@ -2250,7 +2258,7 @@ class ChannelClientState {
}
}
bool Function(Message) _pinIsValid() {
bool _pinIsValid(Message message) {
final now = DateTime.now();
return (Message m) => m.pinExpires!.isAfter(now);
return message.pinExpires!.isAfter(now);
}
@@ -56,7 +56,7 @@ class ChannelState {
ChannelModel? channel,
List<Message>? messages,
List<Member>? members,
List<Message>? pinnedMessages,
List<Message> pinnedMessages = _emptyPinnedMessages,
int? watcherCount,
List<User>? watchers,
List<Read>? read,
@@ -67,10 +67,9 @@ class ChannelState {
members: members ?? this.members,
// Hack to avoid using the default value in case nothing is provided.
// FIXME: Use non-nullable by default instead of empty list.
pinnedMessages:
pinnedMessages == null || pinnedMessages == _emptyPinnedMessages
? this.pinnedMessages
: pinnedMessages,
pinnedMessages: pinnedMessages == _emptyPinnedMessages
? this.pinnedMessages
: pinnedMessages,
watcherCount: watcherCount ?? this.watcherCount,
watchers: watchers ?? this.watchers,
read: read ?? this.read,