2525from collections .abc import Callable
2626from dataclasses import dataclass
2727from pathlib import Path
28+ from typing import cast
2829
2930from aao import __version__
3031from aao .resources import syncer
32+ from aao .types import JsonObject
3133from aao .utils .logger import logger , setup_logging
3234from aao .utils .runtime_paths import is_frozen , project_root
3335
@@ -93,7 +95,8 @@ def check_software(self) -> ReleaseInfo | None:
9395 if token :
9496 req .add_header ("Authorization" , f"Bearer { token } " )
9597 with urllib .request .urlopen (req , timeout = 10 ) as resp :
96- data = json .loads (resp .read ())
98+ raw = json .loads (resp .read ())
99+ data = cast (JsonObject , raw ) if isinstance (raw , dict ) else {}
97100 except Exception as e : # noqa: BLE001
98101 logger .warning ("检查更新失败: %s" , e )
99102 return None
@@ -140,14 +143,12 @@ def _fetch_changelog_since(self, current: str) -> str:
140143 try :
141144 req = _make_request (_RELEASES_LIST_API , _settings_github_token ())
142145 with urllib .request .urlopen (req , timeout = 10 ) as resp :
143- releases = json .loads (resp .read ())
146+ raw = json .loads (resp .read ())
147+ releases = cast (list [JsonObject ], raw ) if isinstance (raw , list ) else []
144148 except Exception as e : # noqa: BLE001
145149 logger .warning ("拉取 release 列表失败,降级为单版 changelog: %s" , e )
146150 return ""
147151
148- if not isinstance (releases , list ):
149- return ""
150-
151152 # 筛 version > current 的,按版本降序排
152153 entries : list [tuple [str , str ]] = [] # (version, body)
153154 for r in releases :
@@ -209,13 +210,13 @@ def update_resources(
209210 progress_cb (r .message )
210211 return results
211212
212- def update_all (self , progress_cb : Callable [[str ], None ] | None = None ) -> dict :
213+ def update_all (self , progress_cb : Callable [[str ], None ] | None = None ) -> JsonObject :
213214 """检查软件更新 + 更新资源。
214215
215216 Returns:
216217 {"software": ReleaseInfo | None, "resources": [SyncResult]}
217218 """
218- result : dict = {}
219+ result : JsonObject = {}
219220
220221 if progress_cb :
221222 progress_cb ("检查软件更新..." )
@@ -417,7 +418,7 @@ def apply_update(self, zip_path: Path) -> None:
417418_DOWNLOAD_BACKOFF_SEC = 1.0
418419
419420
420- def _pick_win_asset (assets : list ) -> AssetInfo | None :
421+ def _pick_win_asset (assets : list [ JsonObject ] ) -> AssetInfo | None :
421422 """从 release assets 里选 win-x64 zip。"""
422423 for a in assets :
423424 name = str (a .get ("name" , "" )).lower ()
@@ -437,7 +438,9 @@ def _settings_proxy() -> str | None:
437438 path = project_root () / "config" / "settings.json"
438439 if not path .exists ():
439440 return None
440- proxy = json .loads (path .read_text (encoding = "utf-8" )).get ("proxy" , "" )
441+ raw = json .loads (path .read_text (encoding = "utf-8" ))
442+ data = cast (JsonObject , raw ) if isinstance (raw , dict ) else {}
443+ proxy = data .get ("proxy" , "" )
441444 return str (proxy ).strip () or None
442445 except Exception : # noqa: BLE001
443446 return None
@@ -450,7 +453,9 @@ def _settings_github_token() -> str | None:
450453 path = project_root () / "config" / "settings.json"
451454 if not path .exists ():
452455 return None
453- enc = json .loads (path .read_text (encoding = "utf-8" )).get ("github_token_enc" , "" )
456+ raw = json .loads (path .read_text (encoding = "utf-8" ))
457+ data = cast (JsonObject , raw ) if isinstance (raw , dict ) else {}
458+ enc = data .get ("github_token_enc" , "" )
454459 return decrypt_text (str (enc )) if enc else None
455460 except Exception : # noqa: BLE001
456461 return None
0 commit comments