From e912488bbd2095be3c9e5cc53664ef30d76c17c1 Mon Sep 17 00:00:00 2001 From: Lightjunction Assistant Date: Wed, 1 Jul 2026 03:44:09 +0800 Subject: [PATCH] refactor: simplify prerelease update selection --- astrbot/core/zip_updator.py | 56 ++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/astrbot/core/zip_updator.py b/astrbot/core/zip_updator.py index e70173fa5..1abcd7193 100644 --- a/astrbot/core/zip_updator.py +++ b/astrbot/core/zip_updator.py @@ -244,6 +244,35 @@ class RepoZipUpdator: ) ) + def _matches_prerelease_policy( + self, + release: dict, + consider_prerelease: bool, + ) -> bool: + """Return whether a release is allowed by the prerelease policy.""" + return consider_prerelease or not self._is_prerelease_version( + release["tag_name"], + ) + + def _select_release_data( + self, + releases: list, + consider_prerelease: bool, + ) -> dict | None: + """Select the first release allowed by the prerelease policy.""" + return next( + ( + release + for release in releases + if self._matches_prerelease_policy(release, consider_prerelease) + ), + None, + ) + + def _has_newer_version(self, current_version: str, release_version: str) -> bool: + """Return whether the selected release is newer than current version.""" + return self.compare_version(current_version, release_version) < 0 + async def check_update( self, url: str, @@ -251,30 +280,17 @@ class RepoZipUpdator: consider_prerelease: bool = True, ) -> ReleaseInfo | None: update_data = await self.fetch_release_info(url) - current_is_prerelease = self._is_prerelease_version(current_version) - - sel_release_data = None - if consider_prerelease: - tag_name = update_data[0]["tag_name"] - sel_release_data = update_data[0] - else: - for data in update_data: - # 跳过带有 alpha、beta 等预发布标签的版本 - if self._is_prerelease_version(data["tag_name"]): - continue - tag_name = data["tag_name"] - sel_release_data = data - break - - if not sel_release_data or not tag_name: + if not update_data: logger.error("未找到合适的发布版本") return None - if current_is_prerelease and not self._is_prerelease_version(tag_name): - if self.compare_version(current_version, tag_name) >= 0: - return None + sel_release_data = self._select_release_data(update_data, consider_prerelease) + if not sel_release_data: + logger.error("未找到合适的发布版本") + return None - if self.compare_version(current_version, tag_name) >= 0: + tag_name = sel_release_data["tag_name"] + if not self._has_newer_version(current_version, tag_name): return None return ReleaseInfo( version=tag_name,