mirror of
https://github.com/vector-im/element-call.git
synced 2026-07-18 18:59:23 +00:00
More tidy
This commit is contained in:
@@ -20,7 +20,6 @@ import {
|
|||||||
MatrixRTCSessionManagerEvents,
|
MatrixRTCSessionManagerEvents,
|
||||||
type MatrixRTCSession,
|
type MatrixRTCSession,
|
||||||
} from "matrix-js-sdk/lib/matrixrtc";
|
} from "matrix-js-sdk/lib/matrixrtc";
|
||||||
import { logger } from "matrix-js-sdk/lib/logger";
|
|
||||||
|
|
||||||
import { getKeyForRoom } from "../e2ee/sharedKeyManagement";
|
import { getKeyForRoom } from "../e2ee/sharedKeyManagement";
|
||||||
|
|
||||||
@@ -121,7 +120,8 @@ const roomIsJoinable = (room: Room): boolean => {
|
|||||||
* @returns `true` if the room has call events.
|
* @returns `true` if the room has call events.
|
||||||
*/
|
*/
|
||||||
const roomHasCallMembershipEvents = (room: Room): boolean => {
|
const roomHasCallMembershipEvents = (room: Room): boolean => {
|
||||||
// Legacy events.
|
// Check our room membership first, to rule out any rooms
|
||||||
|
// we can't have a call in.
|
||||||
const myMembership = room.getMyMembership();
|
const myMembership = room.getMyMembership();
|
||||||
if (myMembership === KnownMembership.Knock) {
|
if (myMembership === KnownMembership.Knock) {
|
||||||
// Assume that a room you've knocked on is able to hold calls
|
// Assume that a room you've knocked on is able to hold calls
|
||||||
@@ -131,9 +131,8 @@ const roomHasCallMembershipEvents = (room: Room): boolean => {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Legacy member state checks (cheaper to check.)
|
||||||
const timeline = room.getLiveTimeline();
|
const timeline = room.getLiveTimeline();
|
||||||
|
|
||||||
// Check legacy events first, because it's cheaper.
|
|
||||||
if (
|
if (
|
||||||
timeline
|
timeline
|
||||||
.getState(EventTimeline.FORWARDS)
|
.getState(EventTimeline.FORWARDS)
|
||||||
@@ -142,7 +141,15 @@ const roomHasCallMembershipEvents = (room: Room): boolean => {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// There was call membership events at some point in the timeline.
|
// Check for *active* calls using sticky events.
|
||||||
|
for (const sticky of room._unstable_getStickyEvents()) {
|
||||||
|
if (sticky.getType() === EventType.GroupCallMemberPrefix) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, check recent event history to see if anyone had
|
||||||
|
// sent a call membership in here.
|
||||||
return timeline.getEvents().some(
|
return timeline.getEvents().some(
|
||||||
(e) =>
|
(e) =>
|
||||||
// Membership events only count if both of these are true
|
// Membership events only count if both of these are true
|
||||||
@@ -162,24 +169,22 @@ export function useGroupCallRooms(client: MatrixClient): GroupCallRoom[] {
|
|||||||
.filter(roomHasCallMembershipEvents)
|
.filter(roomHasCallMembershipEvents)
|
||||||
.filter(roomIsJoinable);
|
.filter(roomIsJoinable);
|
||||||
const sortedRooms = sortRooms(client, rooms);
|
const sortedRooms = sortRooms(client, rooms);
|
||||||
Promise.all(
|
const items = sortedRooms.map((room) => {
|
||||||
sortedRooms.map(async (room) => {
|
const session = client.matrixRTC.getRoomSession(room);
|
||||||
const session = await client.matrixRTC.getRoomSession(room);
|
return {
|
||||||
return {
|
roomAlias: room.getCanonicalAlias() ?? undefined,
|
||||||
roomAlias: room.getCanonicalAlias() ?? undefined,
|
roomName: room.name,
|
||||||
roomName: room.name,
|
avatarUrl: room.getMxcAvatarUrl()!,
|
||||||
avatarUrl: room.getMxcAvatarUrl()!,
|
room,
|
||||||
room,
|
session,
|
||||||
session,
|
participants: session.memberships
|
||||||
participants: session.memberships
|
.filter((m) => m.sender)
|
||||||
.filter((m) => m.sender)
|
.map((m) => room.getMember(m.sender!))
|
||||||
.map((m) => room.getMember(m.sender!))
|
.filter((m) => m) as RoomMember[],
|
||||||
.filter((m) => m) as RoomMember[],
|
};
|
||||||
};
|
});
|
||||||
}),
|
|
||||||
)
|
setRooms(items);
|
||||||
.then((items) => setRooms(items))
|
|
||||||
.catch(logger.error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
updateRooms();
|
updateRooms();
|
||||||
|
|||||||
Reference in New Issue
Block a user