Use leaveRoomChain when leaving a room

Requires https://github.com/matrix-org/matrix-js-sdk/pull/868
Fixes https://github.com/vector-im/riot-web/issues/8539

We don't need to use leaveRoomChain when rejecting invites because we won't have the references needed. This leaves the couple spots where we do actually leave a room, and use the new function for that.
pull/21833/head
Travis Ralston 2019-03-22 17:36:54 -06:00
parent 68997f9652
commit a34a8bb425
2 changed files with 28 additions and 15 deletions

View File

@ -431,7 +431,7 @@ export const CommandMap = {
if (!targetRoomId) targetRoomId = roomId; if (!targetRoomId) targetRoomId = roomId;
return success( return success(
cli.leave(targetRoomId).then(function() { cli.leaveRoomChain(targetRoomId).then(function() {
dis.dispatch({action: 'view_next_room'}); dis.dispatch({action: 'view_next_room'});
}), }),
); );

View File

@ -1058,23 +1058,22 @@ export default React.createClass({
button: _t("Leave"), button: _t("Leave"),
onFinished: (shouldLeave) => { onFinished: (shouldLeave) => {
if (shouldLeave) { if (shouldLeave) {
const d = MatrixClientPeg.get().leave(roomId); const d = MatrixClientPeg.get().leaveRoomChain(roomId);
// FIXME: controller shouldn't be loading a view :( // FIXME: controller shouldn't be loading a view :(
const Loader = sdk.getComponent("elements.Spinner"); const Loader = sdk.getComponent("elements.Spinner");
const modal = Modal.createDialog(Loader, null, 'mx_Dialog_spinner'); const modal = Modal.createDialog(Loader, null, 'mx_Dialog_spinner');
d.then(() => { d.then((errors) => {
modal.close();
if (this.state.currentRoomId === roomId) {
dis.dispatch({action: 'view_next_room'});
}
}, (err) => {
modal.close(); modal.close();
if (errors[roomId]) {
// Something went wrong
const err = errors[roomId];
console.error("Failed to leave room " + roomId + " " + err); console.error("Failed to leave room " + roomId + " " + err);
let title = _t("Failed to leave room"); let title = _t("Failed to leave room");
let message = _t("Server may be unavailable, overloaded, or you hit a bug."); let message = _t("Server may be unavailable, overloaded, or you hit a bug.");
if (err.errcode == 'M_CANNOT_LEAVE_SERVER_NOTICE_ROOM') { if (err.errcode === 'M_CANNOT_LEAVE_SERVER_NOTICE_ROOM') {
title = _t("Can't leave Server Notices room"); title = _t("Can't leave Server Notices room");
message = _t( message = _t(
"This room is used for important messages from the Homeserver, " + "This room is used for important messages from the Homeserver, " +
@ -1087,6 +1086,20 @@ export default React.createClass({
title: title, title: title,
description: message, description: message,
}); });
return;
}
if (this.state.currentRoomId === roomId) {
dis.dispatch({action: 'view_next_room'});
}
}, (err) => {
// This should only happen if something went seriously wrong with leaving the chain.
modal.close();
console.error("Failed to leave room " + roomId + " " + err);
Modal.createTrackedDialog('Failed to leave room', '', ErrorDialog, {
title: title,
description: _t("Unknown error"),
});
}); });
} }
}, },