From 70c7e0b0f38cf0ac8a57d983df5ecebad2838900 Mon Sep 17 00:00:00 2001 From: Nils Maier Date: Sun, 25 Aug 2019 21:25:44 +0200 Subject: [PATCH] Avoid update races --- windows/manager.ts | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/windows/manager.ts b/windows/manager.ts index 2b9f623..d767b34 100644 --- a/windows/manager.ts +++ b/windows/manager.ts @@ -6,6 +6,8 @@ import {_, localize} from "../lib/i18n"; import {Prefs} from "../lib/prefs"; import PORT from "./manager/port"; import { runtime } from "../lib/browser"; +import { Promised } from "../lib/util"; +import { PromiseSerializer } from "../lib/pserializer"; const $ = document.querySelector.bind(document); @@ -67,7 +69,9 @@ addEventListener("DOMContentLoaded", function dom() { } })(); + const tabled = new Promised(); const loaded = Promise.all([LOADED, platformed]); + const fullyloaded = Promise.all([LOADED, platformed, tabled]); localize(document.documentElement); $("#donate").addEventListener("click", () => { @@ -85,18 +89,22 @@ addEventListener("DOMContentLoaded", function dom() { Table.init(); const loading = $("#loading"); loading.parentElement.removeChild(loading); + tabled.resolve(); } Table.setItems(items); }); }); - PORT.on("dirty", async items => { - await loaded; + + // Updates + const serializer = new PromiseSerializer(1); + PORT.on("dirty", serializer.wrap(this, async (items: any[]) => { + await fullyloaded; Table.updateItems(items); - }); - PORT.on("removed", async sids => { - await loaded; + })); + PORT.on("removed", serializer.wrap(this, async (sids: number[]) => { + await fullyloaded; Table.removedItems(sids); - }); + })); const statusNetwork = $("#statusNetwork"); statusNetwork.addEventListener("click", () => {