diff --git a/src/TextForEvent.js b/src/TextForEvent.js index 6e15d51cc4897ca9abd29f80be1eb50b52ae4730..10e529dfa710fc42a5dd633454af7df6a353c10c 100644 --- a/src/TextForEvent.js +++ b/src/TextForEvent.js @@ -78,6 +78,9 @@ function textForMemberEvent(ev) { if (ConferenceHandler && ConferenceHandler.isConferenceUser(ev.getStateKey())) { return "VoIP conference finished"; } + else if (ev.getPrevContent().membership === "invite") { + return targetName + " rejected the invitation."; + } else { return targetName + " left the room."; } @@ -151,6 +154,28 @@ function textForThreePidInviteEvent(event) { " to join the room."; }; +function textForHistoryVisibilityEvent(event) { + var senderName = event.sender ? event.sender.name : event.getSender(); + var vis = event.getContent().history_visibility; + var text = senderName + " made future room history visible to "; + if (vis === "invited") { + text += "all room members, from the point they are invited."; + } + else if (vis === "joined") { + text += "all room members, from the point they joined."; + } + else if (vis === "shared") { + text += "all room members."; + } + else if (vis === "world_readable") { + text += "anyone."; + } + else { + text += " unknown (" + vis + ")"; + } + return text; +}; + var handlers = { 'm.room.message': textForMessageEvent, 'm.room.name': textForRoomNameEvent, @@ -159,7 +184,8 @@ var handlers = { 'm.call.invite': textForCallInviteEvent, 'm.call.answer': textForCallAnswerEvent, 'm.call.hangup': textForCallHangupEvent, - 'm.room.third_party_invite': textForThreePidInviteEvent + 'm.room.third_party_invite': textForThreePidInviteEvent, + 'm.room.history_visibility': textForHistoryVisibilityEvent, }; module.exports = { diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index 21174be96683d96fef3c718636dd90799b8972a7..51182cc17da7c182f275c789630eeda514cba8be 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -191,7 +191,7 @@ module.exports = React.createClass({ } }, - _registerAsGuest: function() { + _registerAsGuest: function(showWarning) { var self = this; console.log("Doing guest login on %s", this.getCurrentHsUrl()); var hsUrl = this.getCurrentHsUrl(); @@ -209,6 +209,13 @@ module.exports = React.createClass({ guest: true }); }, function(err) { + if (showWarning) { + var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); + Modal.createDialog(ErrorDialog, { + title: "Failed to login as guest", + description: err.data + }); + } console.error("Failed to register as guest: " + err + " " + err.data); self._setAutoRegisterAsGuest(false); }); @@ -1096,7 +1103,7 @@ module.exports = React.createClass({ customHsUrl={this.getCurrentHsUrl()} customIsUrl={this.getCurrentIsUrl()} onForgotPasswordClick={this.onForgotPasswordClick} - onLoginAsGuestClick={this.props.enableGuest && this.props.config && this.props.config.default_hs_url ? this._registerAsGuest: undefined} + onLoginAsGuestClick={this.props.enableGuest && this.props.config && this.props.config.default_hs_url ? this._registerAsGuest.bind(this, true) : undefined} onCancelClick={ this.state.guestCreds ? this.onReturnToGuestClick : null } /> ); diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 20a058719b17f2a9dee3be48822414a18e5e0027..dcb16f7231f19017263bc56e5d444f7913b3519d 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -1217,11 +1217,10 @@ module.exports = React.createClass({ /> ); } - else if (this.state.canPeek && - (!myMember || myMember.membership !== "join")) { + else if (!myMember || myMember.membership !== "join") { aux = ( <RoomPreviewBar onJoinClick={this.onJoinButtonClicked} canJoin={true} - spinner={this.state.joining} + spinner={this.state.joining} canPreview={ this.state.canPeek } /> ); } diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js index 129cbd4581cf440267bc127722b10f64f153c7b7..9b858540161161560b6fee4600f62eec0c54b162 100644 --- a/src/components/structures/ScrollPanel.js +++ b/src/components/structures/ScrollPanel.js @@ -19,7 +19,7 @@ var ReactDOM = require("react-dom"); var GeminiScrollbar = require('react-gemini-scrollbar'); var q = require("q"); -var DEBUG_SCROLL = true; +var DEBUG_SCROLL = false; if (DEBUG_SCROLL) { // using bind means that we get to keep useful line numbers in the console diff --git a/src/components/structures/UserSettings.js b/src/components/structures/UserSettings.js index f9624a54d7923f113eb52eadc5860f38933ef866..bf66e43ab87eb389994ec478439293bec5948695 100644 --- a/src/components/structures/UserSettings.js +++ b/src/components/structures/UserSettings.js @@ -90,6 +90,15 @@ module.exports = React.createClass({ }, onAvatarPickerClick: function(ev) { + if (MatrixClientPeg.get().isGuest()) { + var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); + Modal.createDialog(ErrorDialog, { + title: "Error", + description: "Guests can't set avatars. Please register.", + }); + return; + } + if (this.refs.file_label) { this.refs.file_label.click(); } @@ -271,7 +280,7 @@ module.exports = React.createClass({ var addThreepidSection; if (this.state.email_add_pending) { addThreepidSection = <Loader />; - } else { + } else if (!MatrixClientPeg.get().isGuest()) { addThreepidSection = ( <div className="mx_UserSettings_profileTableRow" key="new"> <div className="mx_UserSettings_profileLabelCell"> diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js index 123026aa939b3a9f3678e7484ca0a83aba5a2c05..c9e74f521fe04c16331ce93b5b163df48553992a 100644 --- a/src/components/views/rooms/EventTile.js +++ b/src/components/views/rooms/EventTile.js @@ -44,7 +44,8 @@ var eventTileTypes = { 'm.call.hangup' : 'messages.TextualEvent', 'm.room.name' : 'messages.TextualEvent', 'm.room.topic' : 'messages.TextualEvent', - 'm.room.third_party_invite': 'messages.TextualEvent' + 'm.room.third_party_invite' : 'messages.TextualEvent', + 'm.room.history_visibility' : 'messages.TextualEvent', }; var MAX_READ_AVATARS = 5; diff --git a/src/components/views/rooms/RoomSettings.js b/src/components/views/rooms/RoomSettings.js index eca4dc074ba147008ab98bfc400835d62bb88d8b..4311f1b23d69e5085a10dd4b83ba055f7e66aa3e 100644 --- a/src/components/views/rooms/RoomSettings.js +++ b/src/components/views/rooms/RoomSettings.js @@ -450,7 +450,7 @@ module.exports = React.createClass({ <input type="radio" id="hvis_sh" name="historyVis" value="shared" defaultChecked={historyVisibility === "shared"} onChange={this._onHistoryRadioToggle} /> - Members only (since the room began) + Members only (since the point in time of selecting this option) </label> <label htmlFor="hvis_inv"> <input type="radio" id="hvis_inv" name="historyVis" value="invited"