forked from mystiq/hydrogen-web
work on gap filling + tests (doesn't work yet)
This commit is contained in:
parent
aaff9eea6c
commit
3f2f656db7
1 changed files with 29 additions and 13 deletions
|
@ -70,7 +70,9 @@ export default class RoomPersister {
|
|||
throw new Error("Gap is not present in the timeline");
|
||||
}
|
||||
// find the previous event before the gap we could merge with
|
||||
const neighbourEventEntry = await roomTimeline.findSubsequentEvent(this._roomId, gapKey, backwards);
|
||||
const neighbourEventEntry = await (backwards ?
|
||||
roomTimeline.previousEvent(this._roomId, gapKey) :
|
||||
roomTimeline.nextEvent(this._roomId, gapKey));
|
||||
const neighbourEventId = neighbourEventEntry ? neighbourEventEntry.event.event_id : undefined;
|
||||
const {newEntries, eventFound} = this._createNewGapEntries(chunk, end, gapKey, neighbourEventId, backwards);
|
||||
const neighbourEventKey = eventFound ? neighbourEventEntry.sortKey : undefined;
|
||||
|
@ -123,7 +125,6 @@ export default class RoomPersister {
|
|||
nextKey = nextKey.nextKeyWithGap();
|
||||
entries.push(this._createBackwardGapEntry(nextKey, timeline.prev_batch));
|
||||
}
|
||||
// const startOfChunkSortKey = nextKey;
|
||||
if (timeline.events) {
|
||||
for(const event of timeline.events) {
|
||||
nextKey = nextKey.nextKey();
|
||||
|
@ -132,7 +133,7 @@ export default class RoomPersister {
|
|||
}
|
||||
// write to store
|
||||
for(const entry of entries) {
|
||||
txn.roomTimeline.add(entry);
|
||||
txn.roomTimeline.insert(entry);
|
||||
}
|
||||
// right thing to do? if the txn fails, not sure we'll continue anyways ...
|
||||
// only advance the key once the transaction has
|
||||
|
@ -189,11 +190,28 @@ export default class RoomPersister {
|
|||
}
|
||||
|
||||
//#ifdef TESTS
|
||||
import {StorageMock, RoomTimelineMock} from "../../src/mocks/storage.js";
|
||||
import MemoryStorage from "../storage/memory/MemoryStorage.js";
|
||||
|
||||
export async function tests() {
|
||||
export function tests() {
|
||||
const roomId = "!abc:hs.tld";
|
||||
|
||||
// sets sortKey and roomId on an array of entries
|
||||
function createTimeline(roomId, entries) {
|
||||
let key = new SortKey();
|
||||
for (let entry of entries) {
|
||||
if (entry.gap && entry.gap.prev_batch) {
|
||||
key = key.nextKeyWithGap();
|
||||
}
|
||||
entry.sortKey = key;
|
||||
if (entry.gap && entry.gap.next_batch) {
|
||||
key = key.nextKeyWithGap();
|
||||
} else if (!entry.gap) {
|
||||
key = key.nextKey();
|
||||
}
|
||||
entry.roomId = roomId;
|
||||
}
|
||||
}
|
||||
|
||||
function areSorted(entries) {
|
||||
for (var i = 1; i < entries.length; i++) {
|
||||
const isSorted = entries[i - 1].sortKey.compare(entries[i].sortKey) < 0;
|
||||
|
@ -208,13 +226,12 @@ export async function tests() {
|
|||
"test backwards gap fill with overlapping neighbouring event": async function(assert) {
|
||||
const currentPaginationToken = "abc";
|
||||
const gap = {gap: {prev_batch: currentPaginationToken}};
|
||||
// assigns roomId and sortKey
|
||||
const roomTimeline = RoomTimelineMock.forRoom(roomId, [
|
||||
const storage = new MemoryStorage({roomTimeline: createTimeline(roomId, [
|
||||
{event: {event_id: "b"}},
|
||||
{gap: {next_batch: "ghi"}},
|
||||
gap,
|
||||
]);
|
||||
const persister = new RoomPersister(roomId, new StorageMock({roomTimeline}));
|
||||
])});
|
||||
const persister = new RoomPersister({roomId, storage});
|
||||
const response = {
|
||||
start: currentPaginationToken,
|
||||
end: "def",
|
||||
|
@ -240,13 +257,12 @@ export async function tests() {
|
|||
const currentPaginationToken = "abc";
|
||||
const newPaginationToken = "def";
|
||||
const gap = {gap: {prev_batch: currentPaginationToken}};
|
||||
// assigns roomId and sortKey
|
||||
const roomTimeline = RoomTimelineMock.forRoom(roomId, [
|
||||
const storage = new MemoryStorage({roomTimeline: createTimeline(roomId, [
|
||||
{event: {event_id: "a"}},
|
||||
{gap: {next_batch: "ghi"}},
|
||||
gap,
|
||||
]);
|
||||
const persister = new RoomPersister(roomId, new StorageMock({roomTimeline}));
|
||||
])});
|
||||
const persister = new RoomPersister({roomId, storage});
|
||||
const response = {
|
||||
start: currentPaginationToken,
|
||||
end: newPaginationToken,
|
||||
|
|
Loading…
Reference in a new issue