fix: upgrade matrix-js-sdk 38.2.0 -> 41.5.0 with API compat fixes

- sessionMembershipsForRoom() removed in v41 (was synchronous, static)
- Replacement: read session.memberships directly (always up-to-date, sync)
  - useCall.ts: useCallMembers reads session.memberships
  - useCallEmbed.ts: createCallEmbed reads rtcSession.memberships
  - CallEmbedProvider.tsx: inline check on session.memberships
- Remove unused MatrixRTCSession import from CallEmbedProvider
- clearLoginData: also unregisters service workers and clears SW caches
This commit is contained in:
Lotus Bot
2026-05-22 00:19:11 -04:00
parent 7284132432
commit e74426cc86
6 changed files with 49 additions and 57 deletions
+1 -2
View File
@@ -111,8 +111,7 @@ function IncomingCall({ dm, info, onIgnore, onAnswer, onReject }: IncomingCallPr
useCallMembersChange(
session,
useCallback(() => {
const members = MatrixRTCSession.sessionMembershipsForRoom(room, session.sessionDescription);
if (members.length === 0) {
if (session.memberships.length === 0) {
onIgnore();
}
}, [room, session, onIgnore]),
+2 -2
View File
@@ -35,12 +35,12 @@ export const useCallSession = (room: Room): MatrixRTCSession => {
export const useCallMembers = (room: Room, session: MatrixRTCSession): CallMembership[] => {
const [memberships, setMemberships] = useState<CallMembership[]>(
MatrixRTCSession.sessionMembershipsForRoom(room, session.sessionDescription),
session.memberships,
);
useEffect(() => {
const updateMemberships = () => {
setMemberships(MatrixRTCSession.sessionMembershipsForRoom(room, session.sessionDescription));
setMemberships([...session.memberships]);
};
updateMemberships();
+1 -2
View File
@@ -49,8 +49,7 @@ export const createCallEmbed = (
forceAudioOff = false,
): CallEmbed => {
const rtcSession = mx.matrixRTC.getRoomSession(room);
const ongoing =
MatrixRTCSession.sessionMembershipsForRoom(room, rtcSession.sessionDescription).length > 0;
const ongoing = rtcSession.memberships.length > 0;
const intent = CallEmbed.getIntent(dm, ongoing, pref?.video);
const initialAudio = forceAudioOff ? false : (pref?.microphone ?? true);
+9
View File
@@ -88,6 +88,15 @@ export const clearLoginData = async () => {
}
});
// Unregister service workers so stale caches don't interfere after a reset
if ('serviceWorker' in navigator) {
const regs = await navigator.serviceWorker.getRegistrations();
await Promise.all(regs.map((r) => r.unregister()));
const cacheNames = await caches.keys();
await Promise.all(cacheNames.map((c) => caches.delete(c)));
}
window.localStorage.clear();
window.location.reload();
};