You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-11-28 05:03:59 +03:00
Merge pull request #563 from matrix-org/dbkr/fix_sentinels_on_power_levels
Fix power level of sentinel members
This commit is contained in:
@@ -104,17 +104,20 @@ RoomMember.prototype.setPowerLevelEvent = function(powerLevelEvent) {
|
|||||||
if (powerLevelEvent.getType() !== "m.room.power_levels") {
|
if (powerLevelEvent.getType() !== "m.room.power_levels") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let maxLevel = powerLevelEvent.getContent().users_default || 0;
|
|
||||||
utils.forEach(utils.values(powerLevelEvent.getContent().users), function(lvl) {
|
const evContent = powerLevelEvent.getDirectionalContent();
|
||||||
|
|
||||||
|
let maxLevel = evContent.users_default || 0;
|
||||||
|
utils.forEach(utils.values(evContent.users), function(lvl) {
|
||||||
maxLevel = Math.max(maxLevel, lvl);
|
maxLevel = Math.max(maxLevel, lvl);
|
||||||
});
|
});
|
||||||
const oldPowerLevel = this.powerLevel;
|
const oldPowerLevel = this.powerLevel;
|
||||||
const oldPowerLevelNorm = this.powerLevelNorm;
|
const oldPowerLevelNorm = this.powerLevelNorm;
|
||||||
|
|
||||||
if (powerLevelEvent.getContent().users[this.userId] !== undefined) {
|
if (evContent.users && evContent.users[this.userId] !== undefined) {
|
||||||
this.powerLevel = powerLevelEvent.getContent().users[this.userId];
|
this.powerLevel = evContent.users[this.userId];
|
||||||
} else if (powerLevelEvent.getContent().users_default !== undefined) {
|
} else if (evContent.users_default !== undefined) {
|
||||||
this.powerLevel = powerLevelEvent.getContent().users_default;
|
this.powerLevel = evContent.users_default;
|
||||||
} else {
|
} else {
|
||||||
this.powerLevel = 0;
|
this.powerLevel = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -197,6 +197,16 @@ RoomState.prototype.setStateEvents = function(stateEvents) {
|
|||||||
member.setPowerLevelEvent(event);
|
member.setPowerLevelEvent(event);
|
||||||
self.emit("RoomState.members", event, self, member);
|
self.emit("RoomState.members", event, self, member);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Go through the sentinel members and see if any of them would be
|
||||||
|
// affected by the new power levels. If so, replace the sentinel.
|
||||||
|
for (const userId of Object.keys(self._sentinels)) {
|
||||||
|
const oldSentinel = self._sentinels[userId];
|
||||||
|
const newSentinel = new RoomMember(event.getRoomId(), userId);
|
||||||
|
newSentinel.setMembershipEvent(oldSentinel.events.member, self);
|
||||||
|
newSentinel.setPowerLevelEvent(event);
|
||||||
|
self._sentinels[userId] = newSentinel;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user