Handle no local media (yet)

This commit is contained in:
Hugh Nimmo-Smith
2024-11-07 17:53:44 +00:00
parent 238797aed8
commit c37c2e50bd

View File

@@ -598,11 +598,6 @@ export class CallViewModel extends ViewModel {
), ),
); );
private readonly localUserMedia: Observable<LocalUserMediaViewModel> =
this.mediaItems.pipe(
map((ms) => ms.find((m) => m.vm.local)!.vm as LocalUserMediaViewModel),
);
private readonly screenShares: Observable<ScreenShare[]> = private readonly screenShares: Observable<ScreenShare[]> =
this.mediaItems.pipe( this.mediaItems.pipe(
map((mediaItems) => map((mediaItems) =>
@@ -699,12 +694,19 @@ export class CallViewModel extends ViewModel {
speaker speaker
? speaker.local ? speaker.local
? of(undefined) ? of(undefined)
: this.localUserMedia.pipe( : this.mediaItems.pipe(
switchMap((vm) => switchMap((mediaItems) => {
vm.alwaysShow.pipe( const localUserMedia = mediaItems.find(
map((alwaysShow) => (alwaysShow ? vm : undefined)), (m) => m.vm instanceof LocalUserMediaViewModel,
), ) as LocalUserMediaViewModel | undefined;
), return (
localUserMedia?.alwaysShow?.pipe(
map((alwaysShow) =>
alwaysShow ? localUserMedia : undefined,
),
) ?? of(undefined)
);
}),
) )
: of(undefined), : of(undefined),
), ),
@@ -850,9 +852,17 @@ export class CallViewModel extends ViewModel {
| RemoteUserMediaViewModel | RemoteUserMediaViewModel
| undefined; | undefined;
if (!local || !remote) { if (!local || !remote) {
throw new Error( logger.warn(
"Invalid state: there should be local and remote media for one-on-one layout", `Falling back to grid layout for one-on-one layout with missing media: local=${!!local} remote=${!!remote}`,
); );
return {
type: "grid",
grid: grid.filter(
(m) =>
m instanceof LocalUserMediaViewModel ||
m instanceof RemoteUserMediaViewModel,
),
};
} }
return { return {
type: "one-on-one", type: "one-on-one",