From 1f8a45f86615b81e942c745c250060f1a8def004 Mon Sep 17 00:00:00 2001 From: nexy7574 Date: Sat, 21 Dec 2024 22:55:12 +0000 Subject: [PATCH] Handle 404s from presence & fix `0` status message --- web/src/ui/rightpanel/UserInfo.tsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/web/src/ui/rightpanel/UserInfo.tsx b/web/src/ui/rightpanel/UserInfo.tsx index 0613130..75f3975 100644 --- a/web/src/ui/rightpanel/UserInfo.tsx +++ b/web/src/ui/rightpanel/UserInfo.tsx @@ -25,6 +25,7 @@ import { RoomContext } from "../roomview/roomcontext.ts" import DeviceList from "./UserInfoDeviceList.tsx" import UserInfoError from "./UserInfoError.tsx" import MutualRooms from "./UserInfoMutualRooms.tsx" +import { ErrorResponse } from "@/api/rpc.ts" interface UserInfoProps { userID: UserID @@ -43,7 +44,7 @@ const UserInfo = ({ userID }: UserInfoProps) => { const memberEvt = useRoomMember(client, roomCtx?.store, userID) const member = (memberEvt?.content ?? null) as MemberEventContent | null const [globalProfile, setGlobalProfile] = useState(null) - const [presence, setPresence] = useState({ presence: "offline"}) + const [presence, setPresence] = useState(null) const [errors, setErrors] = useState(null) useEffect(() => { setErrors(null) @@ -54,7 +55,15 @@ const UserInfo = ({ userID }: UserInfoProps) => { ) client.rpc.getPresence(userID).then( setPresence, - err => setErrors([`${err}`]), + err => { + // A 404 is to be expected if the user has not federated presence. + if (err instanceof ErrorResponse && err.message.startsWith("M_NOT_FOUND")) { + setPresence(null) + } else { + if(errors) {setErrors([...errors, `${err}`])} + else {setErrors([`${err}`])} + } + } ) }, [roomCtx, userID, client]) @@ -78,7 +87,7 @@ const UserInfo = ({ userID }: UserInfoProps) => { <>
{PresenceEmojis[presence.presence]} {presence.presence}
{ - presence.status_msg?.length && ( + presence.status_msg && (
{presence.status_msg}
) }