diff --git a/lite/proxy_lite.py b/lite/proxy_lite.py index eb11dd1..abff749 100644 --- a/lite/proxy_lite.py +++ b/lite/proxy_lite.py @@ -590,6 +590,24 @@ def _set_local_port(port): _settings_save(data) log(f"代理转发端口已保存: {port}(下次开启代理生效)") +def _ver_tuple(v): + """版本号转数字元组:'v0.1.0' -> (0, 1, 0),无法解析的段按 0 处理。""" + parts = [] + for p in str(v).strip().lstrip("vV").split("."): + try: + parts.append(int(p)) + except ValueError: + parts.append(0) + return tuple(parts) + +def _version_newer(latest, current): + """latest 是否比 current 新(逐段数字比较,位数不同补 0)。""" + lt, ct = _ver_tuple(latest), _ver_tuple(current) + n = max(len(lt), len(ct)) + lt += (0,) * (n - len(lt)) + ct += (0,) * (n - len(ct)) + return lt > ct + # 以下模块级取值需在 _data_path 定义之后执行 VERSION = _config_val("version", "999908162319") _TLS_LOCAL_PORT = _port_val() # 本地转发器监听端口(设置 > 内置 config > 1080) @@ -2019,10 +2037,11 @@ class MainWindow(QWidget): if domain == "???": log("更新检查: 未配置节点(nodes.json 域名为空),跳过") return - # 更新链接优先取 config.json 的 update_url,缺失时回退到域名拼接 - url = _config_val("update_url", "") + # 基于 Gitea 仓库 releases API 检查更新;config.json 无 update_url 时用默认地址 + url = str(_config_val("update_url", "") or "").strip() if not url: - url = f"https://{domain}/latest_version.json" + url = ("https://git.bu4.ren/api/v1/repos/RoyirinRosmontis/" + "Private-Proxy/releases/latest") log("正在检查更新...") # 显式走本地转发器隧道,不依赖系统代理状态:默认 opener 读注册表代理设置 # (异常退出残留 127.0.0.1 代理 -> 连接被拒),不识别 PAC 的 AutoConfigURL, @@ -2037,12 +2056,12 @@ class MainWindow(QWidget): finally: _release_forwarder(started_here) info = json.loads(data) - log("客户端认证成功") - self._latest_version = info.get("latest_version", "") - self._download_url = info.get("download_url", "") - log(f"当前版本: {VERSION},最新版本: {self._latest_version}") - if VERSION.startswith("9999"): - log("您当前正在使用 Lite 版") + # 基于 Gitea 仓库 releases API:版本取 tag_name,下载取 exe 附件链接 + self._latest_version = str(info.get("tag_name") or "") + assets = info.get("assets") or [] + self._download_url = (assets[0].get("browser_download_url") or "" + if assets else "") + log(f"当前版本: {VERSION},最新版本: {self._latest_version or '未知'}") except Exception as e: log(f"更新检查失败: {e}") self._latest_version = "" @@ -2053,7 +2072,7 @@ class MainWindow(QWidget): def _on_update_done(self): """更新检查完成后恢复按钮;发现新版本时弹窗询问是否下载。""" self.btn_toggle.setEnabled(True) - if self._latest_version and self._latest_version > VERSION: + if self._latest_version and _version_newer(self._latest_version, VERSION): reply = QMessageBox.question( self, "发现新版本", f"当前版本: {VERSION}\n最新版本: {self._latest_version}\n\n是否下载更新?",