Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

move everything not explicitly riot (or status) branded into matrix-react-sdk #1836

Merged
merged 34 commits into from
Apr 18, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
8ab8f76
move non-Riot-specific components over from riot-web
ara4n Apr 11, 2018
178fb64
move notifications logic over from riot-web
ara4n Apr 11, 2018
70f3804
move room directory logic over from riot-web
ara4n Apr 11, 2018
79d3cca
move components' CSS to be in the same repo as their JS
ara4n Apr 11, 2018
cdb5d48
organise themes (even light & dark) in the SDK layer
ara4n Apr 11, 2018
848403a
move default fonts over from riot-web
ara4n Apr 11, 2018
8ce4df7
move non-Riot image resources over from riot-web
ara4n Apr 11, 2018
8371774
move default ringtones over from riot-web
ara4n Apr 11, 2018
7ae1b37
add notif UTs
ara4n Apr 12, 2018
cc904be
add NVL
ara4n Apr 12, 2018
40a67ca
point imports at the new locations
ara4n Apr 12, 2018
5d03eab
rethemedex
ara4n Apr 12, 2018
5f3e444
fix theme paths
ara4n Apr 13, 2018
0336d99
move VectorConferenceHandler over and use getUpdateCheckStatusEnum vi…
ara4n Apr 13, 2018
efe466e
move rageshake to sdk
ara4n Apr 13, 2018
1376563
use new rageshake location
ara4n Apr 13, 2018
610747e
fix paths and updateCheckStatusEnum
ara4n Apr 13, 2018
a30fdaf
copy all the i18n over from vector-web via copy-i18n.py
ara4n Apr 15, 2018
cb5ff40
fix missing i18n
ara4n Apr 15, 2018
faa1924
run gen-i18n to normalise en_EN and remove stuff still in vector-web
ara4n Apr 15, 2018
df564af
run prune-i18n to bring the translations back in line with normalised…
ara4n Apr 15, 2018
fe5e68d
fix tests
ara4n Apr 15, 2018
4da804f
Merge branch 'develop' into matthew/fix_layering
ara4n Apr 15, 2018
32dd7f9
merge vector-im/riot-web#5881 into matrix-react-sdk
ara4n Apr 15, 2018
f1f7673
ignore lint errors in stuff moved over from vector-web for now
ara4n Apr 16, 2018
46f5c0d
finish merging vector-im/riot-web#5881 into matrix-react-sdk
ara4n Apr 16, 2018
eca5a96
add i18n which weren't correctly copied over from vector-web by copy-…
ara4n Apr 17, 2018
ce809e1
fix i18n thinko on createTrackedDialog
ara4n Apr 17, 2018
d91c7f5
Add comment about enum hijinks
ara4n Apr 17, 2018
7b53e36
retheming commentary
ara4n Apr 17, 2018
6d15634
fix missing NLs
ara4n Apr 17, 2018
f84573e
convert HomePage to ES6 and split out the vectory bit
ara4n Apr 18, 2018
0571c59
move deps from vector-web to sdk; resolve version mismatches...
ara4n Apr 18, 2018
92c98aa
displayName should be tracked as static
ara4n Apr 18, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
138 changes: 138 additions & 0 deletions src/VectorConferenceHandler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
/*
Copyright 2015, 2016 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";

import Promise from 'bluebird';
var Matrix = require("matrix-js-sdk");
var Room = Matrix.Room;
var CallHandler = require('./CallHandler');

// FIXME: this is Riot (Vector) specific code, but will be removed shortly when
// we switch over to jitsi entirely for video conferencing.

// FIXME: This currently forces Vector to try to hit the matrix.org AS for conferencing.
// This is bad because it prevents people running their own ASes from being used.
// This isn't permanent and will be customisable in the future: see the proposal
// at docs/conferencing.md for more info.
var USER_PREFIX = "fs_";
var DOMAIN = "matrix.org";

function ConferenceCall(matrixClient, groupChatRoomId) {
this.client = matrixClient;
this.groupRoomId = groupChatRoomId;
this.confUserId = module.exports.getConferenceUserIdForRoom(this.groupRoomId);
}

ConferenceCall.prototype.setup = function() {
var self = this;
return this._joinConferenceUser().then(function() {
return self._getConferenceUserRoom();
}).then(function(room) {
// return a call for *this* room to be placed. We also tack on
// confUserId to speed up lookups (else we'd need to loop every room
// looking for a 1:1 room with this conf user ID!)
var call = Matrix.createNewMatrixCall(self.client, room.roomId);
call.confUserId = self.confUserId;
call.groupRoomId = self.groupRoomId;
return call;
});
};

ConferenceCall.prototype._joinConferenceUser = function() {
// Make sure the conference user is in the group chat room
var groupRoom = this.client.getRoom(this.groupRoomId);
if (!groupRoom) {
return Promise.reject("Bad group room ID");
}
var member = groupRoom.getMember(this.confUserId);
if (member && member.membership === "join") {
return Promise.resolve();
}
return this.client.invite(this.groupRoomId, this.confUserId);
};

ConferenceCall.prototype._getConferenceUserRoom = function() {
// Use an existing 1:1 with the conference user; else make one
var rooms = this.client.getRooms();
var confRoom = null;
for (var i = 0; i < rooms.length; i++) {
var confUser = rooms[i].getMember(this.confUserId);
if (confUser && confUser.membership === "join" &&
rooms[i].getJoinedMembers().length === 2) {
confRoom = rooms[i];
break;
}
}
if (confRoom) {
return Promise.resolve(confRoom);
}
return this.client.createRoom({
preset: "private_chat",
invite: [this.confUserId]
}).then(function(res) {
return new Room(res.room_id);
});
};

/**
* Check if this user ID is in fact a conference bot.
* @param {string} userId The user ID to check.
* @return {boolean} True if it is a conference bot.
*/
module.exports.isConferenceUser = function(userId) {
if (userId.indexOf("@" + USER_PREFIX) !== 0) {
return false;
}
var base64part = userId.split(":")[0].substring(1 + USER_PREFIX.length);
if (base64part) {
var decoded = new Buffer(base64part, "base64").toString();
// ! $STUFF : $STUFF
return /^!.+:.+/.test(decoded);
}
return false;
};

module.exports.getConferenceUserIdForRoom = function(roomId) {
// abuse browserify's core node Buffer support (strip padding ='s)
var base64RoomId = new Buffer(roomId).toString("base64").replace(/=/g, "");
return "@" + USER_PREFIX + base64RoomId + ":" + DOMAIN;
};

module.exports.createNewMatrixCall = function(client, roomId) {
var confCall = new ConferenceCall(
client, roomId
);
return confCall.setup();
};

module.exports.getConferenceCallForRoom = function(roomId) {
// search for a conference 1:1 call for this group chat room ID
var activeCall = CallHandler.getAnyActiveCall();
if (activeCall && activeCall.confUserId) {
var thisRoomConfUserId = module.exports.getConferenceUserIdForRoom(
roomId
);
if (thisRoomConfUserId === activeCall.confUserId) {
return activeCall;
}
}
return null;
};

module.exports.ConferenceCall = ConferenceCall;

module.exports.slot = 'conference';
20 changes: 12 additions & 8 deletions src/components/views/globals/UpdateCheckBar.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,8 @@ limitations under the License.
import React from 'react';
import { _t } from '../../../languageHandler';
import PlatformPeg from '../../../PlatformPeg';
import {updateCheckStatusEnum} from '../../../vector/platform/VectorBasePlatform';
import AccessibleButton from '../../../components/views/elements/AccessibleButton';

const doneStatuses = [
updateCheckStatusEnum.ERROR,
updateCheckStatusEnum.NOTAVAILABLE,
];

export default React.createClass({
propTypes: {
status: React.PropTypes.oneOf(Object.values(updateCheckStatusEnum)).isRequired,
Expand All @@ -42,6 +36,7 @@ export default React.createClass({
},

getStatusText: function() {
const updateCheckStatusEnum = PlatformPeg.get().getUpdateCheckStatusEnum();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Leaving a comment to explain why this is being done would be very useful.

switch(this.props.status) {
case updateCheckStatusEnum.ERROR:
return _t('Error encountered (%(errorDetail)s).', { errorDetail: this.props.detail });
Expand All @@ -52,8 +47,7 @@ export default React.createClass({
case updateCheckStatusEnum.DOWNLOADING:
return _t('Downloading update...');
}
}
,
},

hideToolbar: function() {
PlatformPeg.get().stopUpdateCheck();
Expand All @@ -63,6 +57,16 @@ export default React.createClass({
const message = this.getStatusText();
const warning = _t('Warning');

if (!'getUpdateCheckStatusEnum' in PlatformPeg.get()) {
return <div></div>;
}

const updateCheckStatusEnum = PlatformPeg.get().getUpdateCheckStatusEnum();
const doneStatuses = [
updateCheckStatusEnum.ERROR,
updateCheckStatusEnum.NOTAVAILABLE,
];

let image;
if (doneStatuses.includes(this.props.status)) {
image = <img className="mx_MatrixToolbar_warning" src="img/warning.svg" width="24" height="23" alt={warning}/>;
Expand Down