summary refs log tree commit diff
path: root/webclient/room/room-controller.js
diff options
context:
space:
mode:
authorEmmanuel ROHEE <erohee@amdocs.com>2014-08-18 17:11:08 +0200
committerEmmanuel ROHEE <erohee@amdocs.com>2014-08-18 17:11:08 +0200
commite5257b21b3cb6a1823159273b07a0ada25cdf8a8 (patch)
treeaedb53fdf6c7c7ac1dc2443cbf29bb311262835d /webclient/room/room-controller.js
parentUpdate the default longpoll timeout time. (diff)
downloadsynapse-e5257b21b3cb6a1823159273b07a0ada25cdf8a8.tar.xz
Support room alias in rooms URL (ex: http://127.0.0.1:8000/#/room/#public:localhost:8080)
Diffstat (limited to 'webclient/room/room-controller.js')
-rw-r--r--webclient/room/room-controller.js43
1 files changed, 42 insertions, 1 deletions
diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js
index b859f3d7e8..999c48f02d 100644
--- a/webclient/room/room-controller.js
+++ b/webclient/room/room-controller.js
@@ -108,8 +108,11 @@ angular.module('RoomController', ['ngSanitize'])
                                function($scope, $http, $timeout, $routeParams, $location, matrixService, eventStreamService, eventHandlerService) {
    'use strict';
     var MESSAGES_PER_PAGINATION = 30;
+
+    // Room ids. Checked, computed and resolved in onInit
     $scope.room_id = $routeParams.room_id;
-    $scope.room_alias = matrixService.getRoomIdToAliasMapping($scope.room_id);
+    $scope.room_alias = undefined;
+
     $scope.state = {
         user_id: matrixService.config().user_id,
         events_from: "END", // when to start the event stream from.
@@ -342,7 +345,45 @@ angular.module('RoomController', ['ngSanitize'])
     $scope.onInit = function() {
         // $timeout(function() { document.getElementById('textInput').focus() }, 0);
         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
         matrixService.join($scope.room_id).then(
             function() {