forked from mystiq/hydrogen-web
Merge pull request #432 from MidhunSureshR/sync-powerlevels
Member Panel - PR 3 - Update powerlevels from state event
This commit is contained in:
commit
7d9ccb9a3a
5 changed files with 29 additions and 4 deletions
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {PowerLevels} from "../../../../matrix/room/timeline/PowerLevels.js";
|
import {PowerLevels} from "../../../../matrix/room/PowerLevels.js";
|
||||||
|
|
||||||
export function createMemberComparator(powerLevels) {
|
export function createMemberComparator(powerLevels) {
|
||||||
const collator = new Intl.Collator();
|
const collator = new Intl.Collator();
|
||||||
|
|
|
@ -190,7 +190,7 @@ import {HomeServer as MockHomeServer} from "../../../../mocks/HomeServer.js";
|
||||||
import {BaseMessageTile} from "./tiles/BaseMessageTile.js";
|
import {BaseMessageTile} from "./tiles/BaseMessageTile.js";
|
||||||
import {MappedList} from "../../../../observable/list/MappedList.js";
|
import {MappedList} from "../../../../observable/list/MappedList.js";
|
||||||
import {ObservableValue} from "../../../../observable/ObservableValue.js";
|
import {ObservableValue} from "../../../../observable/ObservableValue.js";
|
||||||
import {PowerLevels} from "../../../../matrix/room/timeline/PowerLevels.js";
|
import {PowerLevels} from "../../../../matrix/room/PowerLevels.js";
|
||||||
|
|
||||||
export function tests() {
|
export function tests() {
|
||||||
const fragmentIdComparer = new FragmentIdComparer([]);
|
const fragmentIdComparer = new FragmentIdComparer([]);
|
||||||
|
|
|
@ -28,7 +28,7 @@ import {EventEntry} from "./timeline/entries/EventEntry.js";
|
||||||
import {ObservedEventMap} from "./ObservedEventMap.js";
|
import {ObservedEventMap} from "./ObservedEventMap.js";
|
||||||
import {DecryptionSource} from "../e2ee/common.js";
|
import {DecryptionSource} from "../e2ee/common.js";
|
||||||
import {ensureLogItem} from "../../logging/utils.js";
|
import {ensureLogItem} from "../../logging/utils.js";
|
||||||
import {PowerLevels} from "./timeline/PowerLevels.js";
|
import {PowerLevels} from "./PowerLevels.js";
|
||||||
import {RetainedObservableValue} from "../../observable/ObservableValue.js";
|
import {RetainedObservableValue} from "../../observable/ObservableValue.js";
|
||||||
|
|
||||||
const EVENT_ENCRYPTED_TYPE = "m.room.encrypted";
|
const EVENT_ENCRYPTED_TYPE = "m.room.encrypted";
|
||||||
|
|
|
@ -14,6 +14,8 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
export const EVENT_TYPE = "m.room.power_levels";
|
||||||
|
|
||||||
export class PowerLevels {
|
export class PowerLevels {
|
||||||
constructor({powerLevelEvent, createEvent, ownUserId, membership}) {
|
constructor({powerLevelEvent, createEvent, ownUserId, membership}) {
|
||||||
this._plEvent = powerLevelEvent;
|
this._plEvent = powerLevelEvent;
|
|
@ -23,6 +23,7 @@ import {WrappedError} from "../error.js"
|
||||||
import {Heroes} from "./members/Heroes.js";
|
import {Heroes} from "./members/Heroes.js";
|
||||||
import {AttachmentUpload} from "./AttachmentUpload.js";
|
import {AttachmentUpload} from "./AttachmentUpload.js";
|
||||||
import {DecryptionSource} from "../e2ee/common.js";
|
import {DecryptionSource} from "../e2ee/common.js";
|
||||||
|
import {PowerLevels, EVENT_TYPE as POWERLEVELS_EVENT_TYPE } from "./PowerLevels.js";
|
||||||
|
|
||||||
const EVENT_ENCRYPTED_TYPE = "m.room.encrypted";
|
const EVENT_ENCRYPTED_TYPE = "m.room.encrypted";
|
||||||
|
|
||||||
|
@ -173,6 +174,7 @@ export class Room extends BaseRoom {
|
||||||
if (Array.isArray(roomResponse.timeline?.events)) {
|
if (Array.isArray(roomResponse.timeline?.events)) {
|
||||||
removedPendingEvents = await this._sendQueue.removeRemoteEchos(roomResponse.timeline.events, txn, log);
|
removedPendingEvents = await this._sendQueue.removeRemoteEchos(roomResponse.timeline.events, txn, log);
|
||||||
}
|
}
|
||||||
|
const powerLevelsEvent = this._getPowerLevelsEvent(roomResponse);
|
||||||
return {
|
return {
|
||||||
summaryChanges,
|
summaryChanges,
|
||||||
roomEncryption,
|
roomEncryption,
|
||||||
|
@ -182,6 +184,7 @@ export class Room extends BaseRoom {
|
||||||
removedPendingEvents,
|
removedPendingEvents,
|
||||||
memberChanges,
|
memberChanges,
|
||||||
heroChanges,
|
heroChanges,
|
||||||
|
powerLevelsEvent,
|
||||||
shouldFlushKeyShares,
|
shouldFlushKeyShares,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -194,7 +197,7 @@ export class Room extends BaseRoom {
|
||||||
afterSync(changes, log) {
|
afterSync(changes, log) {
|
||||||
const {
|
const {
|
||||||
summaryChanges, newEntries, updatedEntries, newLiveKey,
|
summaryChanges, newEntries, updatedEntries, newLiveKey,
|
||||||
removedPendingEvents, memberChanges,
|
removedPendingEvents, memberChanges, powerLevelsEvent,
|
||||||
heroChanges, roomEncryption
|
heroChanges, roomEncryption
|
||||||
} = changes;
|
} = changes;
|
||||||
log.set("id", this.id);
|
log.set("id", this.id);
|
||||||
|
@ -236,6 +239,9 @@ export class Room extends BaseRoom {
|
||||||
emitChange = true;
|
emitChange = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (powerLevelsEvent) {
|
||||||
|
this._updatePowerLevels(powerLevelsEvent);
|
||||||
|
}
|
||||||
if (emitChange) {
|
if (emitChange) {
|
||||||
this._emitUpdate();
|
this._emitUpdate();
|
||||||
}
|
}
|
||||||
|
@ -262,6 +268,23 @@ export class Room extends BaseRoom {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_getPowerLevelsEvent(roomResponse) {
|
||||||
|
const isPowerlevelEvent = event => event.state_key === "" && event.type === POWERLEVELS_EVENT_TYPE;
|
||||||
|
const powerLevelEvent = roomResponse.timeline?.events.find(isPowerlevelEvent) ?? roomResponse.state?.events.find(isPowerlevelEvent);
|
||||||
|
return powerLevelEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
_updatePowerLevels(powerLevelEvent) {
|
||||||
|
if (this._powerLevels) {
|
||||||
|
const newPowerLevels = new PowerLevels({
|
||||||
|
powerLevelEvent,
|
||||||
|
ownUserId: this._user.id,
|
||||||
|
membership: this.membership,
|
||||||
|
});
|
||||||
|
this._powerLevels.set(newPowerLevels);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
needsAfterSyncCompleted({shouldFlushKeyShares}) {
|
needsAfterSyncCompleted({shouldFlushKeyShares}) {
|
||||||
return shouldFlushKeyShares;
|
return shouldFlushKeyShares;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue