Replace deprecated CallMembership.sender with userId
This commit is contained in:
@@ -19,7 +19,7 @@ import { alice, local, localRtcMember } from "../utils/test-fixtures";
|
|||||||
import { type MockRTCSession } from "../utils/test";
|
import { type MockRTCSession } from "../utils/test";
|
||||||
import { ReactionsSenderProvider } from "../reactions/useReactionsSender";
|
import { ReactionsSenderProvider } from "../reactions/useReactionsSender";
|
||||||
|
|
||||||
const localIdent = `${localRtcMember.sender}:${localRtcMember.deviceId}`;
|
const localIdent = `${localRtcMember.userId}:${localRtcMember.deviceId}`;
|
||||||
|
|
||||||
function TestComponent({
|
function TestComponent({
|
||||||
rtcSession,
|
rtcSession,
|
||||||
|
|||||||
@@ -150,8 +150,8 @@ export function useGroupCallRooms(client: MatrixClient): GroupCallRoom[] {
|
|||||||
room,
|
room,
|
||||||
session,
|
session,
|
||||||
participants: session.memberships
|
participants: session.memberships
|
||||||
.filter((m) => m.sender)
|
.filter((m) => m.userId)
|
||||||
.map((m) => room.getMember(m.sender!))
|
.map((m) => room.getMember(m.userId!))
|
||||||
.filter((m) => m) as RoomMember[],
|
.filter((m) => m) as RoomMember[],
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ test("handles a hand raised reaction", () => {
|
|||||||
new MatrixEvent({
|
new MatrixEvent({
|
||||||
room_id: rtcSession.room.roomId,
|
room_id: rtcSession.room.roomId,
|
||||||
event_id: reactionEventId,
|
event_id: reactionEventId,
|
||||||
sender: localRtcMember.sender,
|
sender: localRtcMember.userId,
|
||||||
type: EventType.Reaction,
|
type: EventType.Reaction,
|
||||||
origin_server_ts: localTimestamp.getTime(),
|
origin_server_ts: localTimestamp.getTime(),
|
||||||
content: {
|
content: {
|
||||||
@@ -67,7 +67,7 @@ test("handles a hand raised reaction", () => {
|
|||||||
expectObservable(raisedHands$).toBe("ab", {
|
expectObservable(raisedHands$).toBe("ab", {
|
||||||
a: {},
|
a: {},
|
||||||
b: {
|
b: {
|
||||||
[`${localRtcMember.sender}:${localRtcMember.deviceId}`]: {
|
[`${localRtcMember.userId}:${localRtcMember.deviceId}`]: {
|
||||||
reactionEventId,
|
reactionEventId,
|
||||||
membershipEventId: localRtcMember.eventId,
|
membershipEventId: localRtcMember.eventId,
|
||||||
time: localTimestamp,
|
time: localTimestamp,
|
||||||
@@ -95,7 +95,7 @@ test("handles a redaction", () => {
|
|||||||
new MatrixEvent({
|
new MatrixEvent({
|
||||||
room_id: rtcSession.room.roomId,
|
room_id: rtcSession.room.roomId,
|
||||||
event_id: reactionEventId,
|
event_id: reactionEventId,
|
||||||
sender: localRtcMember.sender,
|
sender: localRtcMember.userId,
|
||||||
type: EventType.Reaction,
|
type: EventType.Reaction,
|
||||||
origin_server_ts: localTimestamp.getTime(),
|
origin_server_ts: localTimestamp.getTime(),
|
||||||
content: {
|
content: {
|
||||||
@@ -117,7 +117,7 @@ test("handles a redaction", () => {
|
|||||||
new MatrixEvent({
|
new MatrixEvent({
|
||||||
room_id: rtcSession.room.roomId,
|
room_id: rtcSession.room.roomId,
|
||||||
event_id: reactionEventId,
|
event_id: reactionEventId,
|
||||||
sender: localRtcMember.sender,
|
sender: localRtcMember.userId,
|
||||||
type: EventType.RoomRedaction,
|
type: EventType.RoomRedaction,
|
||||||
redacts: reactionEventId,
|
redacts: reactionEventId,
|
||||||
}),
|
}),
|
||||||
@@ -129,7 +129,7 @@ test("handles a redaction", () => {
|
|||||||
expectObservable(raisedHands$).toBe("abc", {
|
expectObservable(raisedHands$).toBe("abc", {
|
||||||
a: {},
|
a: {},
|
||||||
b: {
|
b: {
|
||||||
[`${localRtcMember.sender}:${localRtcMember.deviceId}`]: {
|
[`${localRtcMember.userId}:${localRtcMember.deviceId}`]: {
|
||||||
reactionEventId,
|
reactionEventId,
|
||||||
membershipEventId: localRtcMember.eventId,
|
membershipEventId: localRtcMember.eventId,
|
||||||
time: localTimestamp,
|
time: localTimestamp,
|
||||||
@@ -156,7 +156,7 @@ test("handles waiting for event decryption", () => {
|
|||||||
const encryptedEvent = new MatrixEvent({
|
const encryptedEvent = new MatrixEvent({
|
||||||
room_id: rtcSession.room.roomId,
|
room_id: rtcSession.room.roomId,
|
||||||
event_id: reactionEventId,
|
event_id: reactionEventId,
|
||||||
sender: localRtcMember.sender,
|
sender: localRtcMember.userId,
|
||||||
type: EventType.Reaction,
|
type: EventType.Reaction,
|
||||||
origin_server_ts: localTimestamp.getTime(),
|
origin_server_ts: localTimestamp.getTime(),
|
||||||
content: {
|
content: {
|
||||||
@@ -183,7 +183,7 @@ test("handles waiting for event decryption", () => {
|
|||||||
new MatrixEvent({
|
new MatrixEvent({
|
||||||
room_id: rtcSession.room.roomId,
|
room_id: rtcSession.room.roomId,
|
||||||
event_id: reactionEventId,
|
event_id: reactionEventId,
|
||||||
sender: localRtcMember.sender,
|
sender: localRtcMember.userId,
|
||||||
type: EventType.Reaction,
|
type: EventType.Reaction,
|
||||||
origin_server_ts: localTimestamp.getTime(),
|
origin_server_ts: localTimestamp.getTime(),
|
||||||
content: {
|
content: {
|
||||||
@@ -199,7 +199,7 @@ test("handles waiting for event decryption", () => {
|
|||||||
expectObservable(raisedHands$).toBe("a-c", {
|
expectObservable(raisedHands$).toBe("a-c", {
|
||||||
a: {},
|
a: {},
|
||||||
c: {
|
c: {
|
||||||
[`${localRtcMember.sender}:${localRtcMember.deviceId}`]: {
|
[`${localRtcMember.userId}:${localRtcMember.deviceId}`]: {
|
||||||
reactionEventId,
|
reactionEventId,
|
||||||
membershipEventId: localRtcMember.eventId,
|
membershipEventId: localRtcMember.eventId,
|
||||||
time: localTimestamp,
|
time: localTimestamp,
|
||||||
@@ -227,7 +227,7 @@ test("hands rejecting events without a proper membership", () => {
|
|||||||
new MatrixEvent({
|
new MatrixEvent({
|
||||||
room_id: rtcSession.room.roomId,
|
room_id: rtcSession.room.roomId,
|
||||||
event_id: reactionEventId,
|
event_id: reactionEventId,
|
||||||
sender: localRtcMember.sender,
|
sender: localRtcMember.userId,
|
||||||
type: EventType.Reaction,
|
type: EventType.Reaction,
|
||||||
origin_server_ts: localTimestamp.getTime(),
|
origin_server_ts: localTimestamp.getTime(),
|
||||||
content: {
|
content: {
|
||||||
@@ -270,7 +270,7 @@ test("handles a reaction", () => {
|
|||||||
new MatrixEvent({
|
new MatrixEvent({
|
||||||
room_id: rtcSession.room.roomId,
|
room_id: rtcSession.room.roomId,
|
||||||
event_id: reactionEventId,
|
event_id: reactionEventId,
|
||||||
sender: localRtcMember.sender,
|
sender: localRtcMember.userId,
|
||||||
type: ElementCallReactionEventType,
|
type: ElementCallReactionEventType,
|
||||||
content: {
|
content: {
|
||||||
emoji: reaction.emoji,
|
emoji: reaction.emoji,
|
||||||
@@ -295,7 +295,7 @@ test("handles a reaction", () => {
|
|||||||
{
|
{
|
||||||
a: {},
|
a: {},
|
||||||
b: {
|
b: {
|
||||||
[`${localRtcMember.sender}:${localRtcMember.deviceId}`]: {
|
[`${localRtcMember.userId}:${localRtcMember.deviceId}`]: {
|
||||||
reactionOption: reaction,
|
reactionOption: reaction,
|
||||||
expireAfter: new Date(REACTION_ACTIVE_TIME_MS),
|
expireAfter: new Date(REACTION_ACTIVE_TIME_MS),
|
||||||
},
|
},
|
||||||
@@ -327,7 +327,7 @@ test("ignores bad reaction events", () => {
|
|||||||
new MatrixEvent({
|
new MatrixEvent({
|
||||||
room_id: rtcSession.room.roomId,
|
room_id: rtcSession.room.roomId,
|
||||||
event_id: reactionEventId,
|
event_id: reactionEventId,
|
||||||
sender: localRtcMember.sender,
|
sender: localRtcMember.userId,
|
||||||
type: ElementCallReactionEventType,
|
type: ElementCallReactionEventType,
|
||||||
content: {},
|
content: {},
|
||||||
}),
|
}),
|
||||||
@@ -342,7 +342,7 @@ test("ignores bad reaction events", () => {
|
|||||||
new MatrixEvent({
|
new MatrixEvent({
|
||||||
room_id: rtcSession.room.roomId,
|
room_id: rtcSession.room.roomId,
|
||||||
event_id: reactionEventId,
|
event_id: reactionEventId,
|
||||||
sender: localRtcMember.sender,
|
sender: localRtcMember.userId,
|
||||||
type: ElementCallReactionEventType,
|
type: ElementCallReactionEventType,
|
||||||
content: {
|
content: {
|
||||||
emoji: reaction.emoji,
|
emoji: reaction.emoji,
|
||||||
@@ -363,7 +363,7 @@ test("ignores bad reaction events", () => {
|
|||||||
new MatrixEvent({
|
new MatrixEvent({
|
||||||
room_id: rtcSession.room.roomId,
|
room_id: rtcSession.room.roomId,
|
||||||
event_id: reactionEventId,
|
event_id: reactionEventId,
|
||||||
sender: aliceRtcMember.sender,
|
sender: aliceRtcMember.userId,
|
||||||
type: ElementCallReactionEventType,
|
type: ElementCallReactionEventType,
|
||||||
content: {
|
content: {
|
||||||
emoji: reaction.emoji,
|
emoji: reaction.emoji,
|
||||||
@@ -384,7 +384,7 @@ test("ignores bad reaction events", () => {
|
|||||||
new MatrixEvent({
|
new MatrixEvent({
|
||||||
room_id: rtcSession.room.roomId,
|
room_id: rtcSession.room.roomId,
|
||||||
event_id: reactionEventId,
|
event_id: reactionEventId,
|
||||||
sender: localRtcMember.sender,
|
sender: localRtcMember.userId,
|
||||||
type: ElementCallReactionEventType,
|
type: ElementCallReactionEventType,
|
||||||
content: {
|
content: {
|
||||||
name: reaction.name,
|
name: reaction.name,
|
||||||
@@ -404,7 +404,7 @@ test("ignores bad reaction events", () => {
|
|||||||
new MatrixEvent({
|
new MatrixEvent({
|
||||||
room_id: rtcSession.room.roomId,
|
room_id: rtcSession.room.roomId,
|
||||||
event_id: reactionEventId,
|
event_id: reactionEventId,
|
||||||
sender: localRtcMember.sender,
|
sender: localRtcMember.userId,
|
||||||
type: ElementCallReactionEventType,
|
type: ElementCallReactionEventType,
|
||||||
content: {
|
content: {
|
||||||
emoji: " ",
|
emoji: " ",
|
||||||
@@ -448,7 +448,7 @@ test("that reactions cannot be spammed", () => {
|
|||||||
new MatrixEvent({
|
new MatrixEvent({
|
||||||
room_id: rtcSession.room.roomId,
|
room_id: rtcSession.room.roomId,
|
||||||
event_id: reactionEventId,
|
event_id: reactionEventId,
|
||||||
sender: localRtcMember.sender,
|
sender: localRtcMember.userId,
|
||||||
type: ElementCallReactionEventType,
|
type: ElementCallReactionEventType,
|
||||||
content: {
|
content: {
|
||||||
emoji: reactionA.emoji,
|
emoji: reactionA.emoji,
|
||||||
@@ -470,7 +470,7 @@ test("that reactions cannot be spammed", () => {
|
|||||||
new MatrixEvent({
|
new MatrixEvent({
|
||||||
room_id: rtcSession.room.roomId,
|
room_id: rtcSession.room.roomId,
|
||||||
event_id: reactionEventId,
|
event_id: reactionEventId,
|
||||||
sender: localRtcMember.sender,
|
sender: localRtcMember.userId,
|
||||||
type: ElementCallReactionEventType,
|
type: ElementCallReactionEventType,
|
||||||
content: {
|
content: {
|
||||||
emoji: reactionB.emoji,
|
emoji: reactionB.emoji,
|
||||||
@@ -495,7 +495,7 @@ test("that reactions cannot be spammed", () => {
|
|||||||
{
|
{
|
||||||
a: {},
|
a: {},
|
||||||
b: {
|
b: {
|
||||||
[`${localRtcMember.sender}:${localRtcMember.deviceId}`]: {
|
[`${localRtcMember.userId}:${localRtcMember.deviceId}`]: {
|
||||||
reactionOption: reactionA,
|
reactionOption: reactionA,
|
||||||
expireAfter: new Date(REACTION_ACTIVE_TIME_MS),
|
expireAfter: new Date(REACTION_ACTIVE_TIME_MS),
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ export class ReactionsReader {
|
|||||||
private onMembershipsChanged = (oldMemberships: CallMembership[]): void => {
|
private onMembershipsChanged = (oldMemberships: CallMembership[]): void => {
|
||||||
// Remove any raised hands for users no longer joined to the call.
|
// Remove any raised hands for users no longer joined to the call.
|
||||||
for (const identifier of Object.keys(this.raisedHandsSubject$.value).filter(
|
for (const identifier of Object.keys(this.raisedHandsSubject$.value).filter(
|
||||||
(rhId) => oldMemberships.find((u) => u.sender == rhId),
|
(rhId) => oldMemberships.find((u) => u.userId == rhId),
|
||||||
)) {
|
)) {
|
||||||
this.removeRaisedHand(identifier);
|
this.removeRaisedHand(identifier);
|
||||||
}
|
}
|
||||||
@@ -138,10 +138,10 @@ export class ReactionsReader {
|
|||||||
// For each member in the call, check to see if a reaction has
|
// For each member in the call, check to see if a reaction has
|
||||||
// been raised and adjust.
|
// been raised and adjust.
|
||||||
for (const m of this.rtcSession.memberships) {
|
for (const m of this.rtcSession.memberships) {
|
||||||
if (!m.sender || !m.eventId) {
|
if (!m.userId || !m.eventId) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const identifier = `${m.sender}:${m.deviceId}`;
|
const identifier = `${m.userId}:${m.deviceId}`;
|
||||||
if (
|
if (
|
||||||
this.raisedHandsSubject$.value[identifier] &&
|
this.raisedHandsSubject$.value[identifier] &&
|
||||||
this.raisedHandsSubject$.value[identifier].membershipEventId !==
|
this.raisedHandsSubject$.value[identifier].membershipEventId !==
|
||||||
@@ -151,13 +151,13 @@ export class ReactionsReader {
|
|||||||
// was raised, reset.
|
// was raised, reset.
|
||||||
this.removeRaisedHand(identifier);
|
this.removeRaisedHand(identifier);
|
||||||
}
|
}
|
||||||
const reaction = this.getLastReactionEvent(m.eventId, m.sender);
|
const reaction = this.getLastReactionEvent(m.eventId, m.userId);
|
||||||
if (reaction) {
|
if (reaction) {
|
||||||
const eventId = reaction?.getId();
|
const eventId = reaction?.getId();
|
||||||
if (!eventId) {
|
if (!eventId) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
this.addRaisedHand(`${m.sender}:${m.deviceId}`, {
|
this.addRaisedHand(`${m.userId}:${m.deviceId}`, {
|
||||||
membershipEventId: m.eventId,
|
membershipEventId: m.eventId,
|
||||||
reactionEventId: eventId,
|
reactionEventId: eventId,
|
||||||
time: new Date(reaction.localTimestamp),
|
time: new Date(reaction.localTimestamp),
|
||||||
@@ -219,7 +219,7 @@ export class ReactionsReader {
|
|||||||
|
|
||||||
const membershipEventId = content?.["m.relates_to"]?.event_id;
|
const membershipEventId = content?.["m.relates_to"]?.event_id;
|
||||||
const membershipEvent = this.rtcSession.memberships.find(
|
const membershipEvent = this.rtcSession.memberships.find(
|
||||||
(e) => e.eventId === membershipEventId && e.sender === sender,
|
(e) => e.eventId === membershipEventId && e.userId === sender,
|
||||||
);
|
);
|
||||||
// Check to see if this reaction was made to a membership event (and the
|
// Check to see if this reaction was made to a membership event (and the
|
||||||
// sender of the reaction matches the membership)
|
// sender of the reaction matches the membership)
|
||||||
@@ -229,7 +229,7 @@ export class ReactionsReader {
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const identifier = `${membershipEvent.sender}:${membershipEvent.deviceId}`;
|
const identifier = `${membershipEvent.userId}:${membershipEvent.deviceId}`;
|
||||||
|
|
||||||
if (!content.emoji) {
|
if (!content.emoji) {
|
||||||
logger.warn(`Reaction had no emoji from ${reactionEventId}`);
|
logger.warn(`Reaction had no emoji from ${reactionEventId}`);
|
||||||
@@ -278,7 +278,7 @@ export class ReactionsReader {
|
|||||||
// Check to see if this reaction was made to a membership event (and the
|
// Check to see if this reaction was made to a membership event (and the
|
||||||
// sender of the reaction matches the membership)
|
// sender of the reaction matches the membership)
|
||||||
const membershipEvent = this.rtcSession.memberships.find(
|
const membershipEvent = this.rtcSession.memberships.find(
|
||||||
(e) => e.eventId === membershipEventId && e.sender === sender,
|
(e) => e.eventId === membershipEventId && e.userId === sender,
|
||||||
);
|
);
|
||||||
if (!membershipEvent) {
|
if (!membershipEvent) {
|
||||||
logger.warn(
|
logger.warn(
|
||||||
@@ -289,7 +289,7 @@ export class ReactionsReader {
|
|||||||
|
|
||||||
if (content?.["m.relates_to"].key === "🖐️") {
|
if (content?.["m.relates_to"].key === "🖐️") {
|
||||||
this.addRaisedHand(
|
this.addRaisedHand(
|
||||||
`${membershipEvent.sender}:${membershipEvent.deviceId}`,
|
`${membershipEvent.userId}:${membershipEvent.deviceId}`,
|
||||||
{
|
{
|
||||||
reactionEventId,
|
reactionEventId,
|
||||||
membershipEventId,
|
membershipEventId,
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ export const ReactionsSenderProvider = ({
|
|||||||
const myMembershipEvent = useMemo(
|
const myMembershipEvent = useMemo(
|
||||||
() =>
|
() =>
|
||||||
memberships.find(
|
memberships.find(
|
||||||
(m) => m.sender === myUserId && m.deviceId === myDeviceId,
|
(m) => m.userId === myUserId && m.deviceId === myDeviceId,
|
||||||
)?.eventId,
|
)?.eventId,
|
||||||
[memberships, myUserId, myDeviceId],
|
[memberships, myUserId, myDeviceId],
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ test("plays one sound when a hand is raised", () => {
|
|||||||
act(() => {
|
act(() => {
|
||||||
handRaisedSubject$.next({
|
handRaisedSubject$.next({
|
||||||
// TODO: What is this string supposed to be?
|
// TODO: What is this string supposed to be?
|
||||||
[`${bobRtcMember.sender}:${bobRtcMember.deviceId}`]: {
|
[`${bobRtcMember.userId}:${bobRtcMember.deviceId}`]: {
|
||||||
time: new Date(),
|
time: new Date(),
|
||||||
membershipEventId: "",
|
membershipEventId: "",
|
||||||
reactionEventId: "",
|
reactionEventId: "",
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ function createGroupCallView(
|
|||||||
} {
|
} {
|
||||||
const client = {
|
const client = {
|
||||||
getUser: () => null,
|
getUser: () => null,
|
||||||
getUserId: () => localRtcMember.sender,
|
getUserId: () => localRtcMember.userId,
|
||||||
getDeviceId: () => localRtcMember.deviceId,
|
getDeviceId: () => localRtcMember.deviceId,
|
||||||
getRoom: (rId) => (rId === roomId ? room : null),
|
getRoom: (rId) => (rId === roomId ? room : null),
|
||||||
} as Partial<MatrixClient> as MatrixClient;
|
} as Partial<MatrixClient> as MatrixClient;
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ export const GroupCallView: FC<Props> = ({
|
|||||||
|
|
||||||
// Count each member only once, regardless of how many devices they use
|
// Count each member only once, regardless of how many devices they use
|
||||||
const participantCount = useMemo(
|
const participantCount = useMemo(
|
||||||
() => new Set<string>(memberships.map((m) => m.sender!)).size,
|
() => new Set<string>(memberships.map((m) => m.userId!)).size,
|
||||||
[memberships],
|
[memberships],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ function createInCallView(): RenderResult & {
|
|||||||
} {
|
} {
|
||||||
const client = {
|
const client = {
|
||||||
getUser: () => null,
|
getUser: () => null,
|
||||||
getUserId: () => localRtcMember.sender,
|
getUserId: () => localRtcMember.userId,
|
||||||
getDeviceId: () => localRtcMember.deviceId,
|
getDeviceId: () => localRtcMember.deviceId,
|
||||||
getRoom: (rId) => (rId === roomId ? room : null),
|
getRoom: (rId) => (rId === roomId ? room : null),
|
||||||
} as Partial<MatrixClient> as MatrixClient;
|
} as Partial<MatrixClient> as MatrixClient;
|
||||||
|
|||||||
@@ -305,7 +305,7 @@ function withCallViewModel(
|
|||||||
const room = mockMatrixRoom({
|
const room = mockMatrixRoom({
|
||||||
client: new (class extends EventEmitter {
|
client: new (class extends EventEmitter {
|
||||||
public getUserId(): string | undefined {
|
public getUserId(): string | undefined {
|
||||||
return localRtcMember.sender;
|
return localRtcMember.userId;
|
||||||
}
|
}
|
||||||
public getDeviceId(): string {
|
public getDeviceId(): string {
|
||||||
return localRtcMember.deviceId;
|
return localRtcMember.deviceId;
|
||||||
@@ -1070,7 +1070,7 @@ it("should rank raised hands above video feeds and below speakers and presenters
|
|||||||
},
|
},
|
||||||
b: () => {
|
b: () => {
|
||||||
raisedHands$.next({
|
raisedHands$.next({
|
||||||
[`${bobRtcMember.sender}:${bobRtcMember.deviceId}`]: {
|
[`${bobRtcMember.userId}:${bobRtcMember.deviceId}`]: {
|
||||||
time: new Date(),
|
time: new Date(),
|
||||||
reactionEventId: "",
|
reactionEventId: "",
|
||||||
membershipEventId: "",
|
membershipEventId: "",
|
||||||
|
|||||||
@@ -315,7 +315,7 @@ export class CallViewModel extends ViewModel {
|
|||||||
const oldestMembership =
|
const oldestMembership =
|
||||||
this.matrixRTCSession.getOldestMembership();
|
this.matrixRTCSession.getOldestMembership();
|
||||||
const remote = memberships.flatMap((m) => {
|
const remote = memberships.flatMap((m) => {
|
||||||
if (m.sender === this.userId && m.deviceId === this.deviceId)
|
if (m.userId === this.userId && m.deviceId === this.deviceId)
|
||||||
return [];
|
return [];
|
||||||
const t = m.getTransport(oldestMembership ?? m);
|
const t = m.getTransport(oldestMembership ?? m);
|
||||||
return t && isLivekitTransport(t)
|
return t && isLivekitTransport(t)
|
||||||
@@ -664,7 +664,7 @@ export class CallViewModel extends ViewModel {
|
|||||||
| undefined;
|
| undefined;
|
||||||
member: RoomMember;
|
member: RoomMember;
|
||||||
}[] = ps.map(({ participant, membership }) => ({
|
}[] = ps.map(({ participant, membership }) => ({
|
||||||
id: `${membership.sender}:${membership.deviceId}`,
|
id: `${membership.userId}:${membership.deviceId}`,
|
||||||
participant,
|
participant,
|
||||||
member:
|
member:
|
||||||
getRoomMemberFromRtcMember(
|
getRoomMemberFromRtcMember(
|
||||||
@@ -741,7 +741,7 @@ export class CallViewModel extends ViewModel {
|
|||||||
|
|
||||||
// We only consider RTC members for disambiguation as they are the only visible members.
|
// We only consider RTC members for disambiguation as they are the only visible members.
|
||||||
for (const rtcMember of memberships) {
|
for (const rtcMember of memberships) {
|
||||||
const matrixIdentifier = `${rtcMember.sender}:${rtcMember.deviceId}`;
|
const matrixIdentifier = `${rtcMember.userId}:${rtcMember.deviceId}`;
|
||||||
const { member } = getRoomMemberFromRtcMember(rtcMember, room);
|
const { member } = getRoomMemberFromRtcMember(rtcMember, room);
|
||||||
if (!member) {
|
if (!member) {
|
||||||
logger.error(
|
logger.error(
|
||||||
@@ -894,8 +894,8 @@ export class CallViewModel extends ViewModel {
|
|||||||
pairwise(),
|
pairwise(),
|
||||||
filter(
|
filter(
|
||||||
([prev, current]) =>
|
([prev, current]) =>
|
||||||
current.every((m) => m.sender === this.userId) &&
|
current.every((m) => m.userId === this.userId) &&
|
||||||
prev.some((m) => m.sender !== this.userId),
|
prev.some((m) => m.userId !== this.userId),
|
||||||
),
|
),
|
||||||
map(() => {}),
|
map(() => {}),
|
||||||
);
|
);
|
||||||
@@ -970,7 +970,7 @@ export class CallViewModel extends ViewModel {
|
|||||||
* Whether some Matrix user other than ourself is joined to the call.
|
* Whether some Matrix user other than ourself is joined to the call.
|
||||||
*/
|
*/
|
||||||
private readonly someoneElseJoined$ = this.memberships$.pipe(
|
private readonly someoneElseJoined$ = this.memberships$.pipe(
|
||||||
map((ms) => ms.some((m) => m.sender !== this.userId)),
|
map((ms) => ms.some((m) => m.userId !== this.userId)),
|
||||||
) as Behavior<boolean>;
|
) as Behavior<boolean>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1971,20 +1971,18 @@ function getRoomMemberFromRtcMember(
|
|||||||
rtcMember: CallMembership,
|
rtcMember: CallMembership,
|
||||||
room: MatrixRoom,
|
room: MatrixRoom,
|
||||||
): { id: string; member: RoomMember | undefined } {
|
): { id: string; member: RoomMember | undefined } {
|
||||||
// WARN! This is not exactly the sender but the user defined in the state key.
|
let id = rtcMember.userId + ":" + rtcMember.deviceId;
|
||||||
// This will be available once we change to the new "member as object" format in the MatrixRTC object.
|
|
||||||
let id = rtcMember.sender + ":" + rtcMember.deviceId;
|
|
||||||
|
|
||||||
if (!rtcMember.sender) {
|
if (!rtcMember.userId) {
|
||||||
return { id, member: undefined };
|
return { id, member: undefined };
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
rtcMember.sender === room.client.getUserId() &&
|
rtcMember.userId === room.client.getUserId() &&
|
||||||
rtcMember.deviceId === room.client.getDeviceId()
|
rtcMember.deviceId === room.client.getDeviceId()
|
||||||
) {
|
) {
|
||||||
id = "local";
|
id = "local";
|
||||||
}
|
}
|
||||||
|
|
||||||
const member = room.getMember(rtcMember.sender) ?? undefined;
|
const member = room.getMember(rtcMember.userId) ?? undefined;
|
||||||
return { id, member };
|
return { id, member };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -435,16 +435,16 @@ describe("Start connection states", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
function fakeRemoteLivekitParticipant(id: string): RemoteParticipant {
|
function fakeRemoteLivekitParticipant(id: string): RemoteParticipant {
|
||||||
return vi.mocked<RemoteParticipant>({
|
return {
|
||||||
identity: id,
|
identity: id,
|
||||||
} as unknown as RemoteParticipant);
|
} as unknown as RemoteParticipant;
|
||||||
}
|
}
|
||||||
|
|
||||||
function fakeRtcMemberShip(userId: string, deviceId: string): CallMembership {
|
function fakeRtcMemberShip(userId: string, deviceId: string): CallMembership {
|
||||||
return vi.mocked<CallMembership>({
|
return {
|
||||||
sender: userId,
|
userId,
|
||||||
deviceId: deviceId,
|
deviceId,
|
||||||
} as unknown as CallMembership);
|
} as unknown as CallMembership;
|
||||||
}
|
}
|
||||||
|
|
||||||
describe("Publishing participants observations", () => {
|
describe("Publishing participants observations", () => {
|
||||||
@@ -570,7 +570,7 @@ describe("Publishing participants observations", () => {
|
|||||||
// he is using that focus to publish, so he should still appear as a publisher
|
// he is using that focus to publish, so he should still appear as a publisher
|
||||||
expect(updatedPublishers?.length).toEqual(2);
|
expect(updatedPublishers?.length).toEqual(2);
|
||||||
const pp = updatedPublishers?.find(
|
const pp = updatedPublishers?.find(
|
||||||
(p) => p.membership.sender == "@bob:example.org",
|
(p) => p.membership.userId == "@bob:example.org",
|
||||||
);
|
);
|
||||||
expect(pp).toBeDefined();
|
expect(pp).toBeDefined();
|
||||||
expect(pp!.participant).not.toBeDefined();
|
expect(pp!.participant).not.toBeDefined();
|
||||||
@@ -581,7 +581,7 @@ describe("Publishing participants observations", () => {
|
|||||||
).toBeTruthy();
|
).toBeTruthy();
|
||||||
// Now if bob is not in the rtc memberships, he should disappear
|
// Now if bob is not in the rtc memberships, he should disappear
|
||||||
const noBob = rtcMemberships.filter(
|
const noBob = rtcMemberships.filter(
|
||||||
({ membership }) => membership.sender !== "@bob:example.org",
|
({ membership }) => membership.userId !== "@bob:example.org",
|
||||||
);
|
);
|
||||||
fakeMembershipsFocusMap$.next(noBob);
|
fakeMembershipsFocusMap$.next(noBob);
|
||||||
expect(observedPublishers.pop()?.length).toEqual(1);
|
expect(observedPublishers.pop()?.length).toEqual(1);
|
||||||
|
|||||||
@@ -242,7 +242,7 @@ export class Connection {
|
|||||||
)
|
)
|
||||||
// Pair with their associated LiveKit participant (if any)
|
// Pair with their associated LiveKit participant (if any)
|
||||||
.map((membership) => {
|
.map((membership) => {
|
||||||
const id = `${membership.sender}:${membership.deviceId}`;
|
const id = `${membership.userId}:${membership.deviceId}`;
|
||||||
const participant = participants.find((p) => p.identity === id);
|
const participant = participants.find((p) => p.identity === id);
|
||||||
return { participant, membership };
|
return { participant, membership };
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ export function shouldDisambiguate(
|
|||||||
// displayname, after hidden character removal.
|
// displayname, after hidden character removal.
|
||||||
return (
|
return (
|
||||||
memberships
|
memberships
|
||||||
.map((m) => m.sender && room.getMember(m.sender))
|
.map((m) => m.userId && room.getMember(m.userId))
|
||||||
// NOTE: We *should* have a room member for everyone.
|
// NOTE: We *should* have a room member for everyone.
|
||||||
.filter((m) => !!m)
|
.filter((m) => !!m)
|
||||||
.filter((m) => m.userId !== userId)
|
.filter((m) => m.userId !== userId)
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ export function getBasicRTCSession(
|
|||||||
getChildEventsForEvent: vitest.fn(),
|
getChildEventsForEvent: vitest.fn(),
|
||||||
} as Partial<RelationsContainer> as RelationsContainer,
|
} as Partial<RelationsContainer> as RelationsContainer,
|
||||||
client: {
|
client: {
|
||||||
getUserId: () => localRtcMember.sender,
|
getUserId: () => localRtcMember.userId,
|
||||||
getDeviceId: () => localRtcMember.deviceId,
|
getDeviceId: () => localRtcMember.deviceId,
|
||||||
getSyncState: () => SyncState.Syncing,
|
getSyncState: () => SyncState.Syncing,
|
||||||
sendEvent: vitest.fn().mockResolvedValue({ event_id: "$fake:event" }),
|
sendEvent: vitest.fn().mockResolvedValue({ event_id: "$fake:event" }),
|
||||||
|
|||||||
@@ -210,11 +210,11 @@ export function mockMatrixRoomMember(
|
|||||||
): RoomMember {
|
): RoomMember {
|
||||||
return {
|
return {
|
||||||
...mockEmitter(),
|
...mockEmitter(),
|
||||||
userId: rtcMembership.sender,
|
userId: rtcMembership.userId,
|
||||||
getMxcAvatarUrl(): string | undefined {
|
getMxcAvatarUrl(): string | undefined {
|
||||||
return undefined;
|
return undefined;
|
||||||
},
|
},
|
||||||
rawDisplayName: rtcMembership.sender,
|
rawDisplayName: rtcMembership.userId,
|
||||||
...member,
|
...member,
|
||||||
} as RoomMember;
|
} as RoomMember;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user