Update ranges depending on the room list position

This commit is contained in:
Kegan Dougal 2021-12-06 16:11:12 +00:00
parent 23d30e27cb
commit fce1d95a7c
2 changed files with 29 additions and 2 deletions

View file

@ -30,6 +30,7 @@ export class LeftPanelViewModel extends ViewModel {
constructor(options) { constructor(options) {
super(options); super(options);
const {rooms, invites, compareFn, sync} = options; const {rooms, invites, compareFn, sync} = options;
this._sync = sync;
const sync3List = new Sync3ObservableList(sync, rooms); const sync3List = new Sync3ObservableList(sync, rooms);
const list = new ConcatList(invites.sortValues((a,b) => a.compare(b)), sync3List); const list = new ConcatList(invites.sortValues((a,b) => a.compare(b)), sync3List);
this._tileViewModelsMap = this._mapTileViewModels(list); this._tileViewModelsMap = this._mapTileViewModels(list);
@ -151,8 +152,7 @@ export class LeftPanelViewModel extends ViewModel {
} }
} }
// TODO: used in sync v3
loadRoomRange(range) { loadRoomRange(range) {
this._sync.loadRange(range.start, range.end);
} }
} }

View file

@ -135,6 +135,33 @@ export class Sync3 {
this.totalRooms = 0; this.totalRooms = 0;
} }
loadRange(start, end) {
let range = [start, end];
if (end < this.ranges[0][1]) {
// asked to load a range we are already loading, ignore
// E.g [0-20] and [5-15]
return;
}
// Somewhat elaborate bounds checking:
// - Ensure we start above the first range, bumping the start index if necessary.
// - Ensure bumping the start didn't cause overlap on ranges, bumping the end if necessary.
if (start < this.ranges[0][1]) {
// overlapping range e.g 0-20 and 15-30, so bump up this range to one above the first range
start = this.ranges[0][1] + 1;
}
if (start >= end) { // E.g [20,20] or [25,20]
end += 1;
}
if (this.ranges.length === 1) {
this.ranges.push([]);
}
this.ranges[1][0] = start;
this.ranges[1][1] = end;
console.log("new ranges: ", JSON.stringify(this.ranges), this.roomIndexToRoomId);
// interrupt the sync request to send up the new ranges
this.currentRequest?.abort();
}
// Start syncing. Probably call this at startup once you have an access_token. // Start syncing. Probably call this at startup once you have an access_token.
// If we're already syncing, this does nothing. // If we're already syncing, this does nothing.
start(): void { start(): void {