do all collection removal from sync rather than hand callbacks to invite
This commit is contained in:
parent
12da71f731
commit
89461bf69a
3 changed files with 14 additions and 7 deletions
|
@ -55,7 +55,6 @@ export class Session {
|
||||||
this._rooms = new ObservableMap();
|
this._rooms = new ObservableMap();
|
||||||
this._roomUpdateCallback = (room, params) => this._rooms.update(room.id, params);
|
this._roomUpdateCallback = (room, params) => this._rooms.update(room.id, params);
|
||||||
this._invites = new ObservableMap();
|
this._invites = new ObservableMap();
|
||||||
this._inviteRemoveCallback = invite => this._invites.remove(invite.id);
|
|
||||||
this._inviteUpdateCallback = (invite, params) => this._invites.update(invite.id, params);
|
this._inviteUpdateCallback = (invite, params) => this._invites.update(invite.id, params);
|
||||||
this._user = new User(sessionInfo.userId);
|
this._user = new User(sessionInfo.userId);
|
||||||
this._deviceMessageHandler = new DeviceMessageHandler({storage});
|
this._deviceMessageHandler = new DeviceMessageHandler({storage});
|
||||||
|
@ -410,7 +409,6 @@ export class Session {
|
||||||
return new Invite({
|
return new Invite({
|
||||||
roomId,
|
roomId,
|
||||||
hsApi: this._hsApi,
|
hsApi: this._hsApi,
|
||||||
emitCollectionRemove: this._inviteRemoveCallback,
|
|
||||||
emitCollectionUpdate: this._inviteUpdateCallback,
|
emitCollectionUpdate: this._inviteUpdateCallback,
|
||||||
mediaRepository: this._mediaRepository,
|
mediaRepository: this._mediaRepository,
|
||||||
user: this._user,
|
user: this._user,
|
||||||
|
@ -423,6 +421,11 @@ export class Session {
|
||||||
this._invites.add(invite.id, invite);
|
this._invites.add(invite.id, invite);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
removeInviteAfterSync(invite) {
|
||||||
|
this._invites.remove(invite.id);
|
||||||
|
}
|
||||||
|
|
||||||
async obtainSyncLock(syncResponse) {
|
async obtainSyncLock(syncResponse) {
|
||||||
const toDeviceEvents = syncResponse.to_device?.events;
|
const toDeviceEvents = syncResponse.to_device?.events;
|
||||||
if (Array.isArray(toDeviceEvents) && toDeviceEvents.length) {
|
if (Array.isArray(toDeviceEvents) && toDeviceEvents.length) {
|
||||||
|
|
|
@ -299,7 +299,15 @@ export class Sync {
|
||||||
}
|
}
|
||||||
// emit invite related events after txn has been closed
|
// emit invite related events after txn has been closed
|
||||||
for(let is of inviteStates) {
|
for(let is of inviteStates) {
|
||||||
log.wrap("invite", () => is.invite.afterSync(is.changes), log.level.Detail);
|
log.wrap("invite", () => {
|
||||||
|
// important to remove before emitting change in afterSync
|
||||||
|
// so code checking session.invites.get(id) won't
|
||||||
|
// find the invite anymore on update
|
||||||
|
if (is.membership !== "invite") {
|
||||||
|
this._session.removeInviteAfterSync(is.invite);
|
||||||
|
}
|
||||||
|
is.invite.afterSync(is.changes);
|
||||||
|
}, log.level.Detail);
|
||||||
if (is.isNewInvite) {
|
if (is.isNewInvite) {
|
||||||
this._session.addInviteAfterSync(is.invite);
|
this._session.addInviteAfterSync(is.invite);
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,10 +162,6 @@ export class Invite extends EventEmitter {
|
||||||
} else {
|
} else {
|
||||||
this._rejected = true;
|
this._rejected = true;
|
||||||
}
|
}
|
||||||
// important to remove before emitting change
|
|
||||||
// so code checking session.invites.get(id) won't
|
|
||||||
// find the invite anymore on update
|
|
||||||
this._emitCollectionRemove(this);
|
|
||||||
this.emit("change");
|
this.emit("change");
|
||||||
} else {
|
} else {
|
||||||
this._inviteData = changes.inviteData;
|
this._inviteData = changes.inviteData;
|
||||||
|
|
Reference in a new issue