|
@@ -1256,7 +1256,33 @@ export default function Page() {
|
|
|
if (!wants) return
|
|
if (!wants) return
|
|
|
if (sync.data.session_diff[id] !== undefined) return
|
|
if (sync.data.session_diff[id] !== undefined) return
|
|
|
|
|
|
|
|
- sync.session.diff(id)
|
|
|
|
|
|
|
+ const state = {
|
|
|
|
|
+ cancelled: false,
|
|
|
|
|
+ attempt: 0,
|
|
|
|
|
+ timer: undefined as number | undefined,
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const load = () => {
|
|
|
|
|
+ if (state.cancelled) return
|
|
|
|
|
+ const pending = sync.session.diff(id)
|
|
|
|
|
+ if (!pending) return
|
|
|
|
|
+ pending.catch(() => {
|
|
|
|
|
+ if (state.cancelled) return
|
|
|
|
|
+ const attempt = state.attempt + 1
|
|
|
|
|
+ state.attempt = attempt
|
|
|
|
|
+ if (attempt > 5) return
|
|
|
|
|
+ if (state.timer !== undefined) clearTimeout(state.timer)
|
|
|
|
|
+ const wait = Math.min(10000, 250 * 2 ** (attempt - 1))
|
|
|
|
|
+ state.timer = window.setTimeout(load, wait)
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ load()
|
|
|
|
|
+
|
|
|
|
|
+ onCleanup(() => {
|
|
|
|
|
+ state.cancelled = true
|
|
|
|
|
+ if (state.timer !== undefined) clearTimeout(state.timer)
|
|
|
|
|
+ })
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
const autoScroll = createAutoScroll({
|
|
const autoScroll = createAutoScroll({
|