forked from mystiq/hydrogen-web
fix filling gaps with overlapping events
although event order remains wrong, as events are reversed. step before removing premature optimization, so it's in the git commit log
This commit is contained in:
parent
c9aaa18151
commit
0407829b26
1 changed files with 13 additions and 3 deletions
|
@ -8,15 +8,22 @@ export default class GapWriter {
|
||||||
this._storage = storage;
|
this._storage = storage;
|
||||||
this._fragmentIdComparer = fragmentIdComparer;
|
this._fragmentIdComparer = fragmentIdComparer;
|
||||||
}
|
}
|
||||||
|
// events is in reverse-chronological order (last event comes at index 0) if backwards
|
||||||
async _findOverlappingEvents(fragmentEntry, events, txn) {
|
async _findOverlappingEvents(fragmentEntry, events, txn) {
|
||||||
const eventIds = events.map(e => e.event_id);
|
|
||||||
const {direction} = fragmentEntry;
|
const {direction} = fragmentEntry;
|
||||||
|
// make it in chronological order, so findFirstOrLastOccurringEventId can
|
||||||
|
// use it's supposed optimization if event ids sorting order correlates with timeline chronology.
|
||||||
|
// premature optimization?
|
||||||
|
if (direction.isBackward) {
|
||||||
|
events = events.slice().reverse();
|
||||||
|
}
|
||||||
|
const eventIds = events.map(e => e.event_id);
|
||||||
const findLast = direction.isBackward;
|
const findLast = direction.isBackward;
|
||||||
let nonOverlappingEvents = events;
|
let nonOverlappingEvents = events;
|
||||||
let neighbourFragmentEntry;
|
let neighbourFragmentEntry;
|
||||||
const neighbourEventId = await txn.timelineEvents.findFirstOrLastOccurringEventId(this._roomId, eventIds, findLast);
|
const neighbourEventId = await txn.timelineEvents.findFirstOrLastOccurringEventId(this._roomId, eventIds, findLast);
|
||||||
if (neighbourEventId) {
|
if (neighbourEventId) {
|
||||||
|
console.log("_findOverlappingEvents neighbourEventId", neighbourEventId);
|
||||||
// trim overlapping events
|
// trim overlapping events
|
||||||
const neighbourEventIndex = events.findIndex(e => e.event_id === neighbourEventId);
|
const neighbourEventIndex = events.findIndex(e => e.event_id === neighbourEventId);
|
||||||
const start = direction.isBackward ? neighbourEventIndex + 1 : 0;
|
const start = direction.isBackward ? neighbourEventIndex + 1 : 0;
|
||||||
|
@ -24,10 +31,13 @@ export default class GapWriter {
|
||||||
nonOverlappingEvents = events.slice(start, end);
|
nonOverlappingEvents = events.slice(start, end);
|
||||||
// get neighbour fragment to link it up later on
|
// get neighbour fragment to link it up later on
|
||||||
const neighbourEvent = await txn.timelineEvents.getByEventId(this._roomId, neighbourEventId);
|
const neighbourEvent = await txn.timelineEvents.getByEventId(this._roomId, neighbourEventId);
|
||||||
const neighbourFragment = await txn.timelineFragments.get(neighbourEvent.fragmentId);
|
console.log("neighbourEvent", {neighbourEvent, start, end, nonOverlappingEvents, events, neighbourEventIndex});
|
||||||
|
const neighbourFragment = await txn.timelineFragments.get(this._roomId, neighbourEvent.fragmentId);
|
||||||
neighbourFragmentEntry = fragmentEntry.createNeighbourEntry(neighbourFragment);
|
neighbourFragmentEntry = fragmentEntry.createNeighbourEntry(neighbourFragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("_findOverlappingEvents events", events, nonOverlappingEvents);
|
||||||
|
|
||||||
return {nonOverlappingEvents, neighbourFragmentEntry};
|
return {nonOverlappingEvents, neighbourFragmentEntry};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue