Reduce noisy runtime logging in frontend flows.
This keeps chat, notification, and post interactions cleaner in production while preserving error-level visibility.
This commit is contained in:
@@ -250,7 +250,6 @@ class MessageManager {
|
||||
|
||||
async initialize(): Promise<void> {
|
||||
if (this.state.isInitialized) {
|
||||
console.log('[MessageManager] 已经初始化,跳过');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -259,7 +258,6 @@ class MessageManager {
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('[MessageManager] 开始初始化');
|
||||
|
||||
this.initializePromise = (async () => {
|
||||
try {
|
||||
@@ -280,7 +278,6 @@ class MessageManager {
|
||||
await this.fetchUnreadCount();
|
||||
|
||||
this.state.isInitialized = true;
|
||||
console.log('[MessageManager] 初始化完成');
|
||||
|
||||
this.notifySubscribers({
|
||||
type: 'conversations_updated',
|
||||
@@ -310,7 +307,6 @@ class MessageManager {
|
||||
}
|
||||
|
||||
destroy(): void {
|
||||
console.log('[MessageManager] 销毁资源');
|
||||
if (this.wsUnsubscribe) {
|
||||
this.wsUnsubscribe();
|
||||
this.wsUnsubscribe = null;
|
||||
@@ -328,41 +324,34 @@ class MessageManager {
|
||||
this.wsUnsubscribe();
|
||||
}
|
||||
|
||||
console.log('[MessageManager] 初始化WebSocket监听');
|
||||
|
||||
// 监听私聊消息
|
||||
websocketService.on('chat', (message: WSChatMessage) => {
|
||||
console.log('[MessageManager] 收到私聊消息:', message.id);
|
||||
this.handleNewMessage(message);
|
||||
});
|
||||
|
||||
// 监听群聊消息
|
||||
websocketService.on('group_message', (message: WSGroupChatMessage) => {
|
||||
console.log('[MessageManager] 收到群聊消息:', message.id);
|
||||
this.handleNewMessage(message);
|
||||
});
|
||||
|
||||
// 监听私聊已读回执
|
||||
websocketService.on('read', (message: WSReadMessage) => {
|
||||
console.log('[MessageManager] 收到已读回执:', message);
|
||||
this.handleReadReceipt(message);
|
||||
});
|
||||
|
||||
// 监听群聊已读回执
|
||||
websocketService.on('group_read', (message: WSGroupReadMessage) => {
|
||||
console.log('[MessageManager] 收到群聊已读回执:', message);
|
||||
this.handleGroupReadReceipt(message);
|
||||
});
|
||||
|
||||
// 监听私聊消息撤回
|
||||
websocketService.on('recall', (message: WSRecallMessage) => {
|
||||
console.log('[MessageManager] 收到私聊撤回:', message);
|
||||
this.handleRecallMessage(message);
|
||||
});
|
||||
|
||||
// 监听群聊消息撤回
|
||||
websocketService.on('group_recall', (message: WSGroupRecallMessage) => {
|
||||
console.log('[MessageManager] 收到群聊撤回:', message);
|
||||
this.handleGroupRecallMessage(message);
|
||||
});
|
||||
|
||||
@@ -373,13 +362,11 @@ class MessageManager {
|
||||
|
||||
// 监听群通知
|
||||
websocketService.on('group_notice', (message: WSGroupNoticeMessage) => {
|
||||
console.log('[MessageManager] 收到群通知:', message);
|
||||
this.handleGroupNotice(message);
|
||||
});
|
||||
|
||||
// 监听连接状态
|
||||
websocketService.onConnect(() => {
|
||||
console.log('[MessageManager] WebSocket已连接');
|
||||
this.state.isWebSocketConnected = true;
|
||||
this.notifySubscribers({
|
||||
type: 'connection_changed',
|
||||
@@ -403,7 +390,6 @@ class MessageManager {
|
||||
});
|
||||
|
||||
websocketService.onDisconnect(() => {
|
||||
console.log('[MessageManager] WebSocket已断开');
|
||||
this.state.isWebSocketConnected = false;
|
||||
this.notifySubscribers({
|
||||
type: 'connection_changed',
|
||||
@@ -595,29 +581,15 @@ class MessageManager {
|
||||
const currentUserId = this.getCurrentUserId();
|
||||
|
||||
// 【调试日志】追踪消息来源和重复问题
|
||||
console.log('[MessageManager][DEBUG] 处理新消息:', {
|
||||
messageId: id,
|
||||
conversationId: normalizedConversationId,
|
||||
senderId: sender_id,
|
||||
seq,
|
||||
currentUserId,
|
||||
messageType: message.type,
|
||||
isAck: _isAck,
|
||||
currentConversationId: this.state.currentConversationId,
|
||||
isActiveConversation: normalizedConversationId === this.state.currentConversationId,
|
||||
timestamp: Date.now(),
|
||||
});
|
||||
|
||||
// 0. 如果是ACK消息,直接跳过不增加未读数(ACK是发送确认,不是新消息)
|
||||
if (_isAck) {
|
||||
console.log('[MessageManager][DEBUG] ACK消息,跳过未读数处理:', id);
|
||||
// 但仍然需要更新消息列表(因为ACK包含完整消息内容)
|
||||
// 继续处理但不增加未读数
|
||||
}
|
||||
|
||||
// 1. 消息去重检查 - 防止ACK消息和正常消息重复处理
|
||||
if (this.isMessageProcessed(id)) {
|
||||
console.log('[MessageManager][DEBUG] 消息已处理,跳过:', id);
|
||||
return;
|
||||
}
|
||||
this.markMessageAsProcessed(id);
|
||||
@@ -627,7 +599,6 @@ class MessageManager {
|
||||
// 异步获取发送者信息,不阻塞消息显示
|
||||
this.getSenderInfo(sender_id).then(user => {
|
||||
if (user) {
|
||||
console.log('[MessageManager][DEBUG] 获取到发送者信息:', { userId: sender_id, nickname: user.nickname });
|
||||
// 更新消息对象中的发送者信息
|
||||
const messages = this.state.messagesMap.get(normalizedConversationId);
|
||||
if (messages) {
|
||||
@@ -636,7 +607,6 @@ class MessageManager {
|
||||
m.id === id ? { ...m, sender: user } : m
|
||||
);
|
||||
this.state.messagesMap.set(normalizedConversationId, updatedMessages);
|
||||
console.log('[MessageManager][DEBUG] 更新消息发送者信息:', { messageId: id, sender: user.nickname });
|
||||
// 通知订阅者消息已更新
|
||||
this.notifySubscribers({
|
||||
type: 'messages_updated',
|
||||
@@ -648,10 +618,9 @@ class MessageManager {
|
||||
});
|
||||
}
|
||||
} else {
|
||||
console.log('[MessageManager][DEBUG] 未能获取到发送者信息:', { userId: sender_id });
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error('[MessageManager][DEBUG] 获取发送者信息失败:', { userId: sender_id, error });
|
||||
console.error('[MessageManager][ERROR] 获取发送者信息失败:', { userId: sender_id, error });
|
||||
});
|
||||
}
|
||||
|
||||
@@ -694,15 +663,6 @@ class MessageManager {
|
||||
const isActiveConversation = normalizedConversationId === this.state.currentConversationId;
|
||||
|
||||
// 【调试日志】追踪未读数增加逻辑
|
||||
console.log('[MessageManager][DEBUG] 未读数判断:', {
|
||||
messageId: id,
|
||||
sender_id,
|
||||
currentUserId,
|
||||
isCurrentUserMessage,
|
||||
isActiveConversation,
|
||||
currentConversationId: this.state.currentConversationId,
|
||||
shouldIncrement: !isCurrentUserMessage && !isActiveConversation,
|
||||
});
|
||||
|
||||
// 修复:确保当前用户发送的消息不会增加未读数
|
||||
// 同时确保currentUserId有效(避免undefined === undefined的情况)
|
||||
@@ -710,15 +670,8 @@ class MessageManager {
|
||||
const shouldIncrementUnread = !isCurrentUserMessage && !isActiveConversation && !!currentUserId && !_isAck;
|
||||
|
||||
if (shouldIncrementUnread) {
|
||||
console.log('[MessageManager][DEBUG] 增加未读数:', { conversationId: conversation_id, messageId: id });
|
||||
this.incrementUnreadCount(normalizedConversationId);
|
||||
} else {
|
||||
console.log('[MessageManager][DEBUG] 跳过未读数增加:', {
|
||||
isCurrentUserMessage,
|
||||
isActiveConversation,
|
||||
hasCurrentUserId: !!currentUserId,
|
||||
isAck: _isAck,
|
||||
});
|
||||
}
|
||||
|
||||
// 6. 如果是当前活动会话,自动标记已读
|
||||
@@ -766,11 +719,6 @@ class MessageManager {
|
||||
const conversation = this.state.conversations.get(conversationId);
|
||||
|
||||
if (conversation) {
|
||||
console.log('[MessageManager][DEBUG] updateConversationWithNewMessage - 更新前:', {
|
||||
conversationId,
|
||||
prevUnreadCount: conversation.unread_count,
|
||||
conversationRef: conversation,
|
||||
});
|
||||
|
||||
// 更新现有会话
|
||||
const updatedConv: ConversationResponse = {
|
||||
@@ -783,13 +731,6 @@ class MessageManager {
|
||||
|
||||
this.state.conversations.set(conversationId, updatedConv);
|
||||
|
||||
console.log('[MessageManager][DEBUG] updateConversationWithNewMessage - 更新后:', {
|
||||
conversationId,
|
||||
newUnreadCount: updatedConv.unread_count,
|
||||
updatedConvRef: updatedConv,
|
||||
conversationInMap: this.state.conversations.get(conversationId),
|
||||
isSameRef: updatedConv === this.state.conversations.get(conversationId),
|
||||
});
|
||||
} else {
|
||||
// 新会话,需要获取详情
|
||||
// 异步获取会话详情
|
||||
@@ -812,14 +753,12 @@ class MessageManager {
|
||||
*/
|
||||
private handleReadReceipt(message: WSReadMessage): void {
|
||||
// 可以在这里处理对方已读的状态更新
|
||||
console.log('[MessageManager] 处理已读回执:', message);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理群聊已读回执
|
||||
*/
|
||||
private handleGroupReadReceipt(message: WSGroupReadMessage): void {
|
||||
console.log('[MessageManager] 处理群聊已读回执:', message);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1001,12 +940,10 @@ class MessageManager {
|
||||
*/
|
||||
async fetchConversations(forceRefresh = false): Promise<void> {
|
||||
if (this.state.isLoadingConversations && !forceRefresh) {
|
||||
console.log('[MessageManager] 会话列表正在加载中,跳过');
|
||||
return;
|
||||
}
|
||||
|
||||
this.state.isLoadingConversations = true;
|
||||
console.log('[MessageManager] 获取会话列表');
|
||||
|
||||
try {
|
||||
const response = await messageService.getConversations(1, 20, forceRefresh);
|
||||
@@ -1022,12 +959,6 @@ class MessageManager {
|
||||
// 如果服务器返回的 unread_count > 0,但本地有更晚的已读记录,则保留本地状态
|
||||
const shouldPreserveLocalRead = conv.unread_count > 0;
|
||||
if (shouldPreserveLocalRead) {
|
||||
console.log('[MessageManager] fetchConversations 保护已读状态:', {
|
||||
conversationId: conv.id,
|
||||
serverUnread: conv.unread_count,
|
||||
readTimestamp: readRecord.timestamp,
|
||||
version: readRecord.version,
|
||||
});
|
||||
this.state.conversations.set(conv.id, { ...conv, unread_count: 0 });
|
||||
} else {
|
||||
this.state.conversations.set(conv.id, conv);
|
||||
@@ -1056,10 +987,6 @@ class MessageManager {
|
||||
}
|
||||
}
|
||||
|
||||
console.log('[MessageManager] 会话列表获取完成:', {
|
||||
count: conversations.length,
|
||||
totalUnread,
|
||||
});
|
||||
|
||||
// 通知更新
|
||||
this.notifySubscribers({
|
||||
@@ -1134,12 +1061,10 @@ class MessageManager {
|
||||
async fetchMessages(conversationId: string, afterSeq?: number): Promise<void> {
|
||||
// 防止重复加载
|
||||
if (this.state.loadingMessagesSet.has(conversationId)) {
|
||||
console.log('[MessageManager] 消息正在加载中,跳过:', conversationId);
|
||||
return;
|
||||
}
|
||||
|
||||
this.state.loadingMessagesSet.add(conversationId);
|
||||
console.log('[MessageManager][DEBUG] 获取消息开始:', { conversationId, afterSeq, currentConversationId: this.state.currentConversationId, timestamp: Date.now() });
|
||||
|
||||
try {
|
||||
const mergeMessages = (base: MessageResponse[], incoming: MessageResponse[]): MessageResponse[] => {
|
||||
@@ -1163,7 +1088,6 @@ class MessageManager {
|
||||
console.warn('[MessageManager] 读取本地消息失败,回退到服务端同步:', error);
|
||||
}
|
||||
|
||||
console.log('[MessageManager] 本地消息:', { count: localMessages.length, maxSeq: localMaxSeq });
|
||||
|
||||
if (localMessages.length > 0) {
|
||||
// 转换格式
|
||||
@@ -1179,7 +1103,6 @@ class MessageManager {
|
||||
|
||||
// 立即更新内存和通知(关键:解决竞态条件)
|
||||
this.state.messagesMap.set(conversationId, formattedMessages);
|
||||
console.log('[MessageManager][DEBUG] 本地消息已加载,通知订阅者:', { conversationId, messageCount: formattedMessages.length, timestamp: Date.now() });
|
||||
this.notifySubscribers({
|
||||
type: 'messages_updated',
|
||||
payload: {
|
||||
@@ -1283,7 +1206,6 @@ class MessageManager {
|
||||
// 2.2 再基于 localMaxSeq 做增量补齐(防止快照窗口不足导致漏更老的新消息)
|
||||
const snapshotMaxSeq = snapshotMessages.reduce((max, m) => Math.max(max, m.seq || 0), 0);
|
||||
if (snapshotMaxSeq > localMaxSeq) {
|
||||
console.log('[MessageManager] 增量补齐:', { localMaxSeq, snapshotMaxSeq });
|
||||
const incrementalResp = await messageService.getMessages(conversationId, localMaxSeq);
|
||||
const newMessages = incrementalResp?.messages || [];
|
||||
if (newMessages.length > 0) {
|
||||
@@ -1378,7 +1300,6 @@ class MessageManager {
|
||||
* 加载更多历史消息
|
||||
*/
|
||||
async loadMoreMessages(conversationId: string, beforeSeq: number, limit = 20): Promise<MessageResponse[]> {
|
||||
console.log('[MessageManager] 加载更多历史消息:', { conversationId, beforeSeq, limit });
|
||||
|
||||
try {
|
||||
// 先从本地获取
|
||||
@@ -1468,10 +1389,6 @@ class MessageManager {
|
||||
this.state.totalUnreadCount = unreadData?.total_unread_count ?? 0;
|
||||
this.state.systemUnreadCount = systemUnreadData?.unread_count ?? 0;
|
||||
|
||||
console.log('[MessageManager] 未读数更新:', {
|
||||
total: this.state.totalUnreadCount,
|
||||
system: this.state.systemUnreadCount,
|
||||
});
|
||||
|
||||
this.notifySubscribers({
|
||||
type: 'unread_count_updated',
|
||||
@@ -1496,7 +1413,6 @@ class MessageManager {
|
||||
segments: MessageSegment[],
|
||||
options?: { replyToId?: string }
|
||||
): Promise<MessageResponse | null> {
|
||||
console.log('[MessageManager] 发送消息:', { conversationId, segmentCount: segments.length });
|
||||
|
||||
try {
|
||||
// 调用API发送
|
||||
@@ -1583,7 +1499,6 @@ class MessageManager {
|
||||
* 3. fetchConversations 使用版本号判断数据新旧
|
||||
*/
|
||||
async markAsRead(conversationId: string, seq: number): Promise<void> {
|
||||
console.log('[MessageManager] 标记已读:', { conversationId, seq });
|
||||
|
||||
const conversation = this.state.conversations.get(conversationId);
|
||||
if (!conversation) {
|
||||
@@ -1596,11 +1511,6 @@ class MessageManager {
|
||||
|
||||
// 使用 seq 去重:同一会话若已上报到更大/相同 seq,则跳过重复上报
|
||||
if (existingRecord && seq <= existingRecord.lastReadSeq) {
|
||||
console.log('[MessageManager] 已读seq未前进,跳过重复上报:', {
|
||||
conversationId,
|
||||
seq,
|
||||
lastReadSeq: existingRecord.lastReadSeq,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1620,7 +1530,6 @@ class MessageManager {
|
||||
version: currentVersion,
|
||||
lastReadSeq: seq,
|
||||
});
|
||||
console.log('[MessageManager] 已读保护开始:', { conversationId, version: currentVersion });
|
||||
|
||||
// 2. 乐观更新本地状态(立即反映到UI)
|
||||
const updatedConv: ConversationResponse = {
|
||||
@@ -1663,7 +1572,6 @@ class MessageManager {
|
||||
// 5. 调用 API,完成后设置延迟清除保护
|
||||
try {
|
||||
await messageService.markAsRead(conversationId, seq);
|
||||
console.log('[MessageManager] 标记已读API调用成功:', { conversationId, version: currentVersion });
|
||||
} catch (error) {
|
||||
console.error('[MessageManager] 标记已读API失败:', error);
|
||||
// 失败时回滚状态
|
||||
@@ -1692,7 +1600,6 @@ class MessageManager {
|
||||
// 只有版本号匹配时才清除(防止清除新的已读请求的保护)
|
||||
if (record && record.version === currentVersion) {
|
||||
this.pendingReadMap.delete(conversationId);
|
||||
console.log('[MessageManager] 已读保护结束:', { conversationId, version: currentVersion });
|
||||
}
|
||||
}, READ_STATE_PROTECTION_DELAY);
|
||||
|
||||
@@ -1709,7 +1616,6 @@ class MessageManager {
|
||||
* 标记所有消息已读
|
||||
*/
|
||||
async markAllAsRead(): Promise<void> {
|
||||
console.log('[MessageManager] 标记所有已读');
|
||||
|
||||
// 乐观更新
|
||||
const prevConversations = new Map(this.state.conversations);
|
||||
@@ -1766,7 +1672,6 @@ class MessageManager {
|
||||
* 创建私聊会话
|
||||
*/
|
||||
async createConversation(userId: string): Promise<ConversationResponse | null> {
|
||||
console.log('[MessageManager] 创建私聊会话:', userId);
|
||||
|
||||
try {
|
||||
const conversation = await messageService.createConversation(userId);
|
||||
@@ -1860,7 +1765,6 @@ class MessageManager {
|
||||
* 设置系统消息未读数
|
||||
*/
|
||||
setSystemUnreadCount(count: number): void {
|
||||
console.log('[MessageManager] 设置系统未读数:', count);
|
||||
this.state.systemUnreadCount = count;
|
||||
|
||||
this.notifySubscribers({
|
||||
@@ -1878,7 +1782,6 @@ class MessageManager {
|
||||
*/
|
||||
incrementSystemUnreadCount(): void {
|
||||
this.state.systemUnreadCount += 1;
|
||||
console.log('[MessageManager] 系统未读数增加:', this.state.systemUnreadCount);
|
||||
|
||||
this.notifySubscribers({
|
||||
type: 'unread_count_updated',
|
||||
@@ -1895,7 +1798,6 @@ class MessageManager {
|
||||
*/
|
||||
decrementSystemUnreadCount(count = 1): void {
|
||||
this.state.systemUnreadCount = Math.max(0, this.state.systemUnreadCount - count);
|
||||
console.log('[MessageManager] 系统未读数减少:', this.state.systemUnreadCount);
|
||||
|
||||
this.notifySubscribers({
|
||||
type: 'unread_count_updated',
|
||||
@@ -1953,7 +1855,6 @@ class MessageManager {
|
||||
* 清空会话列表
|
||||
*/
|
||||
clearConversations(): void {
|
||||
console.log('[MessageManager] 清空会话列表');
|
||||
this.state.conversations.clear();
|
||||
this.state.conversationList = [];
|
||||
this.state.totalUnreadCount = 0;
|
||||
@@ -1980,7 +1881,6 @@ class MessageManager {
|
||||
* 实际 MessageManager 使用内存状态,此方法用于兼容性
|
||||
*/
|
||||
invalidateCache(type: 'all' | 'list' | 'unread' = 'all'): void {
|
||||
console.log('[MessageManager] 使缓存失效:', type);
|
||||
// MessageManager 不使用外部缓存,内存状态始终是最新的
|
||||
// 此方法仅用于 API 兼容性
|
||||
}
|
||||
@@ -1994,14 +1894,6 @@ class MessageManager {
|
||||
const prevUnreadCount = conversation.unread_count || 0;
|
||||
const newUnreadCount = prevUnreadCount + 1;
|
||||
|
||||
console.log('[MessageManager][DEBUG] incrementUnreadCount:', {
|
||||
conversationId,
|
||||
prevUnreadCount,
|
||||
newUnreadCount,
|
||||
conversationRef: conversation,
|
||||
conversationInMap: this.state.conversations.get(conversationId),
|
||||
isSameRef: conversation === this.state.conversations.get(conversationId),
|
||||
});
|
||||
|
||||
// 创建新对象而不是直接修改,确保状态一致性
|
||||
const updatedConv: ConversationResponse = {
|
||||
@@ -2095,7 +1987,6 @@ class MessageManager {
|
||||
*/
|
||||
setActiveConversation(conversationId: string | null): void {
|
||||
const normalizedConversationId = conversationId ? this.normalizeConversationId(conversationId) : null;
|
||||
console.log('[MessageManager] 设置活动会话:', normalizedConversationId);
|
||||
this.state.currentConversationId = normalizedConversationId;
|
||||
}
|
||||
|
||||
@@ -2157,7 +2048,6 @@ class MessageManager {
|
||||
*/
|
||||
subscribe(subscriber: MessageSubscriber): () => void {
|
||||
this.state.subscribers.add(subscriber);
|
||||
console.log('[MessageManager] 新订阅者,当前数量:', this.state.subscribers.size);
|
||||
|
||||
// 立即发送当前状态给新订阅者
|
||||
subscriber({
|
||||
@@ -2186,10 +2076,6 @@ class MessageManager {
|
||||
if (this.state.currentConversationId) {
|
||||
const currentMessages = this.state.messagesMap.get(this.state.currentConversationId);
|
||||
if (currentMessages && currentMessages.length > 0) {
|
||||
console.log('[MessageManager][DEBUG] 新订阅者,发送当前活动会话消息:', {
|
||||
conversationId: this.state.currentConversationId,
|
||||
messageCount: currentMessages.length,
|
||||
});
|
||||
subscriber({
|
||||
type: 'messages_updated',
|
||||
payload: {
|
||||
@@ -2205,7 +2091,6 @@ class MessageManager {
|
||||
// 返回取消订阅函数
|
||||
return () => {
|
||||
this.state.subscribers.delete(subscriber);
|
||||
console.log('[MessageManager] 订阅者移除,当前数量:', this.state.subscribers.size);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user