feat: Enhance update manager to handle UTF-8 BOM and improve asset resolution logic
This commit is contained in:
parent
44124595d8
commit
093b196d0d
4 changed files with 46 additions and 2 deletions
|
|
@ -93,7 +93,9 @@ class UpdateManager:
|
|||
"""Download and parse a JSON asset from a release."""
|
||||
try:
|
||||
with urlopen(url, timeout=10) as response:
|
||||
return json.loads(response.read().decode("utf-8"))
|
||||
# Some release pipelines may upload JSON files with UTF-8 BOM.
|
||||
# Use utf-8-sig to transparently handle both BOM and non-BOM files.
|
||||
return json.loads(response.read().decode("utf-8-sig"))
|
||||
except (URLError, json.JSONDecodeError) as e:
|
||||
logger.error(f"Failed to download JSON asset: {e}")
|
||||
return None
|
||||
|
|
@ -148,8 +150,28 @@ class UpdateManager:
|
|||
brand_prefix = f"{self.brand_id}-*"
|
||||
|
||||
installer_asset = None
|
||||
|
||||
# Prefer brand-specific naming when possible.
|
||||
if self.brand_id == "webdrop_bridge":
|
||||
preferred_patterns = ["webdropbridge-*.msi", "webdropbridge*.msi"]
|
||||
else:
|
||||
preferred_patterns = [f"{self.brand_id.lower()}-*.msi", f"{self.brand_id.lower()}*.msi"]
|
||||
|
||||
# 1) Try strict brand-pattern match first
|
||||
for asset in release.assets:
|
||||
asset_name = asset.get("name", "")
|
||||
asset_name_lower = asset_name.lower()
|
||||
if not asset_name_lower.endswith(extension):
|
||||
continue
|
||||
if any(fnmatch.fnmatch(asset_name_lower, pattern) for pattern in preferred_patterns):
|
||||
installer_asset = asset
|
||||
break
|
||||
|
||||
# 2) Fallback: preserve previous behavior (first installer for platform)
|
||||
for asset in release.assets:
|
||||
if installer_asset:
|
||||
break
|
||||
asset_name = asset.get("name", "")
|
||||
if not asset_name.endswith(extension):
|
||||
continue
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue