From bc3a9c319f6e3187e74cddba1f4063a1eea6e757 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Tue, 4 Aug 2026 22:56:40 -0700 Subject: [PATCH] Fix self-extending timer. --- src/lib/vault/vault-timer.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/lib/vault/vault-timer.ts b/src/lib/vault/vault-timer.ts index 3d6b429..39c5491 100644 --- a/src/lib/vault/vault-timer.ts +++ b/src/lib/vault/vault-timer.ts @@ -5,31 +5,34 @@ export class VaultTimer { #f: () => any #elapsed: number = 0 #isPaused: boolean = false + #remaining: number #start: number #ticker: number | NodeJS.Timeout #timeout: number | NodeJS.Timeout constructor (f: () => any, t: number) { - this.#ticker = setInterval(Function.prototype, 1000) this.#f = f + this.#remaining = t this.#start = performance.now() - this.#timeout = setTimeout(this.#f, t) + this.#ticker = setInterval(Function.prototype, 1000) + this.#timeout = setTimeout(this.#f, this.#remaining) } pause () { if (!this.#isPaused) { - clearInterval(this.#ticker) clearTimeout(this.#timeout) - this.#elapsed = performance.now() - this.#start + clearInterval(this.#ticker) + const elapsed = performance.now() - this.#start + this.#remaining -= elapsed this.#isPaused = true } } resume () { if (this.#isPaused) { - this.#ticker = setInterval(Function.prototype, 1000) this.#start = performance.now() - this.#timeout = setTimeout(this.#f, this.#elapsed) + this.#ticker = setInterval(Function.prototype, 1000) + this.#timeout = setTimeout(this.#f, this.#remaining) this.#isPaused = false } } -- 2.52.0