From b46f58274e2b097a2067ee1bb12c2b86d362f481 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 30 Sep 2020 20:09:23 -0600 Subject: [PATCH] Fix the hangup button and other custom actions --- src/CallHandler.tsx | 7 ++++--- src/components/views/elements/AppTile.js | 3 ++- src/components/views/rooms/Stickerpicker.js | 1 - src/stores/widgets/ElementWidgetActions.ts | 21 +++++++++++++++++++++ src/stores/widgets/StopGapWidget.ts | 3 ++- 5 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 src/stores/widgets/ElementWidgetActions.ts diff --git a/src/CallHandler.tsx b/src/CallHandler.tsx index 849859eb20..49f82e3209 100644 --- a/src/CallHandler.tsx +++ b/src/CallHandler.tsx @@ -76,6 +76,8 @@ import QuestionDialog from "./components/views/dialogs/QuestionDialog"; import ErrorDialog from "./components/views/dialogs/ErrorDialog"; import WidgetStore from "./stores/WidgetStore"; import ActiveWidgetStore from "./stores/ActiveWidgetStore"; +import { WidgetMessagingStore } from "./stores/widgets/WidgetMessagingStore"; +import { ElementWidgetActions } from "./stores/widgets/ElementWidgetActions"; // until we ts-ify the js-sdk voip code type Call = any; @@ -495,13 +497,12 @@ export default class CallHandler { const roomInfo = WidgetStore.instance.getRoom(roomId); if (!roomInfo) return; // "should never happen" clauses go here - // TODO: [TravisR] Fix this const jitsiWidgets = roomInfo.widgets.filter(w => WidgetType.JITSI.matches(w.type)); jitsiWidgets.forEach(w => { - const messaging = ActiveWidgetStore.getWidgetMessaging(w.id); + const messaging = WidgetMessagingStore.instance.getMessagingForId(w.id); if (!messaging) return; // more "should never happen" words - messaging.hangup(); + messaging.transport.send(ElementWidgetActions.HangupCall, {}); }); } } diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index 8888fe79b4..e8ef4de257 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -41,6 +41,7 @@ import {SettingLevel} from "../../../settings/SettingLevel"; import WidgetStore from "../../../stores/WidgetStore"; import {Action} from "../../../dispatcher/actions"; import {StopGapWidget} from "../../../stores/widgets/StopGapWidget"; +import {ElementWidgetActions} from "../../../stores/widgets/ElementWidgetActions"; export default class AppTile extends React.Component { constructor(props) { @@ -296,7 +297,7 @@ export default class AppTile extends React.Component { _onWidgetReady = () => { this.setState({loading: false}); if (WidgetType.JITSI.matches(this.props.app.type)) { - this._sgWidget.widgetApi.transport.send("im.vector.ready", {}); + this._sgWidget.widgetApi.transport.send(ElementWidgetActions.ClientReady, {}); } }; diff --git a/src/components/views/rooms/Stickerpicker.js b/src/components/views/rooms/Stickerpicker.js index 039d2571f4..d191e05407 100644 --- a/src/components/views/rooms/Stickerpicker.js +++ b/src/components/views/rooms/Stickerpicker.js @@ -213,7 +213,6 @@ export default class Stickerpicker extends React.Component { _sendVisibilityToWidget(visible) { if (!this.state.stickerpickerWidget) return; - // TODO: [TravisR] Fix this const messaging = WidgetMessagingStore.instance.getMessagingForId(this.state.stickerpickerWidget.id); if (messaging && visible !== this._prevSentVisibility) { messaging.updateVisibility(visible).catch(err => { diff --git a/src/stores/widgets/ElementWidgetActions.ts b/src/stores/widgets/ElementWidgetActions.ts new file mode 100644 index 0000000000..b101a119a4 --- /dev/null +++ b/src/stores/widgets/ElementWidgetActions.ts @@ -0,0 +1,21 @@ +/* + * Copyright 2020 The Matrix.org Foundation C.I.C. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export enum ElementWidgetActions { + ClientReady = "im.vector.ready", + HangupCall = "im.vector.hangup", + OpenIntegrationManager = "integration_manager_open", +} diff --git a/src/stores/widgets/StopGapWidget.ts b/src/stores/widgets/StopGapWidget.ts index 073073abec..cd66522488 100644 --- a/src/stores/widgets/StopGapWidget.ts +++ b/src/stores/widgets/StopGapWidget.ts @@ -38,6 +38,7 @@ import ActiveWidgetStore from "../ActiveWidgetStore"; import { objectShallowClone } from "../../utils/objects"; import defaultDispatcher from "../../dispatcher/dispatcher"; import dis from "../../dispatcher/dispatcher"; +import { ElementWidgetActions } from "./ElementWidgetActions"; // TODO: Destroy all of this code @@ -178,7 +179,7 @@ export class StopGapWidget extends EventEmitter { }, ); } else if (WidgetType.STICKERPICKER.matches(this.mockWidget.type)) { - this.messaging.addEventListener("action:integration_manager_open", + this.messaging.addEventListener(`action:${ElementWidgetActions.OpenIntegrationManager}`, (ev: CustomEvent) => { // Acknowledge first ev.preventDefault();