ChannelClientState constructor

ChannelClientState(
  1. Channel _channel,
  2. ChannelState channelState
)

Creates a new instance listening to events and updating the state.

Implementation

ChannelClientState(
  this._channel,
  ChannelState channelState,
  //ignore: unnecessary_parenthesis
) : _debouncedUpdatePersistenceChannelState = ((ChannelState state) =>
              _channel._client.chatPersistenceClient
                  ?.updateChannelState(state))
          .debounced(const Duration(seconds: 1)) {
  _retryQueue = RetryQueue(
    channel: _channel,
    logger: _channel.client.detachedLogger(
      '⟳ (${generateHash([_channel.cid])})',
    ),
  );

  _checkExpiredAttachmentMessages(channelState);

  _channelStateController = BehaviorSubject.seeded(channelState);

  _listenTypingEvents();

  _listenMessageNew();

  _listenMessageDeleted();

  _listenMessageUpdated();

  _listenReactions();

  _listenReactionDeleted();

  _listenReadEvents();

  _listenChannelTruncated();

  _listenChannelUpdated();

  _listenMemberAdded();

  _listenMemberRemoved();

  _listenMemberBanned();

  _listenMemberUnbanned();

  _startCleaning();

  _startCleaningPinnedMessages();

  _channel._client.chatPersistenceClient
      ?.getChannelThreads(_channel.cid!)
      .then((threads) {
    _threads = threads;
  }).then((_) {
    _channel._client.chatPersistenceClient
        ?.getChannelStateByCid(_channel.cid!)
        .then((state) {
      // Replacing the persistence state members with the latest
      // `channelState.members` as they may have changes over the time.
      updateChannelState(state.copyWith(members: channelState.members));
      retryFailedMessages();
    });
  });
}