diff --git a/syweb/webclient/components/matrix/event-handler-service.js b/syweb/webclient/components/matrix/event-handler-service.js index e9540bd5c0..8a32d06696 100644 --- a/syweb/webclient/components/matrix/event-handler-service.js +++ b/syweb/webclient/components/matrix/event-handler-service.js @@ -546,27 +546,6 @@ function(matrixService, $rootScope, $q, $timeout, $filter, mPresence, notificati } return memberCount; - }, - - /** - * Return the power level of an user in a particular room - * @param {String} room_id the room id - * @param {String} user_id the user id - * @returns {Number} a value between 0 and 10 - */ - getUserPowerLevel: function(room_id, user_id) { - var powerLevel = 0; - var room = modelService.getRoom(room_id).current_room_state; - if (room.state("m.room.power_levels")) { - if (user_id in room.state("m.room.power_levels").content) { - powerLevel = room.state("m.room.power_levels").content[user_id]; - } - else { - // Use the room default user power - powerLevel = room.state("m.room.power_levels").content["default"]; - } - } - return powerLevel; } }; }]); diff --git a/syweb/webclient/components/matrix/model-service.js b/syweb/webclient/components/matrix/model-service.js index e1fed65152..b4d59e7324 100644 --- a/syweb/webclient/components/matrix/model-service.js +++ b/syweb/webclient/components/matrix/model-service.js @@ -118,7 +118,8 @@ angular.module('modelService', []) }, storeStateEvent: function storeState(event) { - this.state_events[event.type + event.state_key] = event; + var keyIndex = event.state_key === undefined ? event.type : event.type + event.state_key; + this.state_events[keyIndex] = event; if (event.type === "m.room.member") { var userId = event.state_key; var rm = new RoomMember(); @@ -262,6 +263,27 @@ angular.module('modelService', []) rm.user = usr; } } + }, + + /** + * Return the power level of an user in a particular room + * @param {String} room_id the room id + * @param {String} user_id the user id + * @returns {Number} + */ + getUserPowerLevel: function(room_id, user_id) { + var powerLevel = 0; + var room = this.getRoom(room_id).current_room_state; + if (room.state("m.room.power_levels")) { + if (user_id in room.state("m.room.power_levels").content) { + powerLevel = room.state("m.room.power_levels").content[user_id]; + } + else { + // Use the room default user power + powerLevel = room.state("m.room.power_levels").content["default"]; + } + } + return powerLevel; } }; diff --git a/syweb/webclient/room/room-controller.js b/syweb/webclient/room/room-controller.js index afa029117b..cf9bc1fcdb 100644 --- a/syweb/webclient/room/room-controller.js +++ b/syweb/webclient/room/room-controller.js @@ -405,7 +405,6 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput', 'a // The room members is available in the data fetched by initialSync if ($scope.room) { - var messages = $scope.room.events; if (0 === messages.length @@ -578,7 +577,7 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput', 'a // scope this so the template can check power levels and enable/disable // buttons - $scope.pow = eventHandlerService.getUserPowerLevel; + $scope.pow = modelService.getUserPowerLevel; var modalInstance = $modal.open({ templateUrl: 'eventInfoTemplate.html', diff --git a/syweb/webclient/test/unit/event-handler-service.spec.js b/syweb/webclient/test/unit/event-handler-service.spec.js index 2a4dc3b5a5..c17cdb8715 100644 --- a/syweb/webclient/test/unit/event-handler-service.spec.js +++ b/syweb/webclient/test/unit/event-handler-service.spec.js @@ -67,51 +67,4 @@ describe('EventHandlerService', function() { var num = eventHandlerService.getUsersCountInRoom(roomId); expect(num).toEqual(2); })); - - it('should be able to get a users power level', inject( - function(eventHandlerService) { - var roomId = "!foo:matrix.org"; - // set mocked data - modelService.getRoom = function(roomId) { - return { - room_id: roomId, - current_room_state: { - members: { - "@adam:matrix.org": { - event: { - content: { membership: "join" }, - user_id: "@adam:matrix.org" - } - }, - "@beth:matrix.org": { - event: { - content: { membership: "join" }, - user_id: "@beth:matrix.org" - } - } - }, - s: { - "m.room.power_levels": { - content: { - "@adam:matrix.org": 90, - "default": 50 - } - } - }, - state: function(type, key) { - return key ? this.s[type+key] : this.s[type] - } - } - }; - }; - - var num = eventHandlerService.getUserPowerLevel(roomId, "@beth:matrix.org"); - expect(num).toEqual(50); - - num = eventHandlerService.getUserPowerLevel(roomId, "@adam:matrix.org"); - expect(num).toEqual(90); - - num = eventHandlerService.getUserPowerLevel(roomId, "@unknown:matrix.org"); - expect(num).toEqual(50); - })); }); diff --git a/syweb/webclient/test/unit/model-service.spec.js b/syweb/webclient/test/unit/model-service.spec.js index e2fa8ceba3..b99a76310b 100644 --- a/syweb/webclient/test/unit/model-service.spec.js +++ b/syweb/webclient/test/unit/model-service.spec.js @@ -27,4 +27,38 @@ describe('ModelService', function() { var user = modelService.getMember(roomId, userId); expect(user.event.state_key).toEqual(userId); })); + + it('should be able to get a users power level', inject( + function(modelService) { + var roomId = "!foo:matrix.org"; + + var room = modelService.getRoom(roomId); + room.current_room_state.storeStateEvent({ + content: { membership: "join" }, + user_id: "@adam:matrix.org", + type: "m.room.member" + }); + room.current_room_state.storeStateEvent({ + content: { membership: "join" }, + user_id: "@beth:matrix.org", + type: "m.room.member" + }); + room.current_room_state.storeStateEvent({ + content: { + "@adam:matrix.org": 90, + "default": 50 + }, + user_id: "@adam:matrix.org", + type: "m.room.power_levels" + }); + + var num = modelService.getUserPowerLevel(roomId, "@beth:matrix.org"); + expect(num).toEqual(50); + + num = modelService.getUserPowerLevel(roomId, "@adam:matrix.org"); + expect(num).toEqual(90); + + num = modelService.getUserPowerLevel(roomId, "@unknown:matrix.org"); + expect(num).toEqual(50); + })); });