diff --git a/src/components/views/dialogs/RoomSettingsDialog.js b/src/components/views/dialogs/RoomSettingsDialog.js index 99e73fb2e0..07ff62b949 100644 --- a/src/components/views/dialogs/RoomSettingsDialog.js +++ b/src/components/views/dialogs/RoomSettingsDialog.js @@ -18,6 +18,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import {Tab, TabbedView} from "../../structures/TabbedView"; import {_t, _td} from "../../../languageHandler"; +import AdvancedRoomSettingsTab from "../settings/tabs/AdvancedRoomSettingsTab"; import AccessibleButton from "../elements/AccessibleButton"; import dis from '../../../dispatcher'; import GeneralRoomSettingsTab from "../settings/tabs/GeneralRoomSettingsTab"; @@ -78,7 +79,7 @@ export default class RoomSettingsDialog extends React.Component { tabs.push(new Tab( _td("Advanced"), "mx_RoomSettingsDialog_warningIcon", -
Advanced Test
, + , )); tabs.push(new Tab( _td("Visit old settings"), diff --git a/src/components/views/settings/tabs/AdvancedRoomSettingsTab.js b/src/components/views/settings/tabs/AdvancedRoomSettingsTab.js new file mode 100644 index 0000000000..6fcd024d17 --- /dev/null +++ b/src/components/views/settings/tabs/AdvancedRoomSettingsTab.js @@ -0,0 +1,107 @@ +/* +Copyright 2019 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React from 'react'; +import PropTypes from 'prop-types'; +import {_t} from "../../../../languageHandler"; +import RoomProfileSettings from "../../room_settings/RoomProfileSettings"; +import MatrixClientPeg from "../../../../MatrixClientPeg"; +import sdk from "../../../../index"; +import AccessibleButton from "../../elements/AccessibleButton"; +import {MatrixClient} from "matrix-js-sdk"; +import dis from "../../../../dispatcher"; +import Modal from "../../../../Modal"; + +export default class AdvancedRoomSettingsTab extends React.Component { + static propTypes = { + roomId: PropTypes.string.isRequired, + }; + + constructor() { + super(); + + this.state = { + // This is eventually set to the value of room.getRecommendedVersion() + upgradeRecommendation: null, + }; + } + + componentWillMount(): void { + // we handle lack of this object gracefully later, so don't worry about it failing here. + MatrixClientPeg.get().getRoom(this.props.roomId).getRecommendedVersion().then((v) => { + this.setState({upgradeRecommendation: v}); + }); + } + + _upgradeRoom = (e) => { + const RoomUpgradeDialog = sdk.getComponent('dialogs.RoomUpgradeDialog'); + const room = MatrixClientPeg.get().getRoom(this.props.roomId); + Modal.createTrackedDialog('Upgrade Room Version', '', RoomUpgradeDialog, {room: room}); + }; + + _openDevtools = (e) => { + const DevtoolsDialog = sdk.getComponent('dialogs.DevtoolsDialog'); + Modal.createDialog(DevtoolsDialog, {roomId: this.props.roomId}); + }; + + render() { + const client = MatrixClientPeg.get(); + const room = client.getRoom(this.props.roomId); + + let unfederatableSection; + const createEvent = room.currentState.getStateEvents('m.room.create', ''); + if (createEvent && createEvent.getContent()['m.federate'] === false) { + unfederatableSection =
{_t('This room is not accessible by remote Matrix servers')}
; + } + + let roomUpgradeButton; + if (this.state.upgradeRecommendation && this.state.upgradeRecommendation.needsUpgrade) { + roomUpgradeButton = ( + + {_t("Upgrade room to version %(ver)s", {ver: this.state.upgradeRecommendation.version})} + + ); + } + + return ( +
+
{_t("Advanced")}
+
+ {_t("Room information")} +
+ {_t("Internal room ID:")}  + {this.props.roomId} +
+ {unfederatableSection} +
+
+ {_t("Room version")} +
+ {_t("Room version:")}  + {room.getVersion()} +
+ {roomUpgradeButton} +
+
+ {_t("Developer options")} + + {_t("Open Devtools")} + +
+
+ ); + } +} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 296165de9f..9a5df30260 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -430,6 +430,15 @@ "Upload profile picture": "Upload profile picture", "Display Name": "Display Name", "Save": "Save", + "This room is not accessible by remote Matrix servers": "This room is not accessible by remote Matrix servers", + "Upgrade room to version %(ver)s": "Upgrade room to version %(ver)s", + "Advanced": "Advanced", + "Room information": "Room information", + "Internal room ID:": "Internal room ID:", + "Room version": "Room version", + "Room version:": "Room version:", + "Developer options": "Developer options", + "Open Devtools": "Open Devtools", "Flair": "Flair", "General": "General", "Room Addresses": "Room Addresses", @@ -466,7 +475,6 @@ "matrix-react-sdk version:": "matrix-react-sdk version:", "riot-web version:": "riot-web version:", "olm version:": "olm version:", - "Advanced": "Advanced", "Homeserver is": "Homeserver is", "Identity Server is": "Identity Server is", "Access Token:": "Access Token:", @@ -722,15 +730,12 @@ "Privileged Users": "Privileged Users", "Muted Users": "Muted Users", "Banned users": "Banned users", - "This room is not accessible by remote Matrix servers": "This room is not accessible by remote Matrix servers", "Favourite": "Favourite", "Tagged as: ": "Tagged as: ", "To link to a room it must have an address.": "To link to a room it must have an address.", "Guests cannot join this room even if explicitly invited.": "Guests cannot join this room even if explicitly invited.", "Click here to fix": "Click here to fix", "To send events of type , you must be a": "To send events of type , you must be a", - "Upgrade room to version %(ver)s": "Upgrade room to version %(ver)s", - "Open Devtools": "Open Devtools", "Who can access this room?": "Who can access this room?", "Only people who have been invited": "Only people who have been invited", "Anyone who knows the room's link, apart from guests": "Anyone who knows the room's link, apart from guests",