diff --git a/src/Resend.js b/src/Resend.js index 0e67a306bd..e07e571455 100644 --- a/src/Resend.js +++ b/src/Resend.js @@ -1,3 +1,19 @@ +/* +Copyright 2015 OpenMarket 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. +*/ + var MatrixClientPeg = require('./MatrixClientPeg'); var dis = require('./dispatcher'); diff --git a/src/Signup.js b/src/Signup.js index 02ddaacc6d..74c4ad5f19 100644 --- a/src/Signup.js +++ b/src/Signup.js @@ -116,8 +116,17 @@ class Register extends Signup { _tryRegister(authDict) { var self = this; + + var bindEmail; + + if (this.username && this.password) { + // only need to bind_email when sending u/p - sending it at other + // times clobbers the u/p resulting in M_MISSING_PARAM (password) + bindEmail = true; + } + return MatrixClientPeg.get().register( - this.username, this.password, this.params.sessionId, authDict + this.username, this.password, this.params.sessionId, authDict, bindEmail ).then(function(result) { self.credentials = result; self.setStep("COMPLETE"); diff --git a/src/TextForEvent.js b/src/TextForEvent.js index 439d7b9ef5..5296ef833e 100644 --- a/src/TextForEvent.js +++ b/src/TextForEvent.js @@ -9,7 +9,17 @@ function textForMemberEvent(ev) { ) : ""; switch (ev.getContent().membership) { case 'invite': - return senderName + " invited " + targetName + "."; + var threePidContent = ev.getContent().third_party_invite; + if (threePidContent) { + // TODO: When we have third_party_invite.display_name we should + // do this as "$displayname received the invitation from $sender" + // or equiv + return targetName + " received an invitation from " + senderName + + "."; + } + else { + return senderName + " invited " + targetName + "."; + } case 'ban': return senderName + " banned " + targetName + "." + reason; case 'join': @@ -101,6 +111,12 @@ function textForCallInviteEvent(event) { return senderName + " placed a " + type + " call." + supported; }; +function textForThreePidInviteEvent(event) { + var senderName = event.sender ? event.sender.name : event.getSender(); + return senderName + " sent an invitation to " + event.getContent().display_name + + " to join the room."; +}; + var handlers = { 'm.room.message': textForMessageEvent, 'm.room.name': textForRoomNameEvent, @@ -109,6 +125,7 @@ var handlers = { 'm.call.invite': textForCallInviteEvent, 'm.call.answer': textForCallAnswerEvent, 'm.call.hangup': textForCallHangupEvent, + 'm.room.third_party_invite': textForThreePidInviteEvent }; module.exports = { diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index f2424dc06e..8ad5b44762 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -41,7 +41,8 @@ module.exports = React.createClass({ config: React.PropTypes.object.isRequired, ConferenceHandler: React.PropTypes.any, onNewScreen: React.PropTypes.func, - registrationUrl: React.PropTypes.string + registrationUrl: React.PropTypes.string, + startingQueryParams: React.PropTypes.object }, PageTypes: { @@ -75,6 +76,12 @@ module.exports = React.createClass({ return s; }, + getDefaultProps: function() { + return { + startingQueryParams: {} + }; + }, + componentDidMount: function() { this.dispatcherRef = dis.register(this.onAction); if (this.state.logged_in) { @@ -706,6 +713,7 @@ module.exports = React.createClass({ clientSecret={this.state.register_client_secret} sessionId={this.state.register_session_id} idSid={this.state.register_id_sid} + email={this.props.startingQueryParams.email} hsUrl={this.props.config.default_hs_url} isUrl={this.props.config.default_is_url} registrationUrl={this.props.registrationUrl} diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index a7944f91f5..2e8a39aae9 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -318,11 +318,7 @@ module.exports = React.createClass({ if (this.state.searchResults) return; - if (this.needsScrollReset) { - if (DEBUG_SCROLL) console.log("Resetting scroll position after tile count change"); - this._restoreSavedScrollState(); - this.needsScrollReset = false; - } + this._restoreSavedScrollState(); // have to fill space in case we're accepting an invite if (!this.state.paginating) this.fillSpace(); @@ -683,10 +679,6 @@ module.exports = React.createClass({ } ++count; } - if (count != this.lastEventTileCount) { - if (DEBUG_SCROLL) console.log("Queuing scroll reset (event count changed; now "+count+"; was "+this.lastEventTileCount+")"); - this.needsScrollReset = true; - } this.lastEventTileCount = count; return ret; }, diff --git a/src/components/structures/login/Registration.js b/src/components/structures/login/Registration.js index 1570641556..19e55c4d76 100644 --- a/src/components/structures/login/Registration.js +++ b/src/components/structures/login/Registration.js @@ -39,6 +39,7 @@ module.exports = React.createClass({ idSid: React.PropTypes.string, hsUrl: React.PropTypes.string, isUrl: React.PropTypes.string, + email: React.PropTypes.string, // registration shouldn't know or care how login is done. onLoginClick: React.PropTypes.func.isRequired }, @@ -185,6 +186,7 @@ module.exports = React.createClass({ registerStep = ( diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js index 8292cdf826..0b26000207 100644 --- a/src/components/views/rooms/EventTile.js +++ b/src/components/views/rooms/EventTile.js @@ -44,6 +44,7 @@ var eventTileTypes = { 'm.call.hangup' : 'messages.TextualEvent', 'm.room.name' : 'messages.TextualEvent', 'm.room.topic' : 'messages.TextualEvent', + 'm.room.third_party_invite': 'messages.TextualEvent' }; var MAX_READ_AVATARS = 5;