diff --git a/src/components/views/messages/MKeyVerificationConclusion.js b/src/components/views/messages/MKeyVerificationConclusion.js index f51b97786b..a17dcd8ab0 100644 --- a/src/components/views/messages/MKeyVerificationConclusion.js +++ b/src/components/views/messages/MKeyVerificationConclusion.js @@ -93,7 +93,7 @@ export default class MKeyVerificationConclusion extends React.Component { } if (title) { - const subtitle = userLabelForEventRoom(request.otherUserId, mxEvent); + const subtitle = userLabelForEventRoom(request.otherUserId, mxEvent.getRoomId()); const classes = classNames("mx_EventTile_bubble", "mx_KeyVerification", "mx_KeyVerification_icon", { mx_KeyVerification_icon_verified: request.done, }); diff --git a/src/components/views/messages/MKeyVerificationRequest.js b/src/components/views/messages/MKeyVerificationRequest.js index ae793556d8..49f871d16e 100644 --- a/src/components/views/messages/MKeyVerificationRequest.js +++ b/src/components/views/messages/MKeyVerificationRequest.js @@ -85,7 +85,7 @@ export default class MKeyVerificationRequest extends React.Component { if (userId === myUserId) { return _t("You accepted"); } else { - return _t("%(name)s accepted", {name: getNameForEventRoom(userId, this.props.mxEvent)}); + return _t("%(name)s accepted", {name: getNameForEventRoom(userId, this.props.mxEvent.getRoomId())}); } } @@ -95,7 +95,7 @@ export default class MKeyVerificationRequest extends React.Component { if (userId === myUserId) { return _t("You cancelled"); } else { - return _t("%(name)s cancelled", {name: getNameForEventRoom(userId, this.props.mxEvent)}); + return _t("%(name)s cancelled", {name: getNameForEventRoom(userId, this.props.mxEvent.getRoomId())}); } } @@ -128,10 +128,11 @@ export default class MKeyVerificationRequest extends React.Component { } if (!request.initiatedByMe) { + const name = getNameForEventRoom(request.requestingUserId, mxEvent.getRoomId()); title = (
{ - _t("%(name)s wants to verify", {name: getNameForEventRoom(request.requestingUserId, mxEvent)})}
); + _t("%(name)s wants to verify", {name})}); subtitle = (
{ - userLabelForEventRoom(request.requestingUserId, mxEvent)}
); + userLabelForEventRoom(request.requestingUserId, mxEvent.getRoomId())}); if (request.requested && !request.observeOnly) { stateNode = (
@@ -142,7 +143,7 @@ export default class MKeyVerificationRequest extends React.Component { title = (
{ _t("You sent a verification request")}
); subtitle = (
{ - userLabelForEventRoom(request.receivingUserId, mxEvent)}
); + userLabelForEventRoom(request.receivingUserId, mxEvent.getRoomId())}
); } if (title) { diff --git a/src/components/views/toasts/VerificationRequestToast.js b/src/components/views/toasts/VerificationRequestToast.js index 479a3e3f93..f912984486 100644 --- a/src/components/views/toasts/VerificationRequestToast.js +++ b/src/components/views/toasts/VerificationRequestToast.js @@ -23,6 +23,7 @@ import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases"; import {userLabelForEventRoom} from "../../../utils/KeyVerificationStateObserver"; import dis from "../../../dispatcher"; import ToastStore from "../../../stores/ToastStore"; +import Modal from "../../../Modal"; export default class VerificationRequestToast extends React.PureComponent { constructor(props) { @@ -65,22 +66,27 @@ export default class VerificationRequestToast extends React.PureComponent { accept = async () => { ToastStore.sharedInstance().dismissToast(this.props.toastKey); const {request} = this.props; - const {event} = request; // no room id for to_device requests - if (event.getRoomId()) { - dis.dispatch({ - action: 'view_room', - room_id: event.getRoomId(), - should_peek: false, - }); - } try { - await request.accept(); - dis.dispatch({ - action: "set_right_panel_phase", - phase: RIGHT_PANEL_PHASES.EncryptionPanel, - refireParams: {verificationRequest: request}, - }); + if (request.channel.roomId) { + dis.dispatch({ + action: 'view_room', + room_id: request.channel.roomId, + should_peek: false, + }); + await request.accept(); + dis.dispatch({ + action: "set_right_panel_phase", + phase: RIGHT_PANEL_PHASES.EncryptionPanel, + refireParams: {verificationRequest: request}, + }); + } else if (request.channel.deviceId && request.verifier) { + // show to_device verifications in dialog still + const IncomingSasDialog = sdk.getComponent("views.dialogs.IncomingSasDialog"); + Modal.createTrackedDialog('Incoming Verification', '', IncomingSasDialog, { + verifier: request.verifier, + }, null, /* priority = */ false, /* static = */ true); + } } catch (err) { console.error(err.message); } @@ -89,13 +95,13 @@ export default class VerificationRequestToast extends React.PureComponent { render() { const FormButton = sdk.getComponent("elements.FormButton"); const {request} = this.props; - const {event} = request; const userId = request.otherUserId; - let nameLabel = event.getRoomId() ? userLabelForEventRoom(userId, event) : userId; + const roomId = request.channel.roomId; + let nameLabel = roomId ? userLabelForEventRoom(userId, roomId) : userId; // for legacy to_device verification requests if (nameLabel === userId) { const client = MatrixClientPeg.get(); - const user = client.getUser(event.getSender()); + const user = client.getUser(userId); if (user && user.displayName) { nameLabel = _t("%(name)s (%(userId)s)", {name: user.displayName, userId}); } diff --git a/src/utils/KeyVerificationStateObserver.js b/src/utils/KeyVerificationStateObserver.js index 1a35319186..7da532109c 100644 --- a/src/utils/KeyVerificationStateObserver.js +++ b/src/utils/KeyVerificationStateObserver.js @@ -17,16 +17,15 @@ limitations under the License. import {MatrixClientPeg} from '../MatrixClientPeg'; import { _t } from '../languageHandler'; -export function getNameForEventRoom(userId, mxEvent) { - const roomId = mxEvent.getRoomId(); +export function getNameForEventRoom(userId, roomId) { const client = MatrixClientPeg.get(); const room = client.getRoom(roomId); const member = room.getMember(userId); return member ? member.name : userId; } -export function userLabelForEventRoom(userId, mxEvent) { - const name = getNameForEventRoom(userId, mxEvent); +export function userLabelForEventRoom(userId, roomId) { + const name = getNameForEventRoom(userId, roomId); if (name !== userId) { return _t("%(name)s (%(userId)s)", {name, userId}); } else {