diff --git a/src/app/pages/client/ClientNonUIFeatures.tsx b/src/app/pages/client/ClientNonUIFeatures.tsx
index ce952bfc..478e2d1a 100644
--- a/src/app/pages/client/ClientNonUIFeatures.tsx
+++ b/src/app/pages/client/ClientNonUIFeatures.tsx
@@ -1,7 +1,7 @@
import { useAtomValue } from 'jotai';
import React, { ReactNode, useCallback, useEffect, useRef } from 'react';
import { useNavigate } from 'react-router-dom';
-import { RoomEvent, RoomEventHandlerMap } from 'matrix-js-sdk';
+import { RoomEvent, RoomEventHandlerMap, SetPresence } from 'matrix-js-sdk';
import { roomToUnreadAtom, unreadEqual, unreadInfoToUnread } from '../../state/room/roomToUnread';
import LogoSVG from '../../../../public/res/svg/cinny.svg';
import LogoUnreadSVG from '../../../../public/res/svg/cinny-unread.svg';
@@ -253,6 +253,29 @@ function MessageNotifications() {
);
}
+function UpdatePresence() {
+ const mx = useMatrixClient();
+
+ useEffect(() => {
+ const onFocus = () => {
+ mx.setSyncPresence(SetPresence.Online);
+ };
+ const onBlur = () => {
+ mx.setSyncPresence(SetPresence.Unavailable);
+ }
+
+ window.addEventListener("focus", onFocus);
+ window.addEventListener("blur", onBlur);
+ onFocus();
+ return () => {
+ window.removeEventListener("focus", onFocus);
+ window.removeEventListener("blur", onBlur);
+ };
+ }, [mx]);
+
+ return null;
+}
+
type ClientNonUIFeaturesProps = {
children: ReactNode;
};
@@ -265,6 +288,7 @@ export function ClientNonUIFeatures({ children }: ClientNonUIFeaturesProps) {
+
{children}
>
);