updateChannelState method

void updateChannelState(
  1. ChannelState updatedState
)

Update channelState with updated information.

Implementation

void updateChannelState(ChannelState updatedState) {
  final newMessages = <Message>[
    ...updatedState.messages,
    ..._channelState.messages
        .where((m) =>
            !updatedState.messages.any((newMessage) => newMessage.id == m.id))
        .toList(),
  ]..sort(_sortByCreatedAt);

  final newWatchers = <User>[
    ...updatedState.watchers,
    ..._channelState.watchers
        .where((w) =>
            !updatedState.watchers.any((newWatcher) => newWatcher.id == w.id))
        .toList(),
  ];

  final newMembers = <Member>[
    ...updatedState.members,
  ];

  final newReads = <Read>[
    ...updatedState.read,
    ..._channelState.read
        .where((r) =>
            !updatedState.read.any((newRead) => newRead.user.id == r.user.id))
        .toList(),
  ];

  _checkExpiredAttachmentMessages(updatedState);

  _channelState = _channelState.copyWith(
    messages: newMessages,
    channel: _channelState.channel?.merge(updatedState.channel),
    watchers: newWatchers,
    watcherCount: updatedState.watcherCount,
    members: newMembers,
    read: newReads,
    pinnedMessages: updatedState.pinnedMessages,
  );
}