@@ -192,6 +201,7 @@ module.exports = React.createClass({
onSettingsClick={this.onSettingsClick} onSaveClick={this.onSaveClick} onCancelClick={this.onCancelClick} />
diff --git a/skins/base/views/pages/MatrixChat.js b/skins/base/views/pages/MatrixChat.js
index e5fbe178a6..602e241ead 100644
--- a/skins/base/views/pages/MatrixChat.js
+++ b/skins/base/views/pages/MatrixChat.js
@@ -89,6 +89,7 @@ module.exports = React.createClass({
call_element =
}
+ // TODO: Fix duplication here and do conditionals like we do above
if (Notifier.supportsDesktopNotifications() && !Notifier.isEnabled() && !Notifier.isToolbarHidden()) {
return (
diff --git a/src/controllers/organisms/RoomList.js b/src/controllers/organisms/RoomList.js
index bc58ed7968..6acce59a35 100644
--- a/src/controllers/organisms/RoomList.js
+++ b/src/controllers/organisms/RoomList.js
@@ -112,7 +112,7 @@ module.exports = {
return m.userId !== member.userId
})[0];
if (ConferenceHandler.isConferenceUser(otherMember)) {
- console.log("Hiding conference 1:1 room %s", room.roomId);
+ // console.log("Hiding conference 1:1 room %s", room.roomId);
shouldShowRoom = false;
}
}
diff --git a/src/controllers/organisms/RoomView.js b/src/controllers/organisms/RoomView.js
index d3feff69f6..459a3606e2 100644
--- a/src/controllers/organisms/RoomView.js
+++ b/src/controllers/organisms/RoomView.js
@@ -31,7 +31,8 @@ var dis = require("../../dispatcher");
var PAGINATE_SIZE = 20;
var INITIAL_SIZE = 100;
-var ComponentBroker = require('../../ComponentBroker');
+var ConferenceHandler = require("../../ConferenceHandler");
+var CallHandler = require("../../CallHandler");
var Notifier = ComponentBroker.get('organisms/Notifier');
var tileTypes = {
@@ -62,6 +63,7 @@ module.exports = {
MatrixClientPeg.get().on("Room.timeline", this.onRoomTimeline);
MatrixClientPeg.get().on("Room.name", this.onRoomName);
MatrixClientPeg.get().on("RoomMember.typing", this.onRoomMemberTyping);
+ MatrixClientPeg.get().on("RoomState.members", this.onRoomStateMember);
this.atBottom = true;
},
@@ -78,6 +80,7 @@ module.exports = {
MatrixClientPeg.get().removeListener("Room.timeline", this.onRoomTimeline);
MatrixClientPeg.get().removeListener("Room.name", this.onRoomName);
MatrixClientPeg.get().removeListener("RoomMember.typing", this.onRoomMemberTyping);
+ MatrixClientPeg.get().removeListener("RoomState.members", this.onRoomStateMember);
}
},
@@ -94,15 +97,20 @@ module.exports = {
this.forceUpdate();
break;
case 'call_state':
- if (this.props.roomId !== payload.room_id) {
- break;
- }
- // scroll to bottom
- var messageWrapper = this.refs.messageWrapper;
- if (messageWrapper) {
- messageWrapper = messageWrapper.getDOMNode();
- messageWrapper.scrollTop = messageWrapper.scrollHeight;
+ if (CallHandler.getCallForRoom(this.props.roomId)) {
+ // Call state has changed so we may be loading video elements
+ // which will obscure the message log.
+ // scroll to bottom
+ var messageWrapper = this.refs.messageWrapper;
+ if (messageWrapper) {
+ messageWrapper = messageWrapper.getDOMNode();
+ messageWrapper.scrollTop = messageWrapper.scrollHeight;
+ }
}
+
+ // possibly remove the conf call notification if we're now in
+ // the conf
+ this._updateConfCallNotification();
break;
}
},
@@ -170,6 +178,35 @@ module.exports = {
this.forceUpdate();
},
+ onRoomStateMember: function(ev, state, member) {
+ if (member.roomId !== this.props.roomId ||
+ member.userId !== ConferenceHandler.getConferenceUserIdForRoom(member.roomId)) {
+ return;
+ }
+ this._updateConfCallNotification();
+ },
+
+ _updateConfCallNotification: function() {
+ var member = MatrixClientPeg.get().getRoom(this.props.roomId).getMember(
+ ConferenceHandler.getConferenceUserIdForRoom(this.props.roomId)
+ );
+
+ if (!member) {
+ return;
+ }
+ console.log("_updateConfCallNotification");
+ var confCall = CallHandler.getConferenceCall(member.roomId);
+
+ // A conf call notification should be displayed if there is an ongoing
+ // conf call but this cilent isn't a part of it.
+ this.setState({
+ displayConfCallNotification: (
+ (!confCall || confCall.call_state === "ended") &&
+ member.membership === "join"
+ )
+ });
+ },
+
componentDidMount: function() {
if (this.refs.messageWrapper) {
var messageWrapper = this.refs.messageWrapper.getDOMNode();
@@ -183,6 +220,7 @@ module.exports = {
this.fillSpace();
}
+ this._updateConfCallNotification();
},
componentDidUpdate: function() {