{"action":"created","comment":{"url":"https://api.github.com/repos/vector-im/vector-web/pulls/comments/39612205","id":39612205,"diff_hunk":"@@ -165,6 +165,13 @@ module.exports = React.createClass({\n                         {this.state.errorText}\n                 </div>\n                 <a className=\"mx_Login_create\" onClick={this.showRegister} href=\"#\">Create a new account</a>\n+                <br/>\n+                <div className=\"mx_Login_links\">\n+                    <a href=\"https://medium.com/@Vector\">blog</a>&nbsp;&nbsp;&middot;&nbsp;&nbsp;\n+                    <a href=\"https://twitter.com/@VectorCo\">twitter</a>&nbsp;&nbsp;&middot;&nbsp;&nbsp;\n+                    <a href=\"https://github.com/vector-im/vector-web\">github</a>&nbsp;&nbsp;&middot;&nbsp;&nbsp;\n+                    <a href=\"https://matrix.org\">powered by Matrix</a>\n+                </div>","path":"skins/base/views/templates/Login.js","position":10,"original_position":10,"commit_id":"0aec086ebbdf333cf7f5bc47838d80d1118c7c49","original_commit_id":"0aec086ebbdf333cf7f5bc47838d80d1118c7c49","user":{"login":"dbkr","id":986903,"avatar_url":"https://avatars.githubusercontent.com/u/986903?v=3","gravatar_id":"","url":"https://api.github.com/users/dbkr","html_url":"https://github.com/dbkr","followers_url":"https://api.github.com/users/dbkr/followers","following_url":"https://api.github.com/users/dbkr/following{/other_user}","gists_url":"https://api.github.com/users/dbkr/gists{/gist_id}","starred_url":"https://api.github.com/users/dbkr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dbkr/subscriptions","organizations_url":"https://api.github.com/users/dbkr/orgs","repos_url":"https://api.github.com/users/dbkr/repos","events_url":"https://api.github.com/users/dbkr/events{/privacy}","received_events_url":"https://api.github.com/users/dbkr/received_events","type":"User","site_admin":false},"body":"Oh, this explains the style above. This should not be part of this PR.","created_at":"2015-09-16T09:59:46Z","updated_at":"2015-09-16T09:59:46Z","html_url":"https://github.com/vector-im/vector-web/pull/160#discussion_r39612205","pull_request_url":"https://api.github.com/repos/vector-im/vector-web/pulls/160","_links":{"self":{"href":"https://api.github.com/repos/vector-im/vector-web/pulls/comments/39612205"},"html":{"href":"https://github.com/vector-im/vector-web/pull/160#discussion_r39612205"},"pull_request":{"href":"https://api.github.com/repos/vector-im/vector-web/pulls/160"}}},"pull_request":{"url":"https://api.github.com/repos/vector-im/vector-web/pulls/160","id":45050472,"html_url":"https://github.com/vector-im/vector-web/pull/160","diff_url":"https://github.com/vector-im/vector-web/pull/160.diff","patch_url":"https://github.com/vector-im/vector-web/pull/160.patch","issue_url":"https://api.github.com/repos/vector-im/vector-web/issues/160","number":160,"state":"open","locked":false,"title":"Add conferencing support","user":{"login":"Kegsay","id":7190048,"avatar_url":"https://avatars.githubusercontent.com/u/7190048?v=3","gravatar_id":"","url":"https://api.github.com/users/Kegsay","html_url":"https://github.com/Kegsay","followers_url":"https://api.github.com/users/Kegsay/followers","following_url":"https://api.github.com/users/Kegsay/following{/other_user}","gists_url":"https://api.github.com/users/Kegsay/gists{/gist_id}","starred_url":"https://api.github.com/users/Kegsay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kegsay/subscriptions","organizations_url":"https://api.github.com/users/Kegsay/orgs","repos_url":"https://api.github.com/users/Kegsay/repos","events_url":"https://api.github.com/users/Kegsay/events{/privacy}","received_events_url":"https://api.github.com/users/Kegsay/received_events","type":"User","site_admin":false},"body":"This PR adds conferencing support to vector for HSes running https://github.com/matrix-org/matrix-appservice-verto (which matrix.org is)\r\n\r\nConferencing from the end-user's perspective:\r\n - Group chats may now have an \"Ongoing conference call\" notification on them.\r\n - Placing a voice or video call to the group chat room will no longer produce an error but will connect the client to a conference for that room.\r\n - Even if there is no \"ongoing\" notification, you can start a conference by just doing a voice/video call to the group chat room. This will invite a special conference user (part of the Verto AS) to mediate the conference call and provide ACLs on the conference call (so when you leave the group chat room, you get booted from the conference call). Semantics are the same as 1:1 calling (there is an end call button, etc).\r\n\r\nConferencing from a tech perspective:\r\n - The call is a faux 1:1 WebRTC call to the \"special conference user\" which has a programatically-determinable user ID of `@fs_$BASE-64-ROOM-ID:matrix.org`. The call is done in a 1:1 room with the conference user which is hidden from the recents list. In the future, we may want to expose this to provide floor control (muting/etc)\r\n - When the call is placed to this user, it will attempt to join the group chat room it is providing conferencing support to (it knows the room ID because its' user ID contains it!). It must be able to join the room in order for conferencing to work (this is why Vector by default will invite the user even if it is a public room).\r\n - When there are no more users on the conference call, the \"special conference user\" leaves the room. The state of the \"special conference user\" determines whether there is an \"ongoing conference call\" or not.\r\n\r\nAdditional notes:\r\n - This PR also fixes https://github.com/vector-im/vector-web/issues/31 - but the CSS for overlaying video needs to be done.\r\n - This PR also properly enforces single-call semantics (previously it was erroneously possible to place multiple calls(!))\r\n - There are a number of new configuration constants in SHOUTY_CAPS which determine the `user_id` format for the \"special conference users\" - we need to split this out into a config file for use at compile time ideally.\r\n\r\nIt has been manually tested for inbound and outbound calls, with changing rooms for each.","created_at":"2015-09-15T13:42:47Z","updated_at":"2015-09-16T09:59:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c1170b567725d077f47429de0cc34eb700dad96b","assignee":{"login":"dbkr","id":986903,"avatar_url":"https://avatars.githubusercontent.com/u/986903?v=3","gravatar_id":"","url":"https://api.github.com/users/dbkr","html_url":"https://github.com/dbkr","followers_url":"https://api.github.com/users/dbkr/followers","following_url":"https://api.github.com/users/dbkr/following{/other_user}","gists_url":"https://api.github.com/users/dbkr/gists{/gist_id}","starred_url":"https://api.github.com/users/dbkr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dbkr/subscriptions","organizations_url":"https://api.github.com/users/dbkr/orgs","repos_url":"https://api.github.com/users/dbkr/repos","events_url":"https://api.github.com/users/dbkr/events{/privacy}","received_events_url":"https://api.github.com/users/dbkr/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/vector-im/vector-web/pulls/160/commits","review_comments_url":"https://api.github.com/repos/vector-im/vector-web/pulls/160/comments","review_comment_url":"https://api.github.com/repos/vector-im/vector-web/pulls/comments{/number}","comments_url":"https://api.github.com/repos/vector-im/vector-web/issues/160/comments","statuses_url":"https://api.github.com/repos/vector-im/vector-web/statuses/0aec086ebbdf333cf7f5bc47838d80d1118c7c49","head":{"label":"vector-im:conferencing","ref":"conferencing","sha":"0aec086ebbdf333cf7f5bc47838d80d1118c7c49","user":{"login":"vector-im","id":13446337,"avatar_url":"https://avatars.githubusercontent.com/u/13446337?v=3","gravatar_id":"","url":"https://api.github.com/users/vector-im","html_url":"https://github.com/vector-im","followers_url":"https://api.github.com/users/vector-im/followers","following_url":"https://api.github.com/users/vector-im/following{/other_user}","gists_url":"https://api.github.com/users/vector-im/gists{/gist_id}","starred_url":"https://api.github.com/users/vector-im/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vector-im/subscriptions","organizations_url":"https://api.github.com/users/vector-im/orgs","repos_url":"https://api.github.com/users/vector-im/repos","events_url":"https://api.github.com/users/vector-im/events{/privacy}","received_events_url":"https://api.github.com/users/vector-im/received_events","type":"Organization","site_admin":false},"repo":{"id":39487546,"name":"vector-web","full_name":"vector-im/vector-web","owner":{"login":"vector-im","id":13446337,"avatar_url":"https://avatars.githubusercontent.com/u/13446337?v=3","gravatar_id":"","url":"https://api.github.com/users/vector-im","html_url":"https://github.com/vector-im","followers_url":"https://api.github.com/users/vector-im/followers","following_url":"https://api.github.com/users/vector-im/following{/other_user}","gists_url":"https://api.github.com/users/vector-im/gists{/gist_id}","starred_url":"https://api.github.com/users/vector-im/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vector-im/subscriptions","organizations_url":"https://api.github.com/users/vector-im/orgs","repos_url":"https://api.github.com/users/vector-im/repos","events_url":"https://api.github.com/users/vector-im/events{/privacy}","received_events_url":"https://api.github.com/users/vector-im/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/vector-im/vector-web","description":"Vector collaboration client","fork":true,"url":"https://api.github.com/repos/vector-im/vector-web","forks_url":"https://api.github.com/repos/vector-im/vector-web/forks","keys_url":"https://api.github.com/repos/vector-im/vector-web/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vector-im/vector-web/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vector-im/vector-web/teams","hooks_url":"https://api.github.com/repos/vector-im/vector-web/hooks","issue_events_url":"https://api.github.com/repos/vector-im/vector-web/issues/events{/number}","events_url":"https://api.github.com/repos/vector-im/vector-web/events","assignees_url":"https://api.github.com/repos/vector-im/vector-web/assignees{/user}","branches_url":"https://api.github.com/repos/vector-im/vector-web/branches{/branch}","tags_url":"https://api.github.com/repos/vector-im/vector-web/tags","blobs_url":"https://api.github.com/repos/vector-im/vector-web/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vector-im/vector-web/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vector-im/vector-web/git/refs{/sha}","trees_url":"https://api.github.com/repos/vector-im/vector-web/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vector-im/vector-web/statuses/{sha}","languages_url":"https://api.github.com/repos/vector-im/vector-web/languages","stargazers_url":"https://api.github.com/repos/vector-im/vector-web/stargazers","contributors_url":"https://api.github.com/repos/vector-im/vector-web/contributors","subscribers_url":"https://api.github.com/repos/vector-im/vector-web/subscribers","subscription_url":"https://api.github.com/repos/vector-im/vector-web/subscription","commits_url":"https://api.github.com/repos/vector-im/vector-web/commits{/sha}","git_commits_url":"https://api.github.com/repos/vector-im/vector-web/git/commits{/sha}","comments_url":"https://api.github.com/repos/vector-im/vector-web/comments{/number}","issue_comment_url":"https://api.github.com/repos/vector-im/vector-web/issues/comments{/number}","contents_url":"https://api.github.com/repos/vector-im/vector-web/contents/{+path}","compare_url":"https://api.github.com/repos/vector-im/vector-web/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vector-im/vector-web/merges","archive_url":"https://api.github.com/repos/vector-im/vector-web/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vector-im/vector-web/downloads","issues_url":"https://api.github.com/repos/vector-im/vector-web/issues{/number}","pulls_url":"https://api.github.com/repos/vector-im/vector-web/pulls{/number}","milestones_url":"https://api.github.com/repos/vector-im/vector-web/milestones{/number}","notifications_url":"https://api.github.com/repos/vector-im/vector-web/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vector-im/vector-web/labels{/name}","releases_url":"https://api.github.com/repos/vector-im/vector-web/releases{/id}","created_at":"2015-07-22T05:32:15Z","updated_at":"2015-09-16T04:51:02Z","pushed_at":"2015-09-16T09:49:11Z","git_url":"git://github.com/vector-im/vector-web.git","ssh_url":"git@github.com:vector-im/vector-web.git","clone_url":"https://github.com/vector-im/vector-web.git","svn_url":"https://github.com/vector-im/vector-web","homepage":"http://vector.im","size":1482,"stargazers_count":16,"watchers_count":16,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":8,"mirror_url":null,"open_issues_count":155,"forks":8,"open_issues":155,"watchers":16,"default_branch":"master"}},"base":{"label":"vector-im:master","ref":"master","sha":"ee4da24b84d179c2bbdaba1728bfa5c7b387b62b","user":{"login":"vector-im","id":13446337,"avatar_url":"https://avatars.githubusercontent.com/u/13446337?v=3","gravatar_id":"","url":"https://api.github.com/users/vector-im","html_url":"https://github.com/vector-im","followers_url":"https://api.github.com/users/vector-im/followers","following_url":"https://api.github.com/users/vector-im/following{/other_user}","gists_url":"https://api.github.com/users/vector-im/gists{/gist_id}","starred_url":"https://api.github.com/users/vector-im/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vector-im/subscriptions","organizations_url":"https://api.github.com/users/vector-im/orgs","repos_url":"https://api.github.com/users/vector-im/repos","events_url":"https://api.github.com/users/vector-im/events{/privacy}","received_events_url":"https://api.github.com/users/vector-im/received_events","type":"Organization","site_admin":false},"repo":{"id":39487546,"name":"vector-web","full_name":"vector-im/vector-web","owner":{"login":"vector-im","id":13446337,"avatar_url":"https://avatars.githubusercontent.com/u/13446337?v=3","gravatar_id":"","url":"https://api.github.com/users/vector-im","html_url":"https://github.com/vector-im","followers_url":"https://api.github.com/users/vector-im/followers","following_url":"https://api.github.com/users/vector-im/following{/other_user}","gists_url":"https://api.github.com/users/vector-im/gists{/gist_id}","starred_url":"https://api.github.com/users/vector-im/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vector-im/subscriptions","organizations_url":"https://api.github.com/users/vector-im/orgs","repos_url":"https://api.github.com/users/vector-im/repos","events_url":"https://api.github.com/users/vector-im/events{/privacy}","received_events_url":"https://api.github.com/users/vector-im/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/vector-im/vector-web","description":"Vector collaboration client","fork":true,"url":"https://api.github.com/repos/vector-im/vector-web","forks_url":"https://api.github.com/repos/vector-im/vector-web/forks","keys_url":"https://api.github.com/repos/vector-im/vector-web/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vector-im/vector-web/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vector-im/vector-web/teams","hooks_url":"https://api.github.com/repos/vector-im/vector-web/hooks","issue_events_url":"https://api.github.com/repos/vector-im/vector-web/issues/events{/number}","events_url":"https://api.github.com/repos/vector-im/vector-web/events","assignees_url":"https://api.github.com/repos/vector-im/vector-web/assignees{/user}","branches_url":"https://api.github.com/repos/vector-im/vector-web/branches{/branch}","tags_url":"https://api.github.com/repos/vector-im/vector-web/tags","blobs_url":"https://api.github.com/repos/vector-im/vector-web/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vector-im/vector-web/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vector-im/vector-web/git/refs{/sha}","trees_url":"https://api.github.com/repos/vector-im/vector-web/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vector-im/vector-web/statuses/{sha}","languages_url":"https://api.github.com/repos/vector-im/vector-web/languages","stargazers_url":"https://api.github.com/repos/vector-im/vector-web/stargazers","contributors_url":"https://api.github.com/repos/vector-im/vector-web/contributors","subscribers_url":"https://api.github.com/repos/vector-im/vector-web/subscribers","subscription_url":"https://api.github.com/repos/vector-im/vector-web/subscription","commits_url":"https://api.github.com/repos/vector-im/vector-web/commits{/sha}","git_commits_url":"https://api.github.com/repos/vector-im/vector-web/git/commits{/sha}","comments_url":"https://api.github.com/repos/vector-im/vector-web/comments{/number}","issue_comment_url":"https://api.github.com/repos/vector-im/vector-web/issues/comments{/number}","contents_url":"https://api.github.com/repos/vector-im/vector-web/contents/{+path}","compare_url":"https://api.github.com/repos/vector-im/vector-web/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vector-im/vector-web/merges","archive_url":"https://api.github.com/repos/vector-im/vector-web/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vector-im/vector-web/downloads","issues_url":"https://api.github.com/repos/vector-im/vector-web/issues{/number}","pulls_url":"https://api.github.com/repos/vector-im/vector-web/pulls{/number}","milestones_url":"https://api.github.com/repos/vector-im/vector-web/milestones{/number}","notifications_url":"https://api.github.com/repos/vector-im/vector-web/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vector-im/vector-web/labels{/name}","releases_url":"https://api.github.com/repos/vector-im/vector-web/releases{/id}","created_at":"2015-07-22T05:32:15Z","updated_at":"2015-09-16T04:51:02Z","pushed_at":"2015-09-16T09:49:11Z","git_url":"git://github.com/vector-im/vector-web.git","ssh_url":"git@github.com:vector-im/vector-web.git","clone_url":"https://github.com/vector-im/vector-web.git","svn_url":"https://github.com/vector-im/vector-web","homepage":"http://vector.im","size":1482,"stargazers_count":16,"watchers_count":16,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":8,"mirror_url":null,"open_issues_count":155,"forks":8,"open_issues":155,"watchers":16,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/vector-im/vector-web/pulls/160"},"html":{"href":"https://github.com/vector-im/vector-web/pull/160"},"issue":{"href":"https://api.github.com/repos/vector-im/vector-web/issues/160"},"comments":{"href":"https://api.github.com/repos/vector-im/vector-web/issues/160/comments"},"review_comments":{"href":"https://api.github.com/repos/vector-im/vector-web/pulls/160/comments"},"review_comment":{"href":"https://api.github.com/repos/vector-im/vector-web/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/vector-im/vector-web/pulls/160/commits"},"statuses":{"href":"https://api.github.com/repos/vector-im/vector-web/statuses/0aec086ebbdf333cf7f5bc47838d80d1118c7c49"}}}}