onNewMessage method

Future<void> onNewMessage(
  1. Message msg, {
  2. bool fromSelf = false,
})

新消息到达时更新会话预览 / 未读。 新建会话时 ConversationInfo.isFriend 置 0(未知),等后续 session-list 回填, 避免默认成陌生人导致 Tab 错分。

Implementation

Future<void> onNewMessage(Message msg, {bool fromSelf = false}) async {
  if (msg.toFromId <= 0 || msg.talkMode <= 0) return;
  final existing = await _store.getConversation(msg.talkMode, msg.toFromId);
  final isNew = existing == null;
  var info = existing ??
      ConversationInfo(
        talkMode: msg.talkMode,
        toFromId: msg.toFromId,
        name: msg.nickname,
        avatar: msg.avatar,
        isFriend: 0,
      );
  info.msgText = msg.previewText.isNotEmpty
      ? msg.previewText
      : MsgType.previewText(msg.msgType, extra: msg.extra);
  info.updatedAt = msg.sendTime.isNotEmpty
      ? msg.sendTime
      : DateTime.now().toIso8601String();
  if (!fromSelf && msg.fromId != _store.ownerId) {
    info.unreadNum = info.unreadNum + 1;
  }
  await _store.upsertConversation(info);
  if (isNew) {
    _listener?.newConversation(info);
  } else {
    _listener?.conversationChanged(info);
  }
  await _notifyTotalUnread();
}