mirror of
https://github.com/vector-im/hydrogen-web.git
synced 2024-12-23 11:35:04 +01:00
use prev_content from later events before state
This commit is contained in:
parent
830c300102
commit
fafdf669db
@ -27,7 +27,18 @@ export class RoomMember {
|
|||||||
if (typeof userId !== "string") {
|
if (typeof userId !== "string") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const {content} = memberEvent;
|
return this._fromMemberEventContent(roomId, userId, memberEvent.content);
|
||||||
|
}
|
||||||
|
|
||||||
|
static fromReplacingMemberEvent(roomId, memberEvent) {
|
||||||
|
const userId = memberEvent && memberEvent.state_key;
|
||||||
|
if (typeof userId !== "string") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return this._fromMemberEventContent(roomId, userId, memberEvent.prev_content);
|
||||||
|
}
|
||||||
|
|
||||||
|
static _fromMemberEventContent(roomId, userId, content) {
|
||||||
const membership = content?.membership;
|
const membership = content?.membership;
|
||||||
const avatarUrl = content?.avatar_url;
|
const avatarUrl = content?.avatar_url;
|
||||||
const displayName = content?.displayname;
|
const displayName = content?.displayname;
|
||||||
|
@ -108,9 +108,8 @@ export class GapWriter {
|
|||||||
const event = events[i];
|
const event = events[i];
|
||||||
key = key.nextKeyForDirection(direction);
|
key = key.nextKeyForDirection(direction);
|
||||||
const eventStorageEntry = createEventEntry(key, this._roomId, event);
|
const eventStorageEntry = createEventEntry(key, this._roomId, event);
|
||||||
const memberEvent = this._findMemberEvent(event.sender, state, events, i, direction);
|
const memberData = this._findMemberData(event.sender, state, events, i, direction);
|
||||||
if (memberEvent) {
|
if (memberData) {
|
||||||
const memberData = RoomMember.fromMemberEvent(memberEvent)?.serialize();
|
|
||||||
eventStorageEntry.displayName = memberData?.displayName;
|
eventStorageEntry.displayName = memberData?.displayName;
|
||||||
eventStorageEntry.avatarUrl = memberData?.avatarUrl;
|
eventStorageEntry.avatarUrl = memberData?.avatarUrl;
|
||||||
}
|
}
|
||||||
@ -121,29 +120,30 @@ export class GapWriter {
|
|||||||
return entries;
|
return entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
_findMemberEvent(userId, state, events, index, direction) {
|
_findMemberData(userId, state, events, index, direction) {
|
||||||
function isOurUser(event) {
|
function isOurUser(event) {
|
||||||
return event.type === MEMBER_EVENT_TYPE && event.state_key === userId;
|
return event.type === MEMBER_EVENT_TYPE && event.state_key === userId;
|
||||||
}
|
}
|
||||||
// older messages are further in the array when going backwards
|
// older messages are at a higher index in the array when going backwards
|
||||||
const inc = direction.isBackward ? 1 : -1;
|
const inc = direction.isBackward ? 1 : -1;
|
||||||
for (let i = index + inc; i >= 0 && i < events.length; i += inc) {
|
for (let i = index + inc; i >= 0 && i < events.length; i += inc) {
|
||||||
const event = events[i];
|
const event = events[i];
|
||||||
if (isOurUser(event)) {
|
if (isOurUser(event)) {
|
||||||
return event;
|
return RoomMember.fromMemberEvent(this._roomId, event)?.serialize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const stateMemberEvent = state.find(isOurUser);
|
// look into newer events, but using prev_content if found
|
||||||
if (stateMemberEvent) {
|
for (let i = index; i >= 0 && i < events.length; i -= inc) {
|
||||||
return stateMemberEvent;
|
|
||||||
}
|
|
||||||
// look into newer events as a fallback, even though it is techically not correct
|
|
||||||
for (let i = index - inc; i >= 0 && i < events.length; i -= inc) {
|
|
||||||
const event = events[i];
|
const event = events[i];
|
||||||
if (isOurUser(event)) {
|
if (isOurUser(event)) {
|
||||||
return event;
|
return RoomMember.fromReplacingMemberEvent(this._roomId, event)?.serialize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// assuming the member hasn't changed within the chunk, just take it from state if it's there
|
||||||
|
const stateMemberEvent = state.find(isOurUser);
|
||||||
|
if (stateMemberEvent) {
|
||||||
|
return RoomMember.fromMemberEvent(this._roomId, stateMemberEvent)?.serialize();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async _updateFragments(fragmentEntry, neighbourFragmentEntry, end, entries, txn) {
|
async _updateFragments(fragmentEntry, neighbourFragmentEntry, end, entries, txn) {
|
||||||
|
Loading…
Reference in New Issue
Block a user