1 files changed, 22 insertions, 0 deletions
diff --git a/syweb/webclient/components/matrix/model-service.js b/syweb/webclient/components/matrix/model-service.js
index da71dac436..7d7a61cbf8 100644
--- a/syweb/webclient/components/matrix/model-service.js
+++ b/syweb/webclient/components/matrix/model-service.js
@@ -41,6 +41,7 @@ angular.module('modelService', [])
this.room_id = room_id;
this.old_room_state = new RoomState();
this.current_room_state = new RoomState();
+ this.now = this.current_room_state; // makes html access shorter
this.events = []; // events which can be displayed on the UI. TODO move?
};
Room.prototype = {
@@ -121,6 +122,25 @@ angular.module('modelService', [])
else if (event.type === "m.room.aliases") {
setRoomIdToAliasMapping(event.room_id, event.content.aliases[0]);
}
+ else if (event.type === "m.room.power_levels") {
+ // normalise power levels: find the max first.
+ var maxPowerLevel = 0;
+ for (var user_id in event.content) {
+ if (!event.content.hasOwnProperty(user_id) || user_id === "hsob_ts") continue; // XXX hsob_ts on some old rooms :(
+ maxPowerLevel = Math.max(maxPowerLevel, event.content[user_id]);
+ }
+ // set power level f.e room member
+ var defaultPowerLevel = event.content.default === undefined ? 0 : event.content.default;
+ for (var user_id in this.members) {
+ if (!this.members.hasOwnProperty(user_id)) continue;
+ var rm = this.members[user_id];
+ if (!rm) {
+ continue;
+ }
+ rm.power_level = event.content[user_id] === undefined ? defaultPowerLevel : event.content[user_id];
+ rm.power_level_norm = (rm.power_level * 100) / maxPowerLevel;
+ }
+ }
},
storeStateEvents: function storeState(events) {
@@ -140,6 +160,8 @@ angular.module('modelService', [])
/***** Room Member Object *****/
var RoomMember = function RoomMember() {
this.event = {}; // the m.room.member event representing the RoomMember.
+ this.power_level_norm = 0;
+ this.power_level = 0;
this.user = undefined; // the User
};
|