mirror of
https://github.com/vector-im/element-call.git
synced 2026-08-29 21:15:19 +00:00
connection: revert transportState to only static values
and add back the deleted test
This commit is contained in:
@@ -400,10 +400,10 @@ export class CallViewModel extends ViewModel {
|
|||||||
c?.state === "ready"
|
c?.state === "ready"
|
||||||
? // TODO mapping to ConnectionState for compatibility, but we should use the full state?
|
? // TODO mapping to ConnectionState for compatibility, but we should use the full state?
|
||||||
c.value.transportState$.pipe(
|
c.value.transportState$.pipe(
|
||||||
switchMap((s) => {
|
map((s) => {
|
||||||
if (s.state === "ConnectedToLkRoom")
|
if (s.state === "ConnectedToLkRoom")
|
||||||
return s.connectionState$;
|
return s.livekitState;
|
||||||
return of(ConnectionState.Disconnected);
|
return ConnectionState.Disconnected;
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
: of(ConnectionState.Disconnected),
|
: of(ConnectionState.Disconnected),
|
||||||
|
|||||||
@@ -364,6 +364,59 @@ describe("Start connection states", () => {
|
|||||||
expect(connectedState?.state).toEqual("ConnectedToLkRoom");
|
expect(connectedState?.state).toEqual("ConnectedToLkRoom");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should relay livekit events once connected", async () => {
|
||||||
|
setupTest();
|
||||||
|
|
||||||
|
const connection = setupRemoteConnection();
|
||||||
|
|
||||||
|
await connection.start();
|
||||||
|
|
||||||
|
let capturedStates: TransportState[] = [];
|
||||||
|
const s = connection.transportState$.subscribe((value) => {
|
||||||
|
capturedStates.push(value);
|
||||||
|
});
|
||||||
|
onTestFinished(() => s.unsubscribe());
|
||||||
|
|
||||||
|
const states = [
|
||||||
|
ConnectionState.Disconnected,
|
||||||
|
ConnectionState.Connecting,
|
||||||
|
ConnectionState.Connected,
|
||||||
|
ConnectionState.SignalReconnecting,
|
||||||
|
ConnectionState.Connecting,
|
||||||
|
ConnectionState.Connected,
|
||||||
|
ConnectionState.Reconnecting,
|
||||||
|
];
|
||||||
|
for (const state of states) {
|
||||||
|
fakeRoomEventEmiter.emit(RoomEvent.ConnectionStateChanged, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const state of states) {
|
||||||
|
const s = capturedStates.shift();
|
||||||
|
expect(s?.state).toEqual("ConnectedToLkRoom");
|
||||||
|
const transportState = s as TransportState & {
|
||||||
|
state: "ConnectedToLkRoom";
|
||||||
|
};
|
||||||
|
expect(transportState.livekitState).toEqual(state);
|
||||||
|
|
||||||
|
// should always have the focus info
|
||||||
|
expect(transportState.transport.livekit_alias).toEqual(
|
||||||
|
livekitFocus.livekit_alias,
|
||||||
|
);
|
||||||
|
expect(transportState.transport.livekit_service_url).toEqual(
|
||||||
|
livekitFocus.livekit_service_url,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the state is not ConnectedToLkRoom, no events should be relayed anymore
|
||||||
|
await connection.stop();
|
||||||
|
capturedStates = [];
|
||||||
|
for (const state of states) {
|
||||||
|
fakeRoomEventEmiter.emit(RoomEvent.ConnectionStateChanged, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(capturedStates.length).toEqual(0);
|
||||||
|
});
|
||||||
|
|
||||||
it("shutting down the scope should stop the connection", async () => {
|
it("shutting down the scope should stop the connection", async () => {
|
||||||
setupTest();
|
setupTest();
|
||||||
vi.useFakeTimers();
|
vi.useFakeTimers();
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import {
|
|||||||
type CallMembership,
|
type CallMembership,
|
||||||
type LivekitTransport,
|
type LivekitTransport,
|
||||||
} from "matrix-js-sdk/lib/matrixrtc";
|
} from "matrix-js-sdk/lib/matrixrtc";
|
||||||
import { BehaviorSubject, combineLatest, type Observable } from "rxjs";
|
import { BehaviorSubject, combineLatest } from "rxjs";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
getSFUConfigWithOpenID,
|
getSFUConfigWithOpenID,
|
||||||
@@ -60,7 +60,7 @@ export type TransportState =
|
|||||||
| { state: "FailedToStart"; error: Error; transport: LivekitTransport }
|
| { state: "FailedToStart"; error: Error; transport: LivekitTransport }
|
||||||
| {
|
| {
|
||||||
state: "ConnectedToLkRoom";
|
state: "ConnectedToLkRoom";
|
||||||
connectionState$: Observable<ConnectionState>;
|
livekitState: ConnectionState;
|
||||||
transport: LivekitTransport;
|
transport: LivekitTransport;
|
||||||
}
|
}
|
||||||
| { state: "Stopped"; transport: LivekitTransport };
|
| { state: "Stopped"; transport: LivekitTransport };
|
||||||
@@ -159,7 +159,7 @@ export class Connection {
|
|||||||
this._transportState$.next({
|
this._transportState$.next({
|
||||||
state: "ConnectedToLkRoom",
|
state: "ConnectedToLkRoom",
|
||||||
transport: this.transport,
|
transport: this.transport,
|
||||||
connectionState$: connectionStateObserver(this.livekitRoom),
|
livekitState: this.livekitRoom.state,
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this._transportState$.next({
|
this._transportState$.next({
|
||||||
@@ -250,6 +250,20 @@ export class Connection {
|
|||||||
[],
|
[],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
scope
|
||||||
|
.behavior<ConnectionState>(connectionStateObserver(livekitRoom))
|
||||||
|
.subscribe((livekitState) => {
|
||||||
|
const current = this._transportState$.value;
|
||||||
|
// Only update the state if we are already connected to the LiveKit room.
|
||||||
|
if (current.state === "ConnectedToLkRoom") {
|
||||||
|
this._transportState$.next({
|
||||||
|
state: "ConnectedToLkRoom",
|
||||||
|
livekitState,
|
||||||
|
transport: current.transport,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
scope.onEnd(() => void this.stop());
|
scope.onEnd(() => void this.stop());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user