Hook up aliases via listeners too.

This commit is contained in:
Kegan Dougal 2015-10-27 09:58:55 +00:00
parent 24ac801417
commit 77d1b9af04
4 changed files with 67 additions and 37 deletions

View file

@ -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;
} }
} }

View file

@ -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();
} }

View file

@ -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

View file

@ -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;
} }
} }
}; };