From 4847045259a631a2f1e03fd9751df301e6589560 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Tue, 23 Sep 2014 13:36:58 +0100 Subject: send messages to users from the home page (SYWEB-19) --- webclient/home/home-controller.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'webclient/home/home-controller.js') diff --git a/webclient/home/home-controller.js b/webclient/home/home-controller.js index e35219bebb..a535d439d3 100644 --- a/webclient/home/home-controller.js +++ b/webclient/home/home-controller.js @@ -42,6 +42,10 @@ angular.module('HomeController', ['matrixService', 'eventHandlerService', 'Recen displayName: "", avatarUrl: "" }; + + $scope.newChat = { + user: "" + }; var refresh = function() { @@ -112,6 +116,32 @@ angular.module('HomeController', ['matrixService', 'eventHandlerService', 'Recen } ); }; + + // FIXME: factor this out between user-controller and home-controller etc. + $scope.messageUser = function() { + + // FIXME: create a new room every time, for now + + matrixService.create(null, 'private').then( + function(response) { + // This room has been created. Refresh the rooms list + var room_id = response.data.room_id; + console.log("Created room with id: "+ room_id); + + matrixService.invite(room_id, $scope.newChat.user).then( + function() { + $scope.feedback = "Invite sent successfully"; + $scope.$parent.goToPage("/room/" + room_id); + }, + function(reason) { + $scope.feedback = "Failure: " + JSON.stringify(reason); + }); + }, + function(error) { + $scope.feedback = "Failure: " + JSON.stringify(error.data); + }); + }; + $scope.onInit = function() { // Load profile data -- cgit 1.4.1 From 437969eac9b2a53ae916e71e2a170e639e36d6de Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Tue, 23 Sep 2014 18:50:39 +0100 Subject: use all new /rooms//state to actually gather the state for rooms whenever join them. a bit ugly, as we don't currently have a nice place to gather housekeeping after joining a room, so horrible code duplication... --- webclient/components/matrix/matrix-service.js | 8 +++++++- webclient/home/home-controller.js | 29 ++++++++++++++++++++------- webclient/room/room-controller.js | 20 ++++++++++++++++++ 3 files changed, 49 insertions(+), 8 deletions(-) (limited to 'webclient/home/home-controller.js') diff --git a/webclient/components/matrix/matrix-service.js b/webclient/components/matrix/matrix-service.js index 79781f5d86..fba3923c78 100644 --- a/webclient/components/matrix/matrix-service.js +++ b/webclient/components/matrix/matrix-service.js @@ -264,7 +264,13 @@ angular.module('matrixService', []) return doRequest("GET", path, params); }, - + + // get room state for a specific room + roomState: function(room_id) { + var path = "/rooms/" + room_id + "/state"; + return doRequest("GET", path); + }, + // Joins a room join: function(room_id) { return this.membershipChange(room_id, undefined, "join"); diff --git a/webclient/home/home-controller.js b/webclient/home/home-controller.js index a535d439d3..0624a8b0e6 100644 --- a/webclient/home/home-controller.js +++ b/webclient/home/home-controller.js @@ -86,18 +86,24 @@ angular.module('HomeController', ['matrixService', 'eventHandlerService', 'Recen // Go to a room $scope.goToRoom = function(room_id) { - // Simply open the room page on this room id - //$location.url("room/" + room_id); matrixService.join(room_id).then( function(response) { + var final_room_id = room_id; if (response.data.hasOwnProperty("room_id")) { - if (response.data.room_id != room_id) { - $location.url("room/" + response.data.room_id); - return; - } + final_room_id = response.data.room_id; } - $location.url("room/" + room_id); + // TODO: factor out the common housekeeping whenever we try to join a room or alias + matrixService.roomState(final_room_id).then( + function(response) { + eventHandlerService.handleEvents(response, false, true); + }, + function(error) { + $scope.feedback = "Failed to get room state for: " + final_room_id; + } + ); + + $location.url("room/" + final_room_id); }, function(error) { $scope.feedback = "Can't join room: " + JSON.stringify(error.data); @@ -108,6 +114,15 @@ angular.module('HomeController', ['matrixService', 'eventHandlerService', 'Recen $scope.joinAlias = function(room_alias) { matrixService.joinAlias(room_alias).then( function(response) { + // TODO: factor out the common housekeeping whenever we try to join a room or alias + matrixService.roomState(response.room_id).then( + function(response) { + eventHandlerService.handleEvents(response, false, true); + }, + function(error) { + $scope.feedback = "Failed to get room state for: " + response.room_id; + } + ); // Go to this room $location.url("room/" + room_alias); }, diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js index c8104e39e6..c58d675760 100644 --- a/webclient/room/room-controller.js +++ b/webclient/room/room-controller.js @@ -479,6 +479,15 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput']) else { promise = matrixService.joinAlias(room_alias).then( function(response) { + // TODO: factor out the common housekeeping whenever we try to join a room or alias + matrixService.roomState(response.room_id).then( + function(response) { + eventHandlerService.handleEvents(response, false, true); + }, + function(error) { + $scope.feedback = "Failed to get room state for: " + response.room_id; + } + ); $location.url("room/" + room_alias); }, function(error) { @@ -732,6 +741,16 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput']) $scope.state.waiting_for_joined_event = true; matrixService.join($scope.room_id).then( function() { + // TODO: factor out the common housekeeping whenever we try to join a room or alias + matrixService.roomState($scope.room_id).then( + function(response) { + eventHandlerService.handleEvents(response, false, true); + }, + function(error) { + console.error("Failed to get room state for: " + $scope.room_id); + } + ); + // onInit3 will be called once the joined m.room.member event is received from the events stream // This avoids to get the joined information twice in parallel: // - one from the events stream @@ -740,6 +759,7 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput']) }, function(reason) { console.log("Can't join room: " + JSON.stringify(reason)); + // FIXME: what if it wasn't a perms problem? $scope.state.permission_denied = "You do not have permission to join this room"; }); } -- cgit 1.4.1 From 0e848d73f9aea9170b67527a66a90d1287013356 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Tue, 23 Sep 2014 20:01:11 +0100 Subject: oops, stupid bug on room/$room/state --- webclient/home/home-controller.js | 4 ++-- webclient/room/room-controller.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'webclient/home/home-controller.js') diff --git a/webclient/home/home-controller.js b/webclient/home/home-controller.js index 0624a8b0e6..f1295560ef 100644 --- a/webclient/home/home-controller.js +++ b/webclient/home/home-controller.js @@ -96,7 +96,7 @@ angular.module('HomeController', ['matrixService', 'eventHandlerService', 'Recen // TODO: factor out the common housekeeping whenever we try to join a room or alias matrixService.roomState(final_room_id).then( function(response) { - eventHandlerService.handleEvents(response, false, true); + eventHandlerService.handleEvents(response.data, false, true); }, function(error) { $scope.feedback = "Failed to get room state for: " + final_room_id; @@ -117,7 +117,7 @@ angular.module('HomeController', ['matrixService', 'eventHandlerService', 'Recen // TODO: factor out the common housekeeping whenever we try to join a room or alias matrixService.roomState(response.room_id).then( function(response) { - eventHandlerService.handleEvents(response, false, true); + eventHandlerService.handleEvents(response.data, false, true); }, function(error) { $scope.feedback = "Failed to get room state for: " + response.room_id; diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js index c58d675760..ff0f1e05fa 100644 --- a/webclient/room/room-controller.js +++ b/webclient/room/room-controller.js @@ -482,7 +482,7 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput']) // TODO: factor out the common housekeeping whenever we try to join a room or alias matrixService.roomState(response.room_id).then( function(response) { - eventHandlerService.handleEvents(response, false, true); + eventHandlerService.handleEvents(response.data, false, true); }, function(error) { $scope.feedback = "Failed to get room state for: " + response.room_id; @@ -744,7 +744,7 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput']) // TODO: factor out the common housekeeping whenever we try to join a room or alias matrixService.roomState($scope.room_id).then( function(response) { - eventHandlerService.handleEvents(response, false, true); + eventHandlerService.handleEvents(response.data, false, true); }, function(error) { console.error("Failed to get room state for: " + $scope.room_id); -- cgit 1.4.1