feat: Enhance messaging read receipts and auto-read, fix auth 401 error suppression during logout, and refine agent profile expertise

This commit is contained in:
pradeepkumar
2026-03-27 06:32:46 +05:30
parent ba87e3b091
commit 4c06d0d895
7 changed files with 77 additions and 15 deletions

View File

@@ -143,6 +143,12 @@ class MessagingNotifier extends StateNotifier<MessagingState> {
conversations: updatedConversations,
unreadCount: totalUnread,
);
// Auto-mark as read if user is currently viewing this conversation
final isActive = state.activeConversationId == convId;
if (isActive) {
markAsRead(convId);
}
}));
// Typing indicators
@@ -165,16 +171,36 @@ class MessagingNotifier extends StateNotifier<MessagingState> {
}
}));
// Read receipts
// Read receipts — update message ticks and conversation unread count
_subscriptions.add(_socket.onMessagesRead.listen((data) {
if (!mounted) return;
final convId = data['conversationId'] as String?;
final readAt = data['readAt'] as String?;
if (convId == null) return;
// Update conversation unread count
final updatedConversations = state.conversations.map((c) {
if (c.id == convId) return c.copyWith(unreadCount: 0);
return c;
}).toList();
state = state.copyWith(conversations: updatedConversations);
// Update message statuses — mark current user's sent messages as READ
final currentMessages = List<ChatMessage>.from(state.messages[convId] ?? []);
final currentUserId = _currentUserId;
bool messagesChanged = false;
final updatedMessages = currentMessages.map((m) {
if (m.senderId == currentUserId && m.status != MessageStatus.read) {
messagesChanged = true;
return m.copyWith(status: MessageStatus.read, readAt: readAt);
}
return m;
}).toList();
final newMessages = messagesChanged
? (Map<String, List<ChatMessage>>.from(state.messages)..[convId] = updatedMessages)
: state.messages;
state = state.copyWith(conversations: updatedConversations, messages: newMessages);
}));
// Reconnection: re-join active conversation room and catch up missed messages