mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-14 19:03:51 +01:00
Support room alias in rooms URL (ex: http://127.0.0.1:8000/#/room/#public:localhost:8080)
This commit is contained in:
parent
b37ced8f63
commit
e5257b21b3
3 changed files with 58 additions and 1 deletions
|
@ -37,6 +37,12 @@ matrixWebClient.config(['$routeProvider', '$provide', '$httpProvider',
|
||||||
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.
|
||||||
|
// 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
|
||||||
|
templateUrl: 'room/room.html',
|
||||||
|
controller: 'RoomController'
|
||||||
|
}).
|
||||||
when('/rooms', {
|
when('/rooms', {
|
||||||
templateUrl: 'rooms/rooms.html',
|
templateUrl: 'rooms/rooms.html',
|
||||||
controller: 'RoomsController'
|
controller: 'RoomsController'
|
||||||
|
|
|
@ -165,6 +165,16 @@ angular.module('matrixService', [])
|
||||||
return doRequest("DELETE", path, undefined, undefined);
|
return doRequest("DELETE", path, undefined, undefined);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Retrieves the room ID corresponding to a room alias
|
||||||
|
resolveRoomAlias:function(room_alias) {
|
||||||
|
var path = "/matrix/client/api/v1/ds/room/$room_alias";
|
||||||
|
room_alias = encodeURIComponent(room_alias);
|
||||||
|
|
||||||
|
path = path.replace("$room_alias", room_alias);
|
||||||
|
|
||||||
|
return doRequest("GET", path, undefined, {});
|
||||||
|
},
|
||||||
|
|
||||||
sendMessage: function(room_id, msg_id, content) {
|
sendMessage: function(room_id, msg_id, content) {
|
||||||
// The REST path spec
|
// The REST path spec
|
||||||
var path = "/rooms/$room_id/messages/$from/$msg_id";
|
var path = "/rooms/$room_id/messages/$from/$msg_id";
|
||||||
|
|
|
@ -108,8 +108,11 @@ angular.module('RoomController', ['ngSanitize'])
|
||||||
function($scope, $http, $timeout, $routeParams, $location, matrixService, eventStreamService, eventHandlerService) {
|
function($scope, $http, $timeout, $routeParams, $location, matrixService, eventStreamService, eventHandlerService) {
|
||||||
'use strict';
|
'use strict';
|
||||||
var MESSAGES_PER_PAGINATION = 30;
|
var MESSAGES_PER_PAGINATION = 30;
|
||||||
|
|
||||||
|
// Room ids. Checked, computed and resolved in onInit
|
||||||
$scope.room_id = $routeParams.room_id;
|
$scope.room_id = $routeParams.room_id;
|
||||||
$scope.room_alias = matrixService.getRoomIdToAliasMapping($scope.room_id);
|
$scope.room_alias = undefined;
|
||||||
|
|
||||||
$scope.state = {
|
$scope.state = {
|
||||||
user_id: matrixService.config().user_id,
|
user_id: matrixService.config().user_id,
|
||||||
events_from: "END", // when to start the event stream from.
|
events_from: "END", // when to start the event stream from.
|
||||||
|
@ -343,6 +346,44 @@ angular.module('RoomController', ['ngSanitize'])
|
||||||
// $timeout(function() { document.getElementById('textInput').focus() }, 0);
|
// $timeout(function() { document.getElementById('textInput').focus() }, 0);
|
||||||
console.log("onInit");
|
console.log("onInit");
|
||||||
|
|
||||||
|
// Does the room ID provided in the URL?
|
||||||
|
if ($scope.room_id) {
|
||||||
|
// Yes, we can start right now
|
||||||
|
$scope.room_alias = matrixService.getRoomIdToAliasMapping($scope.room_id);
|
||||||
|
onInit2();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// No, the URL contains the room alias. Get this alias.
|
||||||
|
// ie: extract #public:localhost:8080 from http://127.0.0.1:8000/#/room/#public:localhost:8080
|
||||||
|
if (3 === location.hash.split("#").length) {
|
||||||
|
$scope.room_alias = "#" + location.hash.split("#")[2];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// In case of issue, go to the default page
|
||||||
|
console.log("Error: cannot extract room alias");
|
||||||
|
$location.path("/");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Resolving alias: " + $scope.room_alias);
|
||||||
|
|
||||||
|
// Need a room ID required in Matrix API requests
|
||||||
|
matrixService.resolveRoomAlias($scope.room_alias).then(function(response) {
|
||||||
|
$scope.room_id = response.data.room_id;
|
||||||
|
console.log(" -> Room ID: " + $scope.room_id);
|
||||||
|
|
||||||
|
// Now, we can start
|
||||||
|
onInit2();
|
||||||
|
},
|
||||||
|
function () {
|
||||||
|
// In case of issue, go to the default page
|
||||||
|
console.log("Error: cannot resolve room alias");
|
||||||
|
$location.path("/");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var onInit2 = function() {
|
||||||
// Join the room
|
// Join the room
|
||||||
matrixService.join($scope.room_id).then(
|
matrixService.join($scope.room_id).then(
|
||||||
function() {
|
function() {
|
||||||
|
|
Loading…
Reference in a new issue