mirror of
https://github.com/vector-im/hydrogen-web.git
synced 2024-12-23 11:35:04 +01:00
fixup: writing member info during sync
This commit is contained in:
parent
d31a1b5fff
commit
4b275529f7
@ -138,13 +138,14 @@ export class SyncWriter {
|
|||||||
// store event in timeline
|
// store event in timeline
|
||||||
currentKey = currentKey.nextKey();
|
currentKey = currentKey.nextKey();
|
||||||
const entry = createEventEntry(currentKey, this._roomId, event);
|
const entry = createEventEntry(currentKey, this._roomId, event);
|
||||||
let member = this._findMember(event.sender);
|
let memberData = await this._findMemberData(event.sender, events, txn);
|
||||||
if (member) {
|
if (memberData) {
|
||||||
entry.displayName = member.displayName;
|
entry.displayName = memberData.displayName;
|
||||||
entry.avatarUrl = member.avatarUrl;
|
entry.avatarUrl = memberData.avatarUrl;
|
||||||
}
|
}
|
||||||
txn.timelineEvents.insert(entry);
|
txn.timelineEvents.insert(entry);
|
||||||
entries.push(new EventEntry(entry, this._fragmentIdComparer));
|
entries.push(new EventEntry(entry, this._fragmentIdComparer));
|
||||||
|
|
||||||
// process live state events first, so new member info is available
|
// 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);
|
||||||
@ -157,17 +158,21 @@ export class SyncWriter {
|
|||||||
return {currentKey, changedMembers};
|
return {currentKey, changedMembers};
|
||||||
}
|
}
|
||||||
|
|
||||||
async _findMember(userId, events, txn) {
|
async _findMemberData(userId, events, txn) {
|
||||||
// TODO: perhaps add a small cache here?
|
// TODO: perhaps add a small cache here?
|
||||||
const memberData = await txn.roomMembers.get(this._roomId, event.sender);
|
const memberData = await txn.roomMembers.get(this._roomId, userId);
|
||||||
if (memberData) {
|
if (memberData) {
|
||||||
return new RoomMember(memberData);
|
console.log("got memberData from store", this._roomId, userId, memberData);
|
||||||
|
return memberData;
|
||||||
} else {
|
} else {
|
||||||
|
// sometimes the member event isn't included in state, but rather in the timeline,
|
||||||
|
// even if it is not the first event in the timeline. In this case, go look for the
|
||||||
|
// first occurence
|
||||||
const memberEvent = events.find(e => {
|
const memberEvent = events.find(e => {
|
||||||
return e.type === MEMBER_EVENT_TYPE && e.state_key === event.sender;
|
return e.type === MEMBER_EVENT_TYPE && e.state_key === userId;
|
||||||
});
|
});
|
||||||
if (memberEvent) {
|
if (memberEvent) {
|
||||||
return RoomMember.fromMemberEvent(this._roomId, memberEvent);
|
return RoomMember.fromMemberEvent(this._roomId, memberEvent)?.serialize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user