From 8ddf119570b3c0b04b673d41cb2363370c23939b Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 26 Jul 2026 23:55:37 -0400 Subject: [PATCH] refac --- backend/open_webui/models/chats.py | 3 +-- backend/open_webui/routers/chats.py | 7 +++++-- src/lib/components/layout/Sidebar.svelte | 7 +++++++ .../components/layout/Sidebar/RecursiveFolder.svelte | 11 +++++++++++ 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/backend/open_webui/models/chats.py b/backend/open_webui/models/chats.py index 56d0523f84..aae292e0ad 100644 --- a/backend/open_webui/models/chats.py +++ b/backend/open_webui/models/chats.py @@ -694,13 +694,12 @@ class ChatTable: await session.commit() return result.rowcount or 0 - async def mark_root_chats_read_by_user_id(self, user_id: str, db: AsyncSession | None = None) -> int: + async def mark_chats_read_by_user_id(self, user_id: str, db: AsyncSession | None = None) -> int: async with get_async_db_context(db) as session: result = await session.execute( update(Chat) .where( Chat.user_id == user_id, - Chat.folder_id.is_(None), Chat.archived == False, Chat.meta['internal'].as_boolean().is_not(True), ) diff --git a/backend/open_webui/routers/chats.py b/backend/open_webui/routers/chats.py index ffda93d9ba..dfef6e332d 100644 --- a/backend/open_webui/routers/chats.py +++ b/backend/open_webui/routers/chats.py @@ -256,11 +256,14 @@ async def get_session_user_chat_list( @router.post('/read') -async def mark_root_chats_read_by_user_id( +async def mark_chats_read_by_user_id( user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session), ): - return {'updated_count': await Chats.mark_root_chats_read_by_user_id(user.id, db=db)} + return { + 'updated_count': await Chats.mark_chats_read_by_user_id(user.id, db=db), + 'folder_unread_counts': await get_folder_unread_counts(user.id, db=db), + } ############################ diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index 6883097b15..927d84b12b 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -137,6 +137,7 @@ upsertChat?: (chat: Record) => unknown; setChatActive?: (chatId: string, active: boolean) => boolean; setChatReadAt?: (chatId: string, lastReadAt: number) => boolean; + setAllChatsRead?: () => unknown; } > = {}; @@ -455,7 +456,13 @@ if (!res) return; showChatsMenu = false; + if (res.folder_unread_counts) { + applyFolderUnreadCounts(res.folder_unread_counts); + } setAllChatsRead(); + for (const folder of Object.values(folderRegistry)) { + folder?.setAllChatsRead?.(); + } }; const importChatHandler = async (items, pinned = false, folderId = null) => { diff --git a/src/lib/components/layout/Sidebar/RecursiveFolder.svelte b/src/lib/components/layout/Sidebar/RecursiveFolder.svelte index 50bb8a7f4a..9c0a5716bb 100644 --- a/src/lib/components/layout/Sidebar/RecursiveFolder.svelte +++ b/src/lib/components/layout/Sidebar/RecursiveFolder.svelte @@ -392,6 +392,17 @@ return found; } return false; + }, + setAllChatsRead: () => { + if (chats) { + chats = sortFolderChats( + chats.map((chat) => + !chat.user_id || chat.user_id === $user?.id + ? { ...chat, last_read_at: chat.updated_at } + : chat + ) + ); + } } }; if (folderElement) {