Support urlencoded room aliases in room URL

This commit is contained in:
Emmanuel ROHEE 2014-08-18 17:40:05 +02:00
parent cebceb7b9d
commit 43772d0b15
2 changed files with 29 additions and 17 deletions

View File

@ -33,13 +33,13 @@ matrixWebClient.config(['$routeProvider', '$provide', '$httpProvider',
templateUrl: 'login/login.html', templateUrl: 'login/login.html',
controller: 'LoginController' controller: 'LoginController'
}). }).
when('/room/:room_id', { when('/room/:room_id_or_alias', {
templateUrl: 'room/room.html', templateUrl: 'room/room.html',
controller: 'RoomController' controller: 'RoomController'
}). }).
when('/room/', { // room URL with room alias in it (ex: http://127.0.0.1:8000/#/room/#public:localhost:8080) will come here. when('/room/', { // room URL with room alias in it (ex: http://127.0.0.1:8000/#/room/#public:localhost:8080) will come here.
// The reason is that 2nd hash key breaks routeProvider parameters cutting so that the URL will not match with // The reason is that 2nd hash key breaks routeProvider parameters cutting so that the URL will not match with
// the previous '/room/:room_id' URL rule // the previous '/room/:room_id_or_alias' URL rule
templateUrl: 'room/room.html', templateUrl: 'room/room.html',
controller: 'RoomController' controller: 'RoomController'
}). }).

View File

@ -109,8 +109,8 @@ angular.module('RoomController', ['ngSanitize'])
'use strict'; 'use strict';
var MESSAGES_PER_PAGINATION = 30; var MESSAGES_PER_PAGINATION = 30;
// Room ids. Checked, computed and resolved in onInit // Room ids. Computed and resolved in onInit
$scope.room_id = $routeParams.room_id; $scope.room_id = undefined;
$scope.room_alias = undefined; $scope.room_alias = undefined;
$scope.state = { $scope.state = {
@ -347,13 +347,25 @@ angular.module('RoomController', ['ngSanitize'])
console.log("onInit"); console.log("onInit");
// Does the room ID provided in the URL? // Does the room ID provided in the URL?
if ($scope.room_id) { var room_id_or_alias;
// Yes, we can start right now if ($routeParams.room_id_or_alias) {
room_id_or_alias = decodeURIComponent($routeParams.room_id_or_alias);
}
if (room_id_or_alias && '!' === room_id_or_alias[0]) {
// Yes. We can start right now
$scope.room_id = room_id_or_alias;
$scope.room_alias = matrixService.getRoomIdToAliasMapping($scope.room_id); $scope.room_alias = matrixService.getRoomIdToAliasMapping($scope.room_id);
onInit2(); onInit2();
} }
else { else {
// No, the URL contains the room alias. Get this alias. // No. The URL contains the room alias. Get this alias.
if (room_id_or_alias) {
// The room alias was passed urlencoded, use it as is
$scope.room_alias = room_id_or_alias;
}
else {
// Else get the room alias by hand from the URL
// ie: extract #public:localhost:8080 from http://127.0.0.1:8000/#/room/#public:localhost:8080 // ie: extract #public:localhost:8080 from http://127.0.0.1:8000/#/room/#public:localhost:8080
if (3 === location.hash.split("#").length) { if (3 === location.hash.split("#").length) {
$scope.room_alias = "#" + location.hash.split("#")[2]; $scope.room_alias = "#" + location.hash.split("#")[2];
@ -364,10 +376,10 @@ angular.module('RoomController', ['ngSanitize'])
$location.path("/"); $location.path("/");
return; return;
} }
}
console.log("Resolving alias: " + $scope.room_alias);
// Need a room ID required in Matrix API requests // Need a room ID required in Matrix API requests
console.log("Resolving alias: " + $scope.room_alias);
matrixService.resolveRoomAlias($scope.room_alias).then(function(response) { matrixService.resolveRoomAlias($scope.room_alias).then(function(response) {
$scope.room_id = response.data.room_id; $scope.room_id = response.data.room_id;
console.log(" -> Room ID: " + $scope.room_id); console.log(" -> Room ID: " + $scope.room_id);