Provide a more detailed error message than "No known servers" (#6048)
* Provide a more detailed error message than "No known servers" Signed-off-by: Aaron Raimist <aaron@raim.ist> * Fix PR since file was refactored Signed-off-by: Aaron Raimist <aaron@raim.ist> * Fix formatting Signed-off-by: Aaron Raimist <aaron@raim.ist> * lint Signed-off-by: Aaron Raimist <aaron@raim.ist> * Update src/stores/RoomViewStore.tsx Co-authored-by: Michael Telatynski <7t3chguy@gmail.com> * Add example identifiers and a more detailed explanation Signed-off-by: Aaron Raimist <aaron@raim.ist> * Lint Signed-off-by: Aaron Raimist <aaron@raim.ist> * Lint Signed-off-by: Aaron Raimist <aaron@raim.ist> * Revert back to original wording (except s/alias/address) Alias was a better name imo but Element calls them addresses now so changed to be consistent. Signed-off-by: Aaron Raimist <aaron@raim.ist> * Prettier Signed-off-by: Aaron Raimist <aaron@raim.ist> * Fix ts error * Add snapshot test * Check the Modal props * Add test case to reach quality gate --------- Signed-off-by: Aaron Raimist <aaron@raim.ist> Co-authored-by: Michael Telatynski <7t3chguy@gmail.com> Co-authored-by: Florian Duros <florianduros@element.io>
This commit is contained in:
parent
76b82b4b2b
commit
d9d0ab3d98
4 changed files with 67 additions and 3 deletions
|
@ -878,6 +878,8 @@
|
||||||
"Please contact your homeserver administrator.": "Please contact your homeserver administrator.",
|
"Please contact your homeserver administrator.": "Please contact your homeserver administrator.",
|
||||||
"The person who invited you has already left.": "The person who invited you has already left.",
|
"The person who invited you has already left.": "The person who invited you has already left.",
|
||||||
"The person who invited you has already left, or their server is offline.": "The person who invited you has already left, or their server is offline.",
|
"The person who invited you has already left, or their server is offline.": "The person who invited you has already left, or their server is offline.",
|
||||||
|
"You attempted to join using a room ID without providing a list of servers to join through. Room IDs are internal identifiers and cannot be used to join a room without additional information.": "You attempted to join using a room ID without providing a list of servers to join through. Room IDs are internal identifiers and cannot be used to join a room without additional information.",
|
||||||
|
"If you know a room address, try joining through that instead.": "If you know a room address, try joining through that instead.",
|
||||||
"Failed to join": "Failed to join",
|
"Failed to join": "Failed to join",
|
||||||
"Connection lost": "Connection lost",
|
"Connection lost": "Connection lost",
|
||||||
"You were disconnected from the call. (Error: %(message)s)": "You were disconnected from the call. (Error: %(message)s)",
|
"You were disconnected from the call. (Error: %(message)s)": "You were disconnected from the call. (Error: %(message)s)",
|
||||||
|
|
|
@ -593,7 +593,7 @@ export class RoomViewStore extends EventEmitter {
|
||||||
);
|
);
|
||||||
} else if (err.httpStatus === 404) {
|
} else if (err.httpStatus === 404) {
|
||||||
const invitingUserId = this.getInvitingUserId(roomId);
|
const invitingUserId = this.getInvitingUserId(roomId);
|
||||||
// only provide a better error message for invites
|
// provide a better error message for invites
|
||||||
if (invitingUserId) {
|
if (invitingUserId) {
|
||||||
// if the inviting user is on the same HS, there can only be one cause: they left.
|
// if the inviting user is on the same HS, there can only be one cause: they left.
|
||||||
if (invitingUserId.endsWith(`:${MatrixClientPeg.get().getDomain()}`)) {
|
if (invitingUserId.endsWith(`:${MatrixClientPeg.get().getDomain()}`)) {
|
||||||
|
@ -602,6 +602,23 @@ export class RoomViewStore extends EventEmitter {
|
||||||
description = _t("The person who invited you has already left, or their server is offline.");
|
description = _t("The person who invited you has already left, or their server is offline.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// provide a more detailed error than "No known servers" when attempting to
|
||||||
|
// join using a room ID and no via servers
|
||||||
|
if (roomId === this.state.roomId && this.state.viaServers.length === 0) {
|
||||||
|
description = (
|
||||||
|
<div>
|
||||||
|
{_t(
|
||||||
|
"You attempted to join using a room ID without providing a list " +
|
||||||
|
"of servers to join through. Room IDs are internal identifiers and " +
|
||||||
|
"cannot be used to join a room without additional information.",
|
||||||
|
)}
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
{_t("If you know a room address, try joining through that instead.")}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Modal.createDialog(ErrorDialog, {
|
Modal.createDialog(ErrorDialog, {
|
||||||
|
@ -615,7 +632,9 @@ export class RoomViewStore extends EventEmitter {
|
||||||
joining: false,
|
joining: false,
|
||||||
joinError: payload.err,
|
joinError: payload.err,
|
||||||
});
|
});
|
||||||
this.showJoinRoomError(payload.err, payload.roomId);
|
if (payload.err) {
|
||||||
|
this.showJoinRoomError(payload.err, payload.roomId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public reset(): void {
|
public reset(): void {
|
||||||
|
|
|
@ -14,7 +14,8 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Room } from "matrix-js-sdk/src/matrix";
|
import { mocked } from "jest-mock";
|
||||||
|
import { MatrixError, Room } from "matrix-js-sdk/src/matrix";
|
||||||
import { sleep } from "matrix-js-sdk/src/utils";
|
import { sleep } from "matrix-js-sdk/src/utils";
|
||||||
|
|
||||||
import { RoomViewStore } from "../../src/stores/RoomViewStore";
|
import { RoomViewStore } from "../../src/stores/RoomViewStore";
|
||||||
|
@ -284,6 +285,29 @@ describe("RoomViewStore", function () {
|
||||||
await viewCall();
|
await viewCall();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should display an error message when the room is unreachable via the roomId", async () => {
|
||||||
|
// When
|
||||||
|
// View and wait for the room
|
||||||
|
dis.dispatch({ action: Action.ViewRoom, room_id: roomId });
|
||||||
|
await untilDispatch(Action.ActiveRoomChanged, dis);
|
||||||
|
// Generate error to display the expected error message
|
||||||
|
const error = new MatrixError(undefined, 404);
|
||||||
|
roomViewStore.showJoinRoomError(error, roomId);
|
||||||
|
|
||||||
|
// Check the modal props
|
||||||
|
expect(mocked(Modal).createDialog.mock.calls[0][1]).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should display the generic error message when the roomId doesnt match", async () => {
|
||||||
|
// When
|
||||||
|
// Generate error to display the expected error message
|
||||||
|
const error = new MatrixError({ error: "my 404 error" }, 404);
|
||||||
|
roomViewStore.showJoinRoomError(error, roomId);
|
||||||
|
|
||||||
|
// Check the modal props
|
||||||
|
expect(mocked(Modal).createDialog.mock.calls[0][1]).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
|
||||||
describe("when listening to a voice broadcast", () => {
|
describe("when listening to a voice broadcast", () => {
|
||||||
let voiceBroadcastPlayback: VoiceBroadcastPlayback;
|
let voiceBroadcastPlayback: VoiceBroadcastPlayback;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,24 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
|
exports[`RoomViewStore should display an error message when the room is unreachable via the roomId 1`] = `
|
||||||
|
{
|
||||||
|
"description": <div>
|
||||||
|
You attempted to join using a room ID without providing a list of servers to join through. Room IDs are internal identifiers and cannot be used to join a room without additional information.
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
If you know a room address, try joining through that instead.
|
||||||
|
</div>,
|
||||||
|
"title": "Failed to join",
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`RoomViewStore should display the generic error message when the roomId doesnt match 1`] = `
|
||||||
|
{
|
||||||
|
"description": "MatrixError: [404] my 404 error",
|
||||||
|
"title": "Failed to join",
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
exports[`RoomViewStore when recording a voice broadcast and trying to view a call, it should not actually view it and show the info dialog 1`] = `
|
exports[`RoomViewStore when recording a voice broadcast and trying to view a call, it should not actually view it and show the info dialog 1`] = `
|
||||||
[MockFunction] {
|
[MockFunction] {
|
||||||
"calls": [
|
"calls": [
|
||||||
|
|
Loading…
Reference in a new issue