fetchPeerReadState method

Future<MessageRead?> fetchPeerReadState({
  1. required int talkMode,
  2. required int toFromId,
})

回填对端已读水位(打开私聊时调用)。

Implementation

Future<MessageRead?> fetchPeerReadState({
  required int talkMode,
  required int toFromId,
}) async {
  if (talkMode != TalkMode.private || toFromId <= 0) return null;
  try {
    final map = await _net.http.post(
      '/api/v1/talk/message-read-state',
      data: {'talk_mode': talkMode, 'to_from_id': toFromId},
    );
    final read = MessageRead.fromJson({
      ...map,
      'talk_mode': talkMode,
      'from_id': toFromId,
      'to_from_id': toFromId,
    });
    if (read.seq > 0) {
      final key = _convKey(talkMode, toFromId);
      final cur = _peerReadSeq[key] ?? 0;
      if (read.seq >= cur) {
        _peerReadSeq[key] = read.seq;
        _listener?.recvMessageRead(read);
      }
    }
    return read;
  } catch (e) {
    GoChatLogger.e('fetchPeerReadState failed', e);
    return null;
  }
}