Ignore decline events from the local user
This commit is contained in:
@@ -26,6 +26,7 @@ import {
|
|||||||
MatrixEvent,
|
MatrixEvent,
|
||||||
type IRoomTimelineData,
|
type IRoomTimelineData,
|
||||||
EventType,
|
EventType,
|
||||||
|
type IEvent,
|
||||||
} from "matrix-js-sdk";
|
} from "matrix-js-sdk";
|
||||||
import {
|
import {
|
||||||
ConnectionState,
|
ConnectionState,
|
||||||
@@ -248,12 +249,14 @@ function summarizeLayout$(l$: Observable<Layout>): Observable<LayoutSummary> {
|
|||||||
function mockRingEvent(
|
function mockRingEvent(
|
||||||
eventId: string,
|
eventId: string,
|
||||||
lifetimeMs: number | undefined,
|
lifetimeMs: number | undefined,
|
||||||
|
sender = local.userId,
|
||||||
): { event_id: string } & IRTCNotificationContent {
|
): { event_id: string } & IRTCNotificationContent {
|
||||||
return {
|
return {
|
||||||
event_id: eventId,
|
event_id: eventId,
|
||||||
...(lifetimeMs === undefined ? {} : { lifetime: lifetimeMs }),
|
...(lifetimeMs === undefined ? {} : { lifetime: lifetimeMs }),
|
||||||
notification_type: "ring",
|
notification_type: "ring",
|
||||||
} as { event_id: string } & IRTCNotificationContent;
|
sender,
|
||||||
|
} as unknown as { event_id: string } & IRTCNotificationContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The app doesn't really care about the content of these legacy events, we just
|
// The app doesn't really care about the content of these legacy events, we just
|
||||||
@@ -1436,7 +1439,7 @@ describe("waitForCallPickup$", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test("decline after timeout window ends -> stays timeout", () => {
|
test("decline after timeout window ends -> stays timeout", () => {
|
||||||
withTestScheduler(({ hot, schedule, expectObservable, scope }) => {
|
withTestScheduler(({ schedule, expectObservable }) => {
|
||||||
withCallViewModel(
|
withCallViewModel(
|
||||||
{},
|
{},
|
||||||
(vm, rtcSession) => {
|
(vm, rtcSession) => {
|
||||||
@@ -1475,8 +1478,8 @@ describe("waitForCallPickup$", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test("decline with wrong id is ignored (stays ringing)", () => {
|
function testStaysRinging(declineEvent: Partial<IEvent>): void {
|
||||||
withTestScheduler(({ hot, schedule, expectObservable, scope }) => {
|
withTestScheduler(({ schedule, expectObservable }) => {
|
||||||
withCallViewModel(
|
withCallViewModel(
|
||||||
{},
|
{},
|
||||||
(vm, rtcSession) => {
|
(vm, rtcSession) => {
|
||||||
@@ -1492,7 +1495,7 @@ describe("waitForCallPickup$", () => {
|
|||||||
d: () => {
|
d: () => {
|
||||||
rtcSession.room.emit(
|
rtcSession.room.emit(
|
||||||
MatrixRoomEvent.Timeline,
|
MatrixRoomEvent.Timeline,
|
||||||
new MatrixEvent({ event_id: "$wrong", type: "m.rtc.decline" }),
|
new MatrixEvent(declineEvent),
|
||||||
rtcSession.room,
|
rtcSession.room,
|
||||||
undefined,
|
undefined,
|
||||||
false,
|
false,
|
||||||
@@ -1512,6 +1515,22 @@ describe("waitForCallPickup$", () => {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
test("decline with wrong id is ignored (stays ringing)", () => {
|
||||||
|
testStaysRinging({
|
||||||
|
event_id: "$wrong",
|
||||||
|
type: "m.rtc.decline",
|
||||||
|
sender: local.userId,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test("decline with sender being the local user is ignored (stays ringing)", () => {
|
||||||
|
testStaysRinging({
|
||||||
|
event_id: "$right",
|
||||||
|
type: "m.rtc.decline",
|
||||||
|
sender: alice.userId,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -936,7 +936,8 @@ export class CallViewModel extends ViewModel {
|
|||||||
([event]) =>
|
([event]) =>
|
||||||
event.getType() === EventType.RTCDecline &&
|
event.getType() === EventType.RTCDecline &&
|
||||||
event.getRelation()?.rel_type === "m.reference" &&
|
event.getRelation()?.rel_type === "m.reference" &&
|
||||||
event.getRelation()?.event_id === notificationEvent.event_id,
|
event.getRelation()?.event_id === notificationEvent.event_id &&
|
||||||
|
event.getSender() !== this.userId,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user