Merge pull request #6872 from AndrewFerr/develop
If public room creation fails, retry without publishing it
This commit is contained in:
commit
34b61ad71c
1 changed files with 13 additions and 1 deletions
|
@ -219,7 +219,19 @@ export default async function createRoom(opts: IOpts): Promise<string | null> {
|
||||||
if (opts.spinner) modal = Modal.createDialog(Spinner, null, 'mx_Dialog_spinner');
|
if (opts.spinner) modal = Modal.createDialog(Spinner, null, 'mx_Dialog_spinner');
|
||||||
|
|
||||||
let roomId;
|
let roomId;
|
||||||
return client.createRoom(createOpts).finally(function() {
|
return client.createRoom(createOpts).catch(function(err) {
|
||||||
|
// NB This checks for the Synapse-specific error condition of a room creation
|
||||||
|
// having been denied because the requesting user wanted to publish the room,
|
||||||
|
// but the server denies them that permission (via room_list_publication_rules).
|
||||||
|
// The check below responds by retrying without publishing the room.
|
||||||
|
if (err.httpStatus === 403 && err.errcode === "M_UNKNOWN" && err.data.error === "Not allowed to publish room") {
|
||||||
|
console.warn("Failed to publish room, try again without publishing it");
|
||||||
|
createOpts.visibility = Visibility.Private;
|
||||||
|
return client.createRoom(createOpts);
|
||||||
|
} else {
|
||||||
|
return Promise.reject(err);
|
||||||
|
}
|
||||||
|
}).finally(function() {
|
||||||
if (modal) modal.close();
|
if (modal) modal.close();
|
||||||
}).then(function(res) {
|
}).then(function(res) {
|
||||||
roomId = res.room_id;
|
roomId = res.room_id;
|
||||||
|
|
Loading…
Reference in a new issue