Hook up aliases via listeners too.
This commit is contained in:
parent
24ac801417
commit
77d1b9af04
4 changed files with 67 additions and 37 deletions
|
@ -31,6 +31,31 @@ module.exports = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a list of room objects, return the room which has the given alias,
|
||||||
|
* else null.
|
||||||
|
*/
|
||||||
|
getRoomForAlias: function(rooms, room_alias) {
|
||||||
|
var room;
|
||||||
|
for (var i = 0; i < rooms.length; i++) {
|
||||||
|
var aliasEvents = rooms[i].currentState.getStateEvents(
|
||||||
|
"m.room.aliases"
|
||||||
|
);
|
||||||
|
for (var j = 0; j < aliasEvents.length; j++) {
|
||||||
|
var aliases = aliasEvents[j].getContent().aliases || [];
|
||||||
|
for (var k = 0; k < aliases.length; k++) {
|
||||||
|
if (aliases[k] === room_alias) {
|
||||||
|
room = rooms[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (room) { break; }
|
||||||
|
}
|
||||||
|
if (room) { break; }
|
||||||
|
}
|
||||||
|
return room || null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var MatrixClientPeg = require("./MatrixClientPeg");
|
var MatrixClientPeg = require("./MatrixClientPeg");
|
||||||
|
var MatrixTools = require("./MatrixTools");
|
||||||
var dis = require("./dispatcher");
|
var dis = require("./dispatcher");
|
||||||
var encryption = require("./encryption");
|
var encryption = require("./encryption");
|
||||||
|
|
||||||
|
@ -98,28 +99,14 @@ var commands = {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to find a room with this alias
|
// Try to find a room with this alias
|
||||||
var rooms = MatrixClientPeg.get().getRooms();
|
var foundRoom = MatrixTools.getRoomForAlias(
|
||||||
var roomId;
|
MatrixClientPeg.get().getRooms(),
|
||||||
for (var i = 0; i < rooms.length; i++) {
|
room_alias
|
||||||
var aliasEvents = rooms[i].currentState.getStateEvents(
|
|
||||||
"m.room.aliases"
|
|
||||||
);
|
);
|
||||||
for (var j = 0; j < aliasEvents.length; j++) {
|
if (foundRoom) { // we've already joined this room, view it.
|
||||||
var aliases = aliasEvents[j].getContent().aliases || [];
|
|
||||||
for (var k = 0; k < aliases.length; k++) {
|
|
||||||
if (aliases[k] === room_alias) {
|
|
||||||
roomId = rooms[i].roomId;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (roomId) { break; }
|
|
||||||
}
|
|
||||||
if (roomId) { break; }
|
|
||||||
}
|
|
||||||
if (roomId) { // we've already joined this room, view it.
|
|
||||||
dis.dispatch({
|
dis.dispatch({
|
||||||
action: 'view_room',
|
action: 'view_room',
|
||||||
room_id: roomId
|
room_id: foundRoom.roomId
|
||||||
});
|
});
|
||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ var dis = require("../../dispatcher");
|
||||||
|
|
||||||
var sdk = require('../../index');
|
var sdk = require('../../index');
|
||||||
var MatrixTools = require('../../MatrixTools');
|
var MatrixTools = require('../../MatrixTools');
|
||||||
|
var linkifyMatrix = require("../../linkify-matrix");
|
||||||
|
|
||||||
var Cas = require("../../CasLogic");
|
var Cas = require("../../CasLogic");
|
||||||
|
|
||||||
|
@ -66,6 +67,13 @@ module.exports = {
|
||||||
} else {
|
} else {
|
||||||
this.notifyNewScreen('login');
|
this.notifyNewScreen('login');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this can technically be done anywhere but doing this here keeps all
|
||||||
|
// the routing url path logic together.
|
||||||
|
linkifyMatrix.onAliasClick = function(event, alias) {
|
||||||
|
dis.dispatch({action: 'view_room_alias', room_alias: alias});
|
||||||
|
event.preventDefault();
|
||||||
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
componentWillUnmount: function() {
|
componentWillUnmount: function() {
|
||||||
|
@ -212,7 +220,19 @@ module.exports = {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'view_room_alias':
|
case 'view_room_alias':
|
||||||
MatrixClientPeg.get().getRoomIdForAlias(payload.room_alias).done(function(result) {
|
var foundRoom = MatrixTools.getRoomForAlias(
|
||||||
|
MatrixClientPeg.get().getRooms(), payload.room_alias
|
||||||
|
);
|
||||||
|
if (foundRoom) {
|
||||||
|
dis.dispatch({
|
||||||
|
action: 'view_room',
|
||||||
|
room_id: foundRoom.roomId
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// resolve the alias and *then* view it
|
||||||
|
MatrixClientPeg.get().getRoomIdForAlias(payload.room_alias).done(
|
||||||
|
function(result) {
|
||||||
dis.dispatch({
|
dis.dispatch({
|
||||||
action: 'view_room',
|
action: 'view_room',
|
||||||
room_id: result.room_id
|
room_id: result.room_id
|
||||||
|
|
|
@ -95,26 +95,24 @@ function matrixLinkify(linkify) {
|
||||||
S_AT_NAME_COLON_DOMAIN_DOT.on(TT.TLD, S_USERID);
|
S_AT_NAME_COLON_DOMAIN_DOT.on(TT.TLD, S_USERID);
|
||||||
}
|
}
|
||||||
|
|
||||||
matrixLinkify.onUserClick = function(e, userId) {};
|
matrixLinkify.onUserClick = function(e, userId) { e.preventDefault(); };
|
||||||
|
matrixLinkify.onAliasClick = function(e, roomAlias) { e.preventDefault(); };
|
||||||
|
|
||||||
matrixLinkify.options = {
|
matrixLinkify.options = {
|
||||||
events: function (href, type) {
|
events: function (href, type) {
|
||||||
if (type === "userid") {
|
switch (type) {
|
||||||
|
case "userid":
|
||||||
return {
|
return {
|
||||||
click: function(e) {
|
click: function(e) {
|
||||||
matrixLinkify.onUserClick(e, href);
|
matrixLinkify.onUserClick(e, href);
|
||||||
e.preventDefault();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
case "roomalias":
|
||||||
|
return {
|
||||||
|
click: function(e) {
|
||||||
|
matrixLinkify.onAliasClick(e, href);
|
||||||
}
|
}
|
||||||
},
|
};
|
||||||
|
|
||||||
formatHref: function (href, type) {
|
|
||||||
switch (type) {
|
|
||||||
case 'roomalias':
|
|
||||||
return "#/room/" + href;
|
|
||||||
default:
|
|
||||||
return href;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue