diff --git a/src/components/views/directory/NetworkDropdown.js b/src/components/views/directory/NetworkDropdown.js
index 2fabda1a74..e6ff6d9791 100644
--- a/src/components/views/directory/NetworkDropdown.js
+++ b/src/components/views/directory/NetworkDropdown.js
@@ -49,6 +49,18 @@ const inPlaceOf = (elementRect) => ({
});
const validServer = withValidation({
+ deriveData: async ({ value }) => {
+ try {
+ // check if we can successfully load this server's room directory
+ await MatrixClientPeg.get().publicRooms({
+ limit: 1,
+ server: value,
+ });
+ return {};
+ } catch (error) {
+ return { error };
+ }
+ },
rules: [
{
key: "required",
@@ -57,21 +69,11 @@ const validServer = withValidation({
}, {
key: "available",
final: true,
- test: async ({ value }) => {
- try {
- const opts = {
- limit: 1,
- server: value,
- };
- // check if we can successfully load this server's room directory
- await MatrixClientPeg.get().publicRooms(opts);
- return true;
- } catch (e) {
- return false;
- }
- },
+ test: async (_, { error }) => !error,
valid: () => _t("Looks good"),
- invalid: () => _t("Can't find this server or its room list"),
+ invalid: ({ error }) => error.errcode === "M_FORBIDDEN"
+ ? _t("You are not allowed to view this server's rooms list")
+ : _t("Can't find this server or its room list"),
},
],
});
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index f60770acf6..430aa5a835 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -2019,6 +2019,7 @@
"Home": "Home",
"Enter a server name": "Enter a server name",
"Looks good": "Looks good",
+ "You are not allowed to view this server's rooms list": "You are not allowed to view this server's rooms list",
"Can't find this server or its room list": "Can't find this server or its room list",
"Your server": "Your server",
"Are you sure you want to remove %(serverName)s": "Are you sure you want to remove %(serverName)s",