mirror of
https://github.com/vector-im/hydrogen-web.git
synced 2024-12-23 11:35:04 +01:00
process state events in the timeline together with other timeline events
so member info gets overwritten after all the previous events have already been written
This commit is contained in:
parent
fe7cc08287
commit
ba3a4ab8b2
@ -118,7 +118,7 @@ export class SyncWriter {
|
|||||||
_writeStateEvents(roomResponse, txn) {
|
_writeStateEvents(roomResponse, txn) {
|
||||||
const changedMembers = [];
|
const changedMembers = [];
|
||||||
// persist state
|
// persist state
|
||||||
const {state, timeline} = roomResponse;
|
const {state} = roomResponse;
|
||||||
if (state.events) {
|
if (state.events) {
|
||||||
for (const event of state.events) {
|
for (const event of state.events) {
|
||||||
const member = this._writeStateEvent(event, txn);
|
const member = this._writeStateEvent(event, txn);
|
||||||
@ -127,31 +127,29 @@ export class SyncWriter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// persist live state events in timeline
|
return changedMembers;
|
||||||
|
}
|
||||||
|
|
||||||
|
_writeTimeline(entries, timeline, currentKey, txn) {
|
||||||
|
const changedMembers = [];
|
||||||
if (timeline.events) {
|
if (timeline.events) {
|
||||||
for (const event of timeline.events) {
|
const events = deduplicateEvents(timeline.events);
|
||||||
|
for(const event of events) {
|
||||||
|
// process live state events first, so new member info is available
|
||||||
if (typeof event.state_key === "string") {
|
if (typeof event.state_key === "string") {
|
||||||
const member = this._writeStateEvent(event, txn);
|
const member = this._writeStateEvent(event, txn);
|
||||||
if (member) {
|
if (member) {
|
||||||
changedMembers.push(member);
|
changedMembers.push(member);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
// store event in timeline
|
||||||
}
|
|
||||||
return changedMembers;
|
|
||||||
}
|
|
||||||
|
|
||||||
_writeTimeline(entries, timeline, currentKey, txn) {
|
|
||||||
if (timeline.events) {
|
|
||||||
const events = deduplicateEvents(timeline.events);
|
|
||||||
for(const event of events) {
|
|
||||||
currentKey = currentKey.nextKey();
|
currentKey = currentKey.nextKey();
|
||||||
const entry = createEventEntry(currentKey, this._roomId, event);
|
const entry = createEventEntry(currentKey, this._roomId, event);
|
||||||
txn.timelineEvents.insert(entry);
|
txn.timelineEvents.insert(entry);
|
||||||
entries.push(new EventEntry(entry, this._fragmentIdComparer));
|
entries.push(new EventEntry(entry, this._fragmentIdComparer));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return currentKey;
|
return {currentKey, changedMembers};
|
||||||
}
|
}
|
||||||
|
|
||||||
async writeSync(roomResponse, txn) {
|
async writeSync(roomResponse, txn) {
|
||||||
@ -177,8 +175,9 @@ export class SyncWriter {
|
|||||||
// important this happens before _writeTimeline so
|
// important this happens before _writeTimeline so
|
||||||
// members are available in the transaction
|
// members are available in the transaction
|
||||||
const changedMembers = this._writeStateEvents(roomResponse, txn);
|
const changedMembers = this._writeStateEvents(roomResponse, txn);
|
||||||
|
const timelineResult = this._writeTimeline(entries, timeline, currentKey, txn);
|
||||||
currentKey = this._writeTimeline(entries, timeline, currentKey, txn);
|
currentKey = timelineResult.currentKey;
|
||||||
|
changedMembers.push(...timelineResult.changedMembers);
|
||||||
|
|
||||||
return {entries, newLiveKey: currentKey, changedMembers};
|
return {entries, newLiveKey: currentKey, changedMembers};
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user