diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js
index 8ad81a1343..6c17aa415a 100644
--- a/src/components/structures/RoomView.js
+++ b/src/components/structures/RoomView.js
@@ -151,6 +151,10 @@ module.exports = React.createClass({
auxPanelMaxHeight: undefined,
statusBarVisible: false,
+
+ // We load this later by asking the js-sdk to suggest a version for us.
+ // This object is the result of Room#getRecommendedVersion()
+ upgradeRecommendation: null,
};
},
@@ -637,6 +641,13 @@ module.exports = React.createClass({
this._calculatePeekRules(room);
this._updatePreviewUrlVisibility(room);
this._loadMembersIfJoined(room);
+ this._calculateRecommendedVersion(room);
+ },
+
+ _calculateRecommendedVersion: async function(room) {
+ this.setState({
+ upgradeRecommendation: await room.getRecommendedVersion(),
+ });
},
_loadMembersIfJoined: async function(room) {
@@ -1661,8 +1672,10 @@ module.exports = React.createClass({
/>;
}
+ const roomVersionRecommendation = this.state.upgradeRecommendation;
const showRoomUpgradeBar = (
- this.state.room.shouldUpgradeToVersion() &&
+ roomVersionRecommendation &&
+ roomVersionRecommendation.needsUpgrade &&
this.state.room.userMayUpgradeRoom(MatrixClientPeg.get().credentials.userId)
);
@@ -1685,7 +1698,7 @@ module.exports = React.createClass({
hideCancel = true; // has own cancel
aux = ;
} else if (showRoomUpgradeBar) {
- aux = ;
+ aux = ;
hideCancel = true;
} else if (showRoomRecoveryReminder) {
aux = ;
diff --git a/src/components/views/dialogs/RoomUpgradeDialog.js b/src/components/views/dialogs/RoomUpgradeDialog.js
index 936ff745d1..403fbf4f77 100644
--- a/src/components/views/dialogs/RoomUpgradeDialog.js
+++ b/src/components/views/dialogs/RoomUpgradeDialog.js
@@ -29,13 +29,15 @@ export default React.createClass({
onFinished: PropTypes.func.isRequired,
},
- componentWillMount: function() {
- this._targetVersion = this.props.room.shouldUpgradeToVersion();
+ componentWillMount: async function() {
+ const recommended = await this.props.room.getRecommendedVersion();
+ this._targetVersion = recommended.version;
+ this.setState({busy: false});
},
getInitialState: function() {
return {
- busy: false,
+ busy: true,
};
},
diff --git a/src/components/views/rooms/RoomUpgradeWarningBar.js b/src/components/views/rooms/RoomUpgradeWarningBar.js
index 75a5901fc9..ccf2e45b25 100644
--- a/src/components/views/rooms/RoomUpgradeWarningBar.js
+++ b/src/components/views/rooms/RoomUpgradeWarningBar.js
@@ -26,6 +26,7 @@ module.exports = React.createClass({
propTypes: {
room: PropTypes.object.isRequired,
+ recommendation: PropTypes.object.isRequired,
},
onUpgradeClick: function() {
@@ -35,19 +36,40 @@ module.exports = React.createClass({
render: function() {
const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
- return (
-
-
- {_t("There is a known vulnerability affecting this room.")}
-
+
+ let upgradeText = (
+
- {_t("This room version is vulnerable to malicious modification of room state.")}
+ {_t("This room is using an unstable room version. If you aren't expecting this, please upgrade the room.")}
- {_t("Click here to upgrade to the latest room version and ensure room integrity is protected.")}
+ {_t("Click here to upgrade to the latest room version.")}
+
+ );
+ if (this.props.recommendation.urgent) {
+ upgradeText = (
+
+
+ {_t("There is a known vulnerability affecting this room.")}
+
+
+ {_t("This room version is vulnerable to malicious modification of room state.")}
+
+
+
+ {_t("Click here to upgrade to the latest room version and ensure room integrity is protected.")}
+
+
+
+ );
+ }
+
+ return (
+
+ {upgradeText}
{_t("Only room administrators will see this warning")}
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index f04c62cbbb..884c2c471e 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -743,6 +743,8 @@
"Internal room ID: ": "Internal room ID: ",
"Room version number: ": "Room version number: ",
"Add a topic": "Add a topic",
+ "This room is using an unstable room version. If you aren't expecting this, please upgrade the room.": "This room is using an unstable room version. If you aren't expecting this, please upgrade the room.",
+ "Click here to upgrade to the latest room version.": "Click here to upgrade to the latest room version.",
"There is a known vulnerability affecting this room.": "There is a known vulnerability affecting this room.",
"This room version is vulnerable to malicious modification of room state.": "This room version is vulnerable to malicious modification of room state.",
"Click here to upgrade to the latest room version and ensure room integrity is protected.": "Click here to upgrade to the latest room version and ensure room integrity is protected.",