@@ -170,40 +170,40 @@ async function markChatAsRead(chatId) {
170170 const chat = chats . find ( c => c . id === chatId ) ;
171171 if ( ! chat ) return ;
172172
173- if ( resolveUnreadCount ( chat ) > 0 ) {
174- setStorageUnreadCount ( chat . id , 0 ) ;
175-
176- // Update the DOM to remove badge and bold style
177- const chatItem = document . querySelector ( `[data-chat-id="${ chatId } "]` ) ;
178- if ( chatItem ) {
179- const lastMessageElement = chatItem . querySelector ( '.chat-last-message' ) ;
180- if ( lastMessageElement ) {
181- lastMessageElement . classList . remove ( 'unread' ) ;
182- }
183-
184- const badgeElement = chatItem . querySelector ( '.chat-badge' ) ;
185- if ( badgeElement ) {
186- badgeElement . remove ( ) ;
187- }
173+ const lastMessage = chat . lastMessage ;
174+ if ( ! lastMessage || ! lastMessage . id || isMessageReadByCurrentUser ( lastMessage ) ) return ;
175+
176+ setStorageUnreadCount ( chat . id , 0 ) ;
177+
178+ // Update the DOM to remove badge and bold style
179+ const chatItem = document . querySelector ( `[data-chat-id="${ chatId } "]` ) ;
180+ if ( chatItem ) {
181+ const lastMessageElement = chatItem . querySelector ( '.chat-last-message' ) ;
182+ if ( lastMessageElement ) {
183+ lastMessageElement . classList . remove ( 'unread' ) ;
188184 }
189185
190- // Update page title badge
191- updatePageTitleBadge ( ) ;
186+ const badgeElement = chatItem . querySelector ( '.chat-badge' ) ;
187+ if ( badgeElement ) {
188+ badgeElement . remove ( ) ;
189+ }
192190 }
193191
194- // Mark messages as read on server
195- if ( chat . lastMessage && chat . lastMessage . id && ! isMessageReadByCurrentUser ( chat . lastMessage ) ) {
196- try {
197- await apiMarkAsRead ( chatId , chat . lastMessage . id ) ;
198- } catch ( error ) {
199- console . error ( 'Failed to mark messages as read:' , error ) ;
200- }
192+ // Call API to mark messages as read
193+ try {
194+ const message = await apiMarkAsRead ( chatId , lastMessage . id ) ;
195+ lastMessage . readMarks = message . readMarks ; // Update readMarks for the last message
196+ } catch ( error ) {
197+ console . error ( 'Failed to mark messages as read:' , error ) ;
201198 }
199+
200+ // Update page title badge
201+ updatePageTitleBadge ( ) ;
202202}
203203
204204function updatePageTitleBadge ( ) {
205205 // Count chats with unread messages
206- const unreadChatsCount = chats . filter ( chat => resolveUnreadCount ( chat ) > 0 ) . length ;
206+ const unreadChatsCount = chats . filter ( chat => ( getStorageUnreadCount ( chat . id ) || 0 ) > 0 ) . length ;
207207
208208 if ( unreadChatsCount > 0 && document . hidden ) {
209209 document . title = `(${ unreadChatsCount } ) ${ originalTitle } ` ;
@@ -228,7 +228,7 @@ function displayChats(restoreSelection = true) {
228228 // Show all chats except blocked and archived
229229 return ! isBlocked && ! isArchived ;
230230 case 'unread' :
231- return resolveUnreadCount ( chat ) > 0 && ! isBlocked && ! isArchived ;
231+ return ( getStorageUnreadCount ( chat . id ) || 0 ) > 0 && ! isBlocked && ! isArchived ;
232232 case 'archived' :
233233 return isArchived ;
234234 case 'blocked' :
@@ -589,7 +589,7 @@ function updateCurrentUserButton() {
589589}
590590
591591// Update chat list when new message arrives
592- function updateChatListWithMessage ( message ) {
592+ async function updateChatListWithMessage ( message ) {
593593 const chat = chats . find ( c => c . id === message . chatId ) ;
594594 if ( ! chat || ! chat . id ) {
595595 console . warn ( 'Received message for unknown chat:' , message . chatId ) ;
@@ -617,8 +617,10 @@ function updateChatListWithMessage(message) {
617617
618618 var unreadCount = getStorageUnreadCount ( chat . id ) || 0 ;
619619
620- // If chat is not currently open or the page is hidden, increment the unread count
621- if ( message . chatId !== currentChatId || document . hidden ) {
620+ // If the chat is currently open and the document is visible, mark it as read immediately
621+ if ( message . chatId === currentChatId && ! document . hidden ) {
622+ await markChatAsRead ( chat . id ) ;
623+ } else {
622624 setStorageUnreadCount ( chat . id , ++ unreadCount ) ;
623625 }
624626
0 commit comments