diff --git a/res/css/views/dialogs/_MessageEditHistoryDialog.scss b/res/css/views/dialogs/_MessageEditHistoryDialog.scss index b80742bd24..951b863e6a 100644 --- a/res/css/views/dialogs/_MessageEditHistoryDialog.scss +++ b/res/css/views/dialogs/_MessageEditHistoryDialog.scss @@ -28,6 +28,11 @@ limitations under the License. flex: 1 1 auto; } +.mx_MessageEditHistoryDialog_error { + color: $warning-color; + text-align: center; +} + .mx_MessageEditHistoryDialog_edits { list-style-type: none; font-size: 14px; diff --git a/src/components/views/dialogs/MessageEditHistoryDialog.js b/src/components/views/dialogs/MessageEditHistoryDialog.js index 9d533eab56..bba000e013 100644 --- a/src/components/views/dialogs/MessageEditHistoryDialog.js +++ b/src/components/views/dialogs/MessageEditHistoryDialog.js @@ -30,6 +30,7 @@ export default class MessageEditHistoryDialog extends React.PureComponent { constructor(props) { super(props); this.state = { + error: null, events: [], nextBatch: null, isLoading: true, @@ -45,10 +46,17 @@ export default class MessageEditHistoryDialog extends React.PureComponent { const opts = {from: this.state.nextBatch}; const roomId = this.props.mxEvent.getRoomId(); const eventId = this.props.mxEvent.getId(); - const result = await MatrixClientPeg.get().relations( - roomId, eventId, "m.replace", "m.room.message", opts); + let result; let resolve; - const promise = new Promise(r => resolve = r); + let reject; + const promise = new Promise((_resolve, _reject) => {resolve = _resolve; reject = _reject;}); + try { + result = await MatrixClientPeg.get().relations( + roomId, eventId, "m.replace", "m.room.message", opts); + } catch (error) { + this.setState({error}, () => reject(error)); + return promise; + } this.setState({ events: this.state.events.concat(result.events), nextBatch: result.nextBatch, @@ -82,7 +90,23 @@ export default class MessageEditHistoryDialog extends React.PureComponent { render() { let content; if (this.state.error) { - content = this.state.error; + const {error} = this.state; + if (error.errcode === "M_UNRECOGNIZED") { + content = (

+ {_t("Your homeserver doesn't seem to support this feature.")} +

); + } else if (error.errcode) { + // some kind of error from the homeserver + content = (

+ {_t("Something went wrong!")} +

); + } else { + content = (

+ {_t("Could not reach your homeserver to fetch the edit history.")} +
+ {_t("Verify your internet connection or try again later.")} +

); + } } else if (this.state.isLoading) { const Spinner = sdk.getComponent("elements.Spinner"); content = ; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index c84125d820..85cb6f1fe2 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1203,6 +1203,9 @@ "Manually export keys": "Manually export keys", "You'll lose access to your encrypted messages": "You'll lose access to your encrypted messages", "Are you sure you want to sign out?": "Are you sure you want to sign out?", + "Your homeserver doesn't seem to support this feature.": "Your homeserver doesn't seem to support this feature.", + "Could not reach your homeserver to fetch the edit history.": "Could not reach your homeserver to fetch the edit history.", + "Verify your internet connection or try again later.": "Verify your internet connection or try again later.", "Message edits": "Message edits", "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.", "To help avoid duplicate issues, please view existing issues first (and add a +1) or create a new issue if you can't find it.": "To help avoid duplicate issues, please view existing issues first (and add a +1) or create a new issue if you can't find it.",