feat(update): add forced upgrade progress flow

This commit is contained in:
chengma
2026-07-13 12:12:58 +08:00
parent bab2609a85
commit 04124060fc
11 changed files with 437 additions and 101 deletions
+11 -1
View File
@@ -377,17 +377,25 @@ def load_verified_pending(install_root, metadata):
return None
def prepare_update(metadata, install_root, **download_kwargs):
def prepare_update(metadata, install_root, stage_callback=None, **download_kwargs):
validate_metadata(metadata, download_kwargs.get("trusted_hosts", DEFAULT_TRUSTED_HOSTS))
if stage_callback:
stage_callback("正在检查已下载的新版")
reusable = load_verified_pending(install_root, metadata)
if reusable is not None:
if stage_callback:
stage_callback("新版已经完成校验")
return reusable
update_root = _update_root(install_root)
if stage_callback:
stage_callback("正在下载新版")
zip_path = download_package(metadata, install_root, **download_kwargs)
staging_parent = update_root / "staging"
staging_parent.mkdir(parents=True, exist_ok=True)
staging_dir = staging_parent / (metadata.version + "-" + uuid.uuid4().hex[:12])
try:
if stage_callback:
stage_callback("正在校验并准备新版")
safe_extract(zip_path, staging_dir)
validate_staging(staging_dir, metadata)
pending_path = _write_pending(update_root, metadata, staging_dir, zip_path)
@@ -395,4 +403,6 @@ def prepare_update(metadata, install_root, **download_kwargs):
if staging_dir.exists():
shutil.rmtree(str(staging_dir), ignore_errors=True)
raise
if stage_callback:
stage_callback("新版已经完成校验")
return StagedUpdate(metadata.version, zip_path, staging_dir, pending_path, metadata.sha256)