mirror of
https://github.com/vector-im/hydrogen-web.git
synced 2024-12-23 03:25:12 +01:00
Merge pull request #1007 from vector-im/bwindels/block-sfu-calls
block sfu calls
This commit is contained in:
commit
072004a9c2
@ -94,7 +94,7 @@ export class CallTile extends SimpleTile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get canJoin() {
|
get canJoin() {
|
||||||
return this._call && !this._call.hasJoined;
|
return this._call && !this._call.hasJoined && !this._call.usesFoci;
|
||||||
}
|
}
|
||||||
|
|
||||||
get canLeave() {
|
get canLeave() {
|
||||||
@ -118,11 +118,14 @@ export class CallTile extends SimpleTile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get typeLabel() {
|
get typeLabel() {
|
||||||
|
if (this._call && this._call.usesFoci) {
|
||||||
|
return `This call uses a stream-forwarding unit, which isn't supported yet, so you can't join this call.`;
|
||||||
|
}
|
||||||
if (this.type === CallType.Video) {
|
if (this.type === CallType.Video) {
|
||||||
return `Video call`;
|
return `Video call`;
|
||||||
} else {
|
} else {
|
||||||
return `Voice call`;
|
return `Voice call`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get type() {
|
get type() {
|
||||||
|
@ -79,7 +79,7 @@ export class ToastCollectionViewModel extends ViewModel<SegmentType, Options> {
|
|||||||
|
|
||||||
private _shouldShowNotification(call: GroupCall): boolean {
|
private _shouldShowNotification(call: GroupCall): boolean {
|
||||||
const currentlyOpenedRoomId = this.navigation.path.get("room")?.value;
|
const currentlyOpenedRoomId = this.navigation.path.get("room")?.value;
|
||||||
if (!call.isLoadedFromStorage && call.roomId !== currentlyOpenedRoomId) {
|
if (!call.isLoadedFromStorage && call.roomId !== currentlyOpenedRoomId && !call.usesFoci) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -22,11 +22,17 @@ export enum EventType {
|
|||||||
// TODO: Change to "sdp_stream_metadata" when MSC3077 is merged
|
// TODO: Change to "sdp_stream_metadata" when MSC3077 is merged
|
||||||
export const SDPStreamMetadataKey = "org.matrix.msc3077.sdp_stream_metadata";
|
export const SDPStreamMetadataKey = "org.matrix.msc3077.sdp_stream_metadata";
|
||||||
|
|
||||||
|
export interface FocusConfig {
|
||||||
|
user_id: string,
|
||||||
|
device_id: string
|
||||||
|
}
|
||||||
|
|
||||||
export interface CallDeviceMembership {
|
export interface CallDeviceMembership {
|
||||||
device_id: string,
|
device_id: string,
|
||||||
session_id: string,
|
session_id: string,
|
||||||
["expires_ts"]?: number,
|
["expires_ts"]?: number,
|
||||||
feeds?: Array<{purpose: string}>
|
feeds?: Array<{purpose: string}>
|
||||||
|
["m.foci.active"]?: Array<FocusConfig>
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CallMembership {
|
export interface CallMembership {
|
||||||
|
@ -145,6 +145,15 @@ export class GroupCall extends EventEmitter<{change: never}> {
|
|||||||
return !!this.callContent?.["m.terminated"];
|
return !!this.callContent?.["m.terminated"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get usesFoci(): boolean {
|
||||||
|
for (const member of this._members.values()) {
|
||||||
|
if (member.usesFoci) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
get duration(): number | undefined {
|
get duration(): number | undefined {
|
||||||
if (typeof this.startTime === "number") {
|
if (typeof this.startTime === "number") {
|
||||||
return (this.options.clock.now() - this.startTime);
|
return (this.options.clock.now() - this.startTime);
|
||||||
@ -181,7 +190,8 @@ export class GroupCall extends EventEmitter<{change: never}> {
|
|||||||
|
|
||||||
join(localMedia: LocalMedia, log?: ILogItem): Promise<void> {
|
join(localMedia: LocalMedia, log?: ILogItem): Promise<void> {
|
||||||
return this.options.logger.wrapOrRun(log, "Call.join", async joinLog => {
|
return this.options.logger.wrapOrRun(log, "Call.join", async joinLog => {
|
||||||
if (this._state !== GroupCallState.Created || this.joinedData) {
|
if (this._state !== GroupCallState.Created || this.joinedData || this.usesFoci) {
|
||||||
|
localMedia.dispose();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const logItem = this.options.logger.child({
|
const logItem = this.options.logger.child({
|
||||||
@ -217,7 +227,7 @@ export class GroupCall extends EventEmitter<{change: never}> {
|
|||||||
this.emitChange();
|
this.emitChange();
|
||||||
});
|
});
|
||||||
// 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.values()) {
|
||||||
this.connectToMember(member, joinedData, log);
|
this.connectToMember(member, joinedData, log);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -521,7 +531,7 @@ export class GroupCall extends EventEmitter<{change: never}> {
|
|||||||
disconnect(log: ILogItem): boolean {
|
disconnect(log: ILogItem): boolean {
|
||||||
return this.errorBoundary.try(() => {
|
return this.errorBoundary.try(() => {
|
||||||
if (this.hasJoined) {
|
if (this.hasJoined) {
|
||||||
for (const [,member] of this._members) {
|
for (const member of this._members.values()) {
|
||||||
const disconnectLogItem = member.disconnect(true);
|
const disconnectLogItem = member.disconnect(true);
|
||||||
if (disconnectLogItem) {
|
if (disconnectLogItem) {
|
||||||
log.refDetached(disconnectLogItem);
|
log.refDetached(disconnectLogItem);
|
||||||
|
@ -117,6 +117,11 @@ export class Member {
|
|||||||
return this.errorBoundary.error;
|
return this.errorBoundary.error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get usesFoci(): boolean {
|
||||||
|
const activeFoci = this.callDeviceMembership["m.foci.active"];
|
||||||
|
return Array.isArray(activeFoci) && activeFoci.length > 0;
|
||||||
|
}
|
||||||
|
|
||||||
private _renewExpireTimeout(log: ILogItem) {
|
private _renewExpireTimeout(log: ILogItem) {
|
||||||
this.expireTimeout?.dispose();
|
this.expireTimeout?.dispose();
|
||||||
this.expireTimeout = undefined;
|
this.expireTimeout = undefined;
|
||||||
|
Loading…
Reference in New Issue
Block a user