onNewMessage method
新消息到达时更新会话预览 / 未读。 新建会话时 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();
}