Wait for events to load before saving scroll position
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing

This commit is contained in:
BadAtNames 2020-10-24 23:01:48 +02:00
parent 6227f6fa84
commit c9dffc9d4a

View file

@ -33,9 +33,9 @@ function eventSearch(list, event, min = 0, max = NO_MAX) {
} }
} }
// recurse (below) // recurse (below)
if (list[mid].data.origin_server_ts > event.data.origin_server_ts) return eventSearch(list, event, min, mid-1) if (list[mid].data.origin_server_ts > event.data.origin_server_ts) return eventSearch(list, event, min, mid - 1)
// recurse (above) // recurse (above)
else return eventSearch(list, event, mid+1, max) else return eventSearch(list, event, mid + 1, max)
} }
class Event extends ElemJS { class Event extends ElemJS {
@ -213,7 +213,7 @@ class ReactiveTimeline extends ElemJS {
if (!search.success) { if (!search.success) {
if (search.i >= 1) { if (search.i >= 1) {
// add at end // add at end
this.tryAddGroups(event, [search.i-1, search.i]) this.tryAddGroups(event, [search.i - 1, search.i])
} else { } else {
// add at start // add at start
this.tryAddGroups(event, [0, -1]) this.tryAddGroups(event, [0, -1])
@ -373,7 +373,6 @@ class Timeline extends Subscribable {
} }
async loadScrollback() { async loadScrollback() {
this.broadcast("beforeScrollbackLoad")
debug = true debug = true
if (!this.from) throw new Error("Can't load scrollback, no from token") if (!this.from) throw new Error("Can't load scrollback, no from token")
const url = new URL(`${lsm.get("domain")}/_matrix/client/r0/rooms/${this.id}/messages`) const url = new URL(`${lsm.get("domain")}/_matrix/client/r0/rooms/${this.id}/messages`)
@ -385,7 +384,11 @@ class Timeline extends Subscribable {
lazy_load_members: true lazy_load_members: true
} }
url.searchParams.set("filter", JSON.stringify(filter)) url.searchParams.set("filter", JSON.stringify(filter))
const root = await fetch(url.toString()).then(res => res.json()) const root = await fetch(url.toString()).then(res => res.json())
this.broadcast("beforeScrollbackLoad")
this.from = root.end this.from = root.end
//console.log(this.updateEvents, root.chunk) //console.log(this.updateEvents, root.chunk)
if (root.state) this.updateStateEvents(root.state) if (root.state) this.updateStateEvents(root.state)