Display "The sender has blocked you from receiving this message" error message instead of "Unable to decrypt message" (#10202)
This commit is contained in:
parent
fbeddba782
commit
58b8df9868
6 changed files with 99 additions and 9 deletions
|
@ -14,14 +14,19 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import React, { ReactNode } from "react";
|
import React from "react";
|
||||||
|
import { MatrixEvent } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
import { _t } from "../../../languageHandler";
|
import { _t } from "../../../languageHandler";
|
||||||
import { IBodyProps } from "./IBodyProps";
|
import { IBodyProps } from "./IBodyProps";
|
||||||
|
|
||||||
// A placeholder element for messages that could not be decrypted
|
function getErrorMessage(mxEvent?: MatrixEvent): string {
|
||||||
export default class DecryptionFailureBody extends React.Component<Partial<IBodyProps>> {
|
return mxEvent?.isEncryptedDisabledForUnverifiedDevices
|
||||||
public render(): ReactNode {
|
? _t("The sender has blocked you from receiving this message")
|
||||||
return <div className="mx_DecryptionFailureBody mx_EventTile_content">{_t("Unable to decrypt message")}</div>;
|
: _t("Unable to decrypt message");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A placeholder element for messages that could not be decrypted
|
||||||
|
export function DecryptionFailureBody({ mxEvent }: Partial<IBodyProps>): JSX.Element {
|
||||||
|
return <div className="mx_DecryptionFailureBody mx_EventTile_content">{getErrorMessage(mxEvent)}</div>;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ import { MPollEndBody } from "./MPollEndBody";
|
||||||
import MLocationBody from "./MLocationBody";
|
import MLocationBody from "./MLocationBody";
|
||||||
import MjolnirBody from "./MjolnirBody";
|
import MjolnirBody from "./MjolnirBody";
|
||||||
import MBeaconBody from "./MBeaconBody";
|
import MBeaconBody from "./MBeaconBody";
|
||||||
import DecryptionFailureBody from "./DecryptionFailureBody";
|
import { DecryptionFailureBody } from "./DecryptionFailureBody";
|
||||||
import { GetRelationsForEvent, IEventTileOps } from "../rooms/EventTile";
|
import { GetRelationsForEvent, IEventTileOps } from "../rooms/EventTile";
|
||||||
import { VoiceBroadcastBody, VoiceBroadcastInfoEventType, VoiceBroadcastInfoState } from "../../../voice-broadcast";
|
import { VoiceBroadcastBody, VoiceBroadcastInfoEventType, VoiceBroadcastInfoState } from "../../../voice-broadcast";
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ import { Layout } from "../../../settings/enums/Layout";
|
||||||
import { formatTime } from "../../../DateUtils";
|
import { formatTime } from "../../../DateUtils";
|
||||||
import { MatrixClientPeg } from "../../../MatrixClientPeg";
|
import { MatrixClientPeg } from "../../../MatrixClientPeg";
|
||||||
import MatrixClientContext from "../../../contexts/MatrixClientContext";
|
import MatrixClientContext from "../../../contexts/MatrixClientContext";
|
||||||
import DecryptionFailureBody from "../messages/DecryptionFailureBody";
|
import { DecryptionFailureBody } from "../messages/DecryptionFailureBody";
|
||||||
import { E2EState } from "./E2EIcon";
|
import { E2EState } from "./E2EIcon";
|
||||||
import RoomAvatar from "../avatars/RoomAvatar";
|
import RoomAvatar from "../avatars/RoomAvatar";
|
||||||
import MessageContextMenu from "../context_menus/MessageContextMenu";
|
import MessageContextMenu from "../context_menus/MessageContextMenu";
|
||||||
|
@ -1270,7 +1270,7 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
|
||||||
{this.props.mxEvent.isRedacted() ? (
|
{this.props.mxEvent.isRedacted() ? (
|
||||||
<RedactedBody mxEvent={this.props.mxEvent} />
|
<RedactedBody mxEvent={this.props.mxEvent} />
|
||||||
) : this.props.mxEvent.isDecryptionFailure() ? (
|
) : this.props.mxEvent.isDecryptionFailure() ? (
|
||||||
<DecryptionFailureBody />
|
<DecryptionFailureBody mxEvent={this.props.mxEvent} />
|
||||||
) : (
|
) : (
|
||||||
MessagePreviewStore.instance.generatePreviewForEvent(this.props.mxEvent)
|
MessagePreviewStore.instance.generatePreviewForEvent(this.props.mxEvent)
|
||||||
)}
|
)}
|
||||||
|
|
|
@ -2330,6 +2330,7 @@
|
||||||
"Last month": "Last month",
|
"Last month": "Last month",
|
||||||
"The beginning of the room": "The beginning of the room",
|
"The beginning of the room": "The beginning of the room",
|
||||||
"Jump to date": "Jump to date",
|
"Jump to date": "Jump to date",
|
||||||
|
"The sender has blocked you from receiving this message": "The sender has blocked you from receiving this message",
|
||||||
"%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)",
|
"%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)",
|
||||||
"Downloading": "Downloading",
|
"Downloading": "Downloading",
|
||||||
"Decrypting": "Decrypting",
|
"Decrypting": "Decrypting",
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2023 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import { render } from "@testing-library/react";
|
||||||
|
import { MatrixEvent } from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
|
import { mkEvent } from "../../../test-utils";
|
||||||
|
import { DecryptionFailureBody } from "../../../../src/components/views/messages/DecryptionFailureBody";
|
||||||
|
|
||||||
|
describe("DecryptionFailureBody", () => {
|
||||||
|
function customRender(event: MatrixEvent) {
|
||||||
|
return render(<DecryptionFailureBody mxEvent={event} />);
|
||||||
|
}
|
||||||
|
|
||||||
|
it(`Should display "Unable to decrypt message"`, () => {
|
||||||
|
// When
|
||||||
|
const event = mkEvent({
|
||||||
|
type: "m.room.message",
|
||||||
|
room: "myfakeroom",
|
||||||
|
user: "myfakeuser",
|
||||||
|
content: {
|
||||||
|
msgtype: "m.bad.encrypted",
|
||||||
|
},
|
||||||
|
event: true,
|
||||||
|
});
|
||||||
|
const { container } = customRender(event);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
expect(container).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`Should display "The sender has blocked you from receiving this message"`, () => {
|
||||||
|
// When
|
||||||
|
const event = mkEvent({
|
||||||
|
type: "m.room.message",
|
||||||
|
room: "myfakeroom",
|
||||||
|
user: "myfakeuser",
|
||||||
|
content: {
|
||||||
|
msgtype: "m.bad.encrypted",
|
||||||
|
},
|
||||||
|
event: true,
|
||||||
|
});
|
||||||
|
jest.spyOn(event, "isEncryptedDisabledForUnverifiedDevices", "get").mockReturnValue(true);
|
||||||
|
const { container } = customRender(event);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
expect(container).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,21 @@
|
||||||
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
|
exports[`DecryptionFailureBody Should display "The sender has blocked you from receiving this message" 1`] = `
|
||||||
|
<div>
|
||||||
|
<div
|
||||||
|
class="mx_DecryptionFailureBody mx_EventTile_content"
|
||||||
|
>
|
||||||
|
The sender has blocked you from receiving this message
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`DecryptionFailureBody Should display "Unable to decrypt message" 1`] = `
|
||||||
|
<div>
|
||||||
|
<div
|
||||||
|
class="mx_DecryptionFailureBody mx_EventTile_content"
|
||||||
|
>
|
||||||
|
Unable to decrypt message
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
Loading…
Add table
Add a link
Reference in a new issue