From 0a3a3dac1a10aeee76da62e0e1edd458d7c4da74 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Thu, 16 Jul 2015 13:30:14 +0100 Subject: [PATCH] Display call logs in the UI. Display placed/incoming calls, answers and hangups. --- .../views/molecules/voip/MCallAnswerTile.js | 50 +++++++++++++++++ .../views/molecules/voip/MCallHangupTile.js | 50 +++++++++++++++++ .../views/molecules/voip/MCallInviteTile.js | 56 +++++++++++++++++++ src/ComponentBroker.js | 3 + .../molecules/voip/MCallAnswerTile.js | 20 +++++++ .../molecules/voip/MCallHangupTile.js | 20 +++++++ .../molecules/voip/MCallInviteTile.js | 20 +++++++ src/controllers/organisms/RoomView.js | 5 +- 8 files changed, 223 insertions(+), 1 deletion(-) create mode 100644 skins/base/views/molecules/voip/MCallAnswerTile.js create mode 100644 skins/base/views/molecules/voip/MCallHangupTile.js create mode 100644 skins/base/views/molecules/voip/MCallInviteTile.js create mode 100644 src/controllers/molecules/voip/MCallAnswerTile.js create mode 100644 src/controllers/molecules/voip/MCallHangupTile.js create mode 100644 src/controllers/molecules/voip/MCallInviteTile.js diff --git a/skins/base/views/molecules/voip/MCallAnswerTile.js b/skins/base/views/molecules/voip/MCallAnswerTile.js new file mode 100644 index 00000000..2d0032ca --- /dev/null +++ b/skins/base/views/molecules/voip/MCallAnswerTile.js @@ -0,0 +1,50 @@ +/* +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. +*/ + +'use strict'; + +var React = require('react'); +var MatrixClientPeg = require("../../../../../src/MatrixClientPeg"); +var ComponentBroker = require('../../../../../src/ComponentBroker'); +var MCallAnswerTileController = require("../../../../../src/controllers/molecules/voip/MCallAnswerTile"); +var MessageTimestamp = ComponentBroker.get('atoms/MessageTimestamp'); + +module.exports = React.createClass({ + displayName: 'MCallAnswerTile', + mixins: [MCallAnswerTileController], + + getAnswerText: function(event) { + var senderName = event.sender ? event.sender.name : "Someone"; + return senderName + " answered the call."; + }, + + render: function() { + // XXX: for now, just cheekily borrow the css from message tile... + return ( +
+
+ +
+ + + + {this.getAnswerText(this.props.mxEvent)} + +
+ ); + }, +}); + diff --git a/skins/base/views/molecules/voip/MCallHangupTile.js b/skins/base/views/molecules/voip/MCallHangupTile.js new file mode 100644 index 00000000..8f249dfd --- /dev/null +++ b/skins/base/views/molecules/voip/MCallHangupTile.js @@ -0,0 +1,50 @@ +/* +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. +*/ + +'use strict'; + +var React = require('react'); +var MatrixClientPeg = require("../../../../../src/MatrixClientPeg"); +var ComponentBroker = require('../../../../../src/ComponentBroker'); +var MCallHangupTileController = require("../../../../../src/controllers/molecules/voip/MCallHangupTile"); +var MessageTimestamp = ComponentBroker.get('atoms/MessageTimestamp'); + +module.exports = React.createClass({ + displayName: 'MCallHangupTile', + mixins: [MCallHangupTileController], + + getHangupText: function(event) { + var senderName = event.sender ? event.sender.name : "Someone"; + return senderName + " hungup."; + }, + + render: function() { + // XXX: for now, just cheekily borrow the css from message tile... + return ( +
+
+ +
+ + + + {this.getHangupText(this.props.mxEvent)} + +
+ ); + }, +}); + diff --git a/skins/base/views/molecules/voip/MCallInviteTile.js b/skins/base/views/molecules/voip/MCallInviteTile.js new file mode 100644 index 00000000..b952a204 --- /dev/null +++ b/skins/base/views/molecules/voip/MCallInviteTile.js @@ -0,0 +1,56 @@ +/* +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. +*/ + +'use strict'; + +var React = require('react'); +var MatrixClientPeg = require("../../../../../src/MatrixClientPeg"); +var ComponentBroker = require('../../../../../src/ComponentBroker'); +var MCallInviteTileController = require("../../../../../src/controllers/molecules/voip/MCallInviteTile"); +var MessageTimestamp = ComponentBroker.get('atoms/MessageTimestamp'); + +module.exports = React.createClass({ + displayName: 'MCallInviteTile', + mixins: [MCallInviteTileController], + + getInviteText: function(event) { + var senderName = event.sender ? event.sender.name : "Someone"; + // FIXME: Find a better way to determine this from the event? + var type = "voice"; + if (event.getContent().offer && + event.getContent().offer.sdp.indexOf('m=video') !== -1) { + type = "video"; + } + return senderName + " placed a " + type + " call."; + }, + + render: function() { + // XXX: for now, just cheekily borrow the css from message tile... + return ( +
+
+ +
+ + + + {this.getInviteText(this.props.mxEvent)} + +
+ ); + }, +}); + diff --git a/src/ComponentBroker.js b/src/ComponentBroker.js index 80506ea5..59f88046 100644 --- a/src/ComponentBroker.js +++ b/src/ComponentBroker.js @@ -101,6 +101,9 @@ require('../skins/base/views/molecules/DirectoryMenu'); require('../skins/base/views/atoms/voip/VideoFeed'); require('../skins/base/views/molecules/voip/VideoView'); require('../skins/base/views/molecules/voip/CallView'); +require('../skins/base/views/molecules/voip/MCallInviteTile'); +require('../skins/base/views/molecules/voip/MCallAnswerTile'); +require('../skins/base/views/molecules/voip/MCallHangupTile'); } diff --git a/src/controllers/molecules/voip/MCallAnswerTile.js b/src/controllers/molecules/voip/MCallAnswerTile.js new file mode 100644 index 00000000..d0977e00 --- /dev/null +++ b/src/controllers/molecules/voip/MCallAnswerTile.js @@ -0,0 +1,20 @@ +/* +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. +*/ + +'use strict'; + +module.exports = { +}; diff --git a/src/controllers/molecules/voip/MCallHangupTile.js b/src/controllers/molecules/voip/MCallHangupTile.js new file mode 100644 index 00000000..d0977e00 --- /dev/null +++ b/src/controllers/molecules/voip/MCallHangupTile.js @@ -0,0 +1,20 @@ +/* +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. +*/ + +'use strict'; + +module.exports = { +}; diff --git a/src/controllers/molecules/voip/MCallInviteTile.js b/src/controllers/molecules/voip/MCallInviteTile.js new file mode 100644 index 00000000..d0977e00 --- /dev/null +++ b/src/controllers/molecules/voip/MCallInviteTile.js @@ -0,0 +1,20 @@ +/* +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. +*/ + +'use strict'; + +module.exports = { +}; diff --git a/src/controllers/organisms/RoomView.js b/src/controllers/organisms/RoomView.js index cef2c3ac..9078d558 100644 --- a/src/controllers/organisms/RoomView.js +++ b/src/controllers/organisms/RoomView.js @@ -30,7 +30,10 @@ var ComponentBroker = require('../../ComponentBroker'); var tileTypes = { 'm.room.message': ComponentBroker.get('molecules/MessageTile'), - 'm.room.member': ComponentBroker.get('molecules/MRoomMemberTile') + 'm.room.member': ComponentBroker.get('molecules/MRoomMemberTile'), + 'm.call.invite': ComponentBroker.get('molecules/voip/MCallInviteTile'), + 'm.call.answer': ComponentBroker.get('molecules/voip/MCallAnswerTile'), + 'm.call.hangup': ComponentBroker.get('molecules/voip/MCallHangupTile') }; module.exports = {