forked from mystiq/hydrogen-web
Rename fetchedEntries --> contextEntriesNotInTimeline
This commit is contained in:
parent
c3bef6d4d2
commit
05d2defa2d
1 changed files with 15 additions and 10 deletions
|
@ -46,8 +46,8 @@ export class Timeline {
|
||||||
});
|
});
|
||||||
this._readerRequest = null;
|
this._readerRequest = null;
|
||||||
this._allEntries = null;
|
this._allEntries = null;
|
||||||
// Stores event entries that we fetch for reply previews
|
/** Stores event entries that we had to fetch from hs/storage for reply previews (because they were not in timeline) */
|
||||||
this._fetchedEventEntries = new Map();
|
this._contextEntriesNotInTimeline = new Map();
|
||||||
this._decryptEntries = null;
|
this._decryptEntries = null;
|
||||||
this._hsApi = hsApi;
|
this._hsApi = hsApi;
|
||||||
this.initializePowerLevels(powerLevelsObservable);
|
this.initializePowerLevels(powerLevelsObservable);
|
||||||
|
@ -256,10 +256,13 @@ export class Timeline {
|
||||||
this._remoteEntries.setManySorted(newEntries);
|
this._remoteEntries.setManySorted(newEntries);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update entries in contextEntriesNotInTimeline based on newly received events.
|
||||||
|
* eg: a newly received redacted event may mark an existing event in contextEntriesNotInTimeline as being redacted
|
||||||
|
*/
|
||||||
_updateFetchedEntries(entries) {
|
_updateFetchedEntries(entries) {
|
||||||
// Update fetchedEntries based on incoming event, eg: a fetched event being redacted
|
|
||||||
for (const entry of entries) {
|
for (const entry of entries) {
|
||||||
const relatedEntry = this._fetchedEventEntries.get(entry.relatedEventId);
|
const relatedEntry = this._contextEntriesNotInTimeline.get(entry.relatedEventId);
|
||||||
// todo: can this be called .addRelation instead?
|
// todo: can this be called .addRelation instead?
|
||||||
if (relatedEntry?.addLocalRelation(entry)) {
|
if (relatedEntry?.addLocalRelation(entry)) {
|
||||||
relatedEntry.contextForEntries.forEach(e => this._updateEntry(e));
|
relatedEntry.contextForEntries.forEach(e => this._updateEntry(e));
|
||||||
|
@ -267,10 +270,13 @@ export class Timeline {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If an event we had to fetch from hs/storage is now in the timeline (for eg, due to gap fill),
|
||||||
|
* remove the event from _contextEntriesNotInTimeline since it is now in remoteEntries
|
||||||
|
*/
|
||||||
_moveFetchedEntryToRemoteEntries(entries) {
|
_moveFetchedEntryToRemoteEntries(entries) {
|
||||||
// if some entry in entries is also in fetchedEntries, we need to remove it from fetchedEntries
|
|
||||||
for (const entry of entries) {
|
for (const entry of entries) {
|
||||||
const fetchedEntry = this._fetchedEventEntries.get(entry.id);
|
const fetchedEntry = this._contextEntriesNotInTimeline.get(entry.id);
|
||||||
if (fetchedEntry) {
|
if (fetchedEntry) {
|
||||||
fetchedEntry.contextForEntries.forEach(e => e.setContextEntry(entry));
|
fetchedEntry.contextForEntries.forEach(e => e.setContextEntry(entry));
|
||||||
entry.updateFrom(fetchedEntry);
|
entry.updateFrom(fetchedEntry);
|
||||||
|
@ -292,20 +298,19 @@ export class Timeline {
|
||||||
if (!contextEvent) {
|
if (!contextEvent) {
|
||||||
contextEvent = await this._getEventFromStorage(id) ?? await this._getEventFromHomeserver(id);
|
contextEvent = await this._getEventFromStorage(id) ?? await this._getEventFromHomeserver(id);
|
||||||
// this entry was created from storage/hs, so it's not tracked by remoteEntries
|
// this entry was created from storage/hs, so it's not tracked by remoteEntries
|
||||||
// we track them here so that we can update reply preview of dependents on redaction
|
// we track them here so that we can update reply previews later
|
||||||
this._fetchedEventEntries.set(id, contextEvent);
|
this._contextEntriesNotInTimeline.set(id, contextEvent);
|
||||||
}
|
}
|
||||||
if (contextEvent) {
|
if (contextEvent) {
|
||||||
contextEvent.setAsContextOf(entry);
|
contextEvent.setAsContextOf(entry);
|
||||||
entry.setContextEntry(contextEvent);
|
entry.setContextEntry(contextEvent);
|
||||||
// emit this change
|
|
||||||
this._updateEntry(entry);
|
this._updateEntry(entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_getTrackedEvent(id) {
|
_getTrackedEvent(id) {
|
||||||
return this.getByEventId(id) ?? this._fetchedEventEntries.get(id);
|
return this.getByEventId(id) ?? this._contextEntriesNotInTimeline.get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
async _getEventFromStorage(eventId) {
|
async _getEventFromStorage(eventId) {
|
||||||
|
|
Loading…
Reference in a new issue