import { useEffect, useState } from "react"; import { Loader2 } from "lucide-react"; import { Dialogs } from "@wailsio/runtime"; import { Update as UpdateSvc } from "@bindings/services"; const TIMEOUT_MS = 15 * 60 * 1000; const showError = (message: string) => Dialogs.Error({ Title: "Update Failed", Message: message }); export default function Update() { const [done, setDone] = useState(false); const [failed, setFailed] = useState(false); useEffect(() => { let cancelled = false; UpdateSvc.Trigger().catch((e) => { if (cancelled) return; setFailed(true); void showError(e instanceof Error ? e.message : String(e)); }); const start = Date.now(); const timer = setInterval(async () => { if (Date.now() - start > TIMEOUT_MS) { clearInterval(timer); setFailed(true); void showError("Update timed out."); return; } try { const r = await UpdateSvc.GetInstallerResult(); if (r.success) { setDone(true); clearInterval(timer); } else if (r.errorMsg) { clearInterval(timer); setFailed(true); void showError(r.errorMsg); } } catch { // installer not finished yet } }, 2000); return () => { cancelled = true; clearInterval(timer); }; }, []); return (
Please don't close this window.
> )}