Fix membership updates to Spaces not applying in real-time

pull/21833/head
Michael Telatynski 2021-08-31 16:31:10 +01:00
parent 0a09682982
commit b814100b98
1 changed files with 9 additions and 5 deletions

View File

@ -678,12 +678,14 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
} }
this.emit(room.roomId); this.emit(room.roomId);
break; break;
}
};
case EventType.RoomMember: // listening for m.room.member events in onRoomState above doesn't work as the Member object isn't updated by then
if (room.isSpaceRoom()) { private onRoomStateMembers = (ev: MatrixEvent) => {
this.onSpaceMembersChange(ev); const room = this.matrixClient.getRoom(ev.getRoomId());
} if (room?.isSpaceRoom()) {
break; this.onSpaceMembersChange(ev);
} }
}; };
@ -743,6 +745,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
this.matrixClient.removeListener("Room.myMembership", this.onRoom); this.matrixClient.removeListener("Room.myMembership", this.onRoom);
this.matrixClient.removeListener("Room.accountData", this.onRoomAccountData); this.matrixClient.removeListener("Room.accountData", this.onRoomAccountData);
this.matrixClient.removeListener("RoomState.events", this.onRoomState); this.matrixClient.removeListener("RoomState.events", this.onRoomState);
this.matrixClient.removeListener("RoomState.members", this.onRoomStateMembers);
this.matrixClient.removeListener("accountData", this.onAccountData); this.matrixClient.removeListener("accountData", this.onAccountData);
} }
await this.reset(); await this.reset();
@ -754,6 +757,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
this.matrixClient.on("Room.myMembership", this.onRoom); this.matrixClient.on("Room.myMembership", this.onRoom);
this.matrixClient.on("Room.accountData", this.onRoomAccountData); this.matrixClient.on("Room.accountData", this.onRoomAccountData);
this.matrixClient.on("RoomState.events", this.onRoomState); this.matrixClient.on("RoomState.events", this.onRoomState);
this.matrixClient.on("RoomState.members", this.onRoomStateMembers);
this.matrixClient.on("accountData", this.onAccountData); this.matrixClient.on("accountData", this.onAccountData);
this.matrixClient.getCapabilities().then(capabilities => { this.matrixClient.getCapabilities().then(capabilities => {