From 39645102d14f34e71b34e5ddce0625790be33f6f Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 30 Nov 2025 10:40:24 -0500 Subject: [PATCH] refac --- backend/open_webui/models/users.py | 10 ++++++++-- backend/open_webui/routers/channels.py | 9 ++++++--- src/lib/components/channel/Navbar.svelte | 23 +++++++++++++++++++++-- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/backend/open_webui/models/users.py b/backend/open_webui/models/users.py index 42918f59a5..3ba66f76d2 100644 --- a/backend/open_webui/models/users.py +++ b/backend/open_webui/models/users.py @@ -107,6 +107,12 @@ class UserModel(BaseModel): model_config = ConfigDict(from_attributes=True) +class UserStatusModel(UserModel): + is_active: bool = False + + model_config = ConfigDict(from_attributes=True) + + class ApiKey(Base): __tablename__ = "api_key" @@ -179,7 +185,7 @@ class UserIdNameResponse(BaseModel): class UserIdNameStatusResponse(BaseModel): id: str name: str - is_active: bool = False + is_active: Optional[bool] = None class UserInfoListResponse(BaseModel): @@ -431,7 +437,7 @@ class UsersTable: "total": total, } - def get_users_by_user_ids(self, user_ids: list[str]) -> list[UserModel]: + def get_users_by_user_ids(self, user_ids: list[str]) -> list[UserStatusModel]: with get_db() as db: users = db.query(User).filter(User.id.in_(user_ids)).all() return [UserModel.model_validate(user) for user in users] diff --git a/backend/open_webui/routers/channels.py b/backend/open_webui/routers/channels.py index 7e4b8a3fdd..56af89181a 100644 --- a/backend/open_webui/routers/channels.py +++ b/backend/open_webui/routers/channels.py @@ -219,8 +219,8 @@ async def create_new_channel( class ChannelFullResponse(ChannelResponse): - user_ids: Optional[list[str]] = None # 'dm' channels only - users: Optional[list[UserIdNameResponse]] = None # 'dm' channels only + user_ids: Optional[list[str]] = None # 'group'/'dm' channels only + users: Optional[list[UserIdNameStatusResponse]] = None # 'group'/'dm' channels only last_read_at: Optional[int] = None # timestamp in epoch (time_ns) unread_count: int = 0 @@ -246,8 +246,11 @@ async def get_channel_by_id(id: str, user=Depends(get_verified_user)): user_ids = [ member.user_id for member in Channels.get_members_by_channel_id(channel.id) ] + users = [ - UserIdNameResponse(**user.model_dump()) + UserIdNameStatusResponse( + **{**user.model_dump(), "is_active": Users.is_user_active(user.id)} + ) for user in Users.get_users_by_user_ids(user_ids) ] diff --git a/src/lib/components/channel/Navbar.svelte b/src/lib/components/channel/Navbar.svelte index 00ffb87b36..6b5d7c97c2 100644 --- a/src/lib/components/channel/Navbar.svelte +++ b/src/lib/components/channel/Navbar.svelte @@ -76,8 +76,9 @@
{#if channel?.type === 'dm'} {#if channel?.users} -
- {#each channel.users.filter((u) => u.id !== $user?.id).slice(0, 2) as u, index} + {@const channelMembers = channel.users.filter((u) => u.id !== $user?.id)} +
+ {#each channelMembers.slice(0, 2) as u, index} {u.name} {/each} + + {#if channelMembers.length === 1} +
+ + {#if channelMembers[0]?.is_active} + + {/if} + + +
+ {/if}
{:else}