some more fixes

This commit is contained in:
Bruno Windels 2022-03-22 20:29:31 +01:00
parent cad2aa760d
commit 9efd191f4e
7 changed files with 29 additions and 13 deletions

View file

@ -42,7 +42,6 @@ export class CallViewModel extends ViewModel<Options> {
} }
get localTracks(): Track[] { get localTracks(): Track[] {
console.log("localTracks", this.getOption("call").localMedia);
return this.getOption("call").localMedia?.tracks ?? []; return this.getOption("call").localMedia?.tracks ?? [];
} }
} }

View file

@ -347,12 +347,17 @@ export class RoomViewModel extends ViewModel {
} }
async startCall() { async startCall() {
const session = this.getOption("session"); try {
const mediaTracks = await this.platform.mediaDevices.getMediaTracks(true, true); const session = this.getOption("session");
const localMedia = new LocalMedia().withTracks(mediaTracks); const mediaTracks = await this.platform.mediaDevices.getMediaTracks(true, true);
console.log("localMedia", localMedia.tracks); const localMedia = new LocalMedia().withTracks(mediaTracks);
// this will set the callViewModel above as a call will be added to callHandler.calls console.log("localMedia", localMedia.tracks);
await session.callHandler.createCall(this._room.id, localMedia, "A call " + Math.round(this.platform.random() * 100)); // this will set the callViewModel above as a call will be added to callHandler.calls
await session.callHandler.createCall(this._room.id, localMedia, "A call " + Math.round(this.platform.random() * 100));
} catch (err) {
console.error(err.stack);
alert(err.message);
}
} }
} }

View file

@ -88,7 +88,11 @@ export class Session {
const devices = await this._deviceTracker.devicesForTrackedRoom(roomId, this._hsApi, log); const devices = await this._deviceTracker.devicesForTrackedRoom(roomId, this._hsApi, log);
const encryptedMessage = await this._olmEncryption.encrypt(message.type, message.content, devices, this._hsApi, log); const encryptedMessage = await this._olmEncryption.encrypt(message.type, message.content, devices, this._hsApi, log);
return encryptedMessage; return encryptedMessage;
} },
storage: this._storage,
webRTC: this._platform.webRTC,
ownDeviceId: sessionInfo.deviceId,
ownUserId: sessionInfo.userId,
}); });
this._deviceMessageHandler = new DeviceMessageHandler({storage, callHandler: this._callHandler}); this._deviceMessageHandler = new DeviceMessageHandler({storage, callHandler: this._callHandler});
this._olm = olm; this._olm = olm;

View file

@ -63,7 +63,9 @@ export class CallHandler {
} }
throw err; throw err;
} }
console.log("joining call I just created");
await call.join(localMedia); await call.join(localMedia);
console.log("joined!");
return call; return call;
} }
@ -73,6 +75,7 @@ export class CallHandler {
/** @internal */ /** @internal */
handleRoomState(room: Room, events: StateEvent[], log: ILogItem) { handleRoomState(room: Room, events: StateEvent[], log: ILogItem) {
console.log("handling room state");
// first update call events // first update call events
for (const event of events) { for (const event of events) {
if (event.type === EventType.GroupCall) { if (event.type === EventType.GroupCall) {

View file

@ -49,7 +49,7 @@ export type Options = Omit<MemberOptions, "emitUpdate" | "confId" | "encryptDevi
export class GroupCall { export class GroupCall {
public readonly id: string; public readonly id: string;
private readonly _members: ObservableMap<string, Member> = new ObservableMap(); private readonly _members: ObservableMap<string, Member> = new ObservableMap();
private _localMedia?: LocalMedia; private _localMedia?: LocalMedia = undefined;
private _memberOptions: MemberOptions; private _memberOptions: MemberOptions;
private _state: GroupCallState; private _state: GroupCallState;
@ -87,10 +87,12 @@ export class GroupCall {
} }
this._state = GroupCallState.Joining; this._state = GroupCallState.Joining;
this._localMedia = localMedia; this._localMedia = localMedia;
this.options.emitUpdate(this);
const memberContent = await this._joinCallMemberContent(); const memberContent = await this._joinCallMemberContent();
// send m.call.member state event // send m.call.member state event
const request = this.options.hsApi.sendState(this.roomId, "m.call.member", this.options.ownUserId, memberContent); const request = this.options.hsApi.sendState(this.roomId, "m.call.member", this.options.ownUserId, memberContent);
await request.response(); await request.response();
this.options.emitUpdate(this);
// send invite to all members that are < my userId // send invite to all members that are < my userId
for (const [,member] of this._members) { for (const [,member] of this._members) {
member.connect(this._localMedia); member.connect(this._localMedia);
@ -119,6 +121,7 @@ export class GroupCall {
}; };
const request = this.options.hsApi.sendState(this.roomId, "m.call", this.id, this.callContent); const request = this.options.hsApi.sendState(this.roomId, "m.call", this.id, this.callContent);
await request.response(); await request.response();
this._state = GroupCallState.Created;
} }
/** @internal */ /** @internal */

View file

@ -53,7 +53,9 @@ export class PickMapObservableValue<K, V> extends BaseObservableValue<V | undefi
} }
} }
onUpdate(key: K, value: V, params: any): void {} onUpdate(key: K, value: V, params: any): void {
this.emit(this.get());
}
onRemove(key: K, value: V): void { onRemove(key: K, value: V): void {
if (key === this.key) { if (key === this.key) {

View file

@ -33,8 +33,8 @@ function bindVideoTracks<T>(t: TemplateBuilder<T>, video: HTMLVideoElement, prop
export class CallView extends TemplateView<CallViewModel> { export class CallView extends TemplateView<CallViewModel> {
render(t: TemplateBuilder<CallViewModel>, vm: CallViewModel): HTMLElement { render(t: TemplateBuilder<CallViewModel>, vm: CallViewModel): HTMLElement {
return t.div({class: "CallView"}, [ return t.div({class: "CallView"}, [
t.p(`Call ${vm.name} (${vm.id})`), t.p(["Call ", vm => vm.name, vm => ` (${vm.id})`]),
t.div({class: "CallView_me"}, bindVideoTracks(t, t.video(), vm => vm.localTracks)), t.div({class: "CallView_me"}, bindVideoTracks(t, t.video({autoplay: true}), vm => vm.localTracks)),
t.view(new ListView({list: vm.memberViewModels}, vm => new MemberView(vm))) t.view(new ListView({list: vm.memberViewModels}, vm => new MemberView(vm)))
]); ]);
} }
@ -42,6 +42,6 @@ export class CallView extends TemplateView<CallViewModel> {
class MemberView extends TemplateView<CallMemberViewModel> { class MemberView extends TemplateView<CallMemberViewModel> {
render(t: TemplateBuilder<CallMemberViewModel>, vm: CallMemberViewModel) { render(t: TemplateBuilder<CallMemberViewModel>, vm: CallMemberViewModel) {
return bindVideoTracks(t, t.video(), vm => vm.tracks); return bindVideoTracks(t, t.video({autoplay: true}), vm => vm.tracks);
} }
} }