mirror of
https://github.com/vector-im/element-call.git
synced 2026-08-29 21:15:19 +00:00
Fixup call detection logic to allow sticky events
This commit is contained in:
@@ -114,19 +114,41 @@ const roomIsJoinable = (room: Room): boolean => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if a given room has call events in it, and therefore
|
||||||
|
* is likely to be a call room.
|
||||||
|
* @param room The Matrix room instance.
|
||||||
|
* @returns `true` if the room has call events.
|
||||||
|
*/
|
||||||
const roomHasCallMembershipEvents = (room: Room): boolean => {
|
const roomHasCallMembershipEvents = (room: Room): boolean => {
|
||||||
switch (room.getMyMembership()) {
|
// Legacy events.
|
||||||
case KnownMembership.Join:
|
const myMembership = room.getMyMembership();
|
||||||
return !!room
|
if (myMembership === KnownMembership.Knock) {
|
||||||
.getLiveTimeline()
|
// Assume that a room you've knocked on is able to hold calls
|
||||||
.getState(EventTimeline.FORWARDS)
|
return true;
|
||||||
?.events?.get(EventType.GroupCallMemberPrefix);
|
} else if (myMembership !== KnownMembership.Join) {
|
||||||
case KnownMembership.Knock:
|
// Otherwise, non-joined rooms should never show up.
|
||||||
// Assume that a room you've knocked on is able to hold calls
|
return false;
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const timeline = room.getLiveTimeline();
|
||||||
|
|
||||||
|
// Check legacy events first, because it's cheaper.
|
||||||
|
if (
|
||||||
|
timeline
|
||||||
|
.getState(EventTimeline.FORWARDS)
|
||||||
|
?.events?.has(EventType.GroupCallMemberPrefix)
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// There was call membership events at some point in the timeline.
|
||||||
|
return timeline.getEvents().some(
|
||||||
|
(e) =>
|
||||||
|
// Membership events only count if both of these are true
|
||||||
|
e.unstableStickyInfo && e.getType() === EventType.GroupCallMemberPrefix,
|
||||||
|
);
|
||||||
|
// Otherwise, it's *unlikely* this room was ever a call.
|
||||||
};
|
};
|
||||||
|
|
||||||
export function useGroupCallRooms(client: MatrixClient): GroupCallRoom[] {
|
export function useGroupCallRooms(client: MatrixClient): GroupCallRoom[] {
|
||||||
@@ -137,7 +159,7 @@ export function useGroupCallRooms(client: MatrixClient): GroupCallRoom[] {
|
|||||||
// We want to show all rooms that historically had a call and which we are (or can become) part of.
|
// We want to show all rooms that historically had a call and which we are (or can become) part of.
|
||||||
const rooms = client
|
const rooms = client
|
||||||
.getRooms()
|
.getRooms()
|
||||||
// .filter(roomHasCallMembershipEvents)
|
.filter(roomHasCallMembershipEvents)
|
||||||
.filter(roomIsJoinable);
|
.filter(roomIsJoinable);
|
||||||
const sortedRooms = sortRooms(client, rooms);
|
const sortedRooms = sortRooms(client, rooms);
|
||||||
Promise.all(
|
Promise.all(
|
||||||
|
|||||||
Reference in New Issue
Block a user