优化864登录三态展示并更新适配路线文档

This commit is contained in:
liuwei
2026-05-07 12:28:59 +08:00
parent 539bebd58b
commit 8579b7ec27
5 changed files with 194 additions and 3 deletions

View File

@@ -103,12 +103,31 @@ class Server864RuntimeMixin:
await self._refresh_identity_from_profile(logger=logger)
await self._safe_callback(
on_login_qr_cleared,
{"status": "logged_in", "status_text": "已检测到现有登录态"},
{
"status": "logged_in",
"status_text": "已检测到现有登录态",
"provider_name": "server_864",
"provider_stage": "logged_in",
"connection_ready": True,
"login_required": False,
},
logger=logger,
callback_name="on_login_qr_cleared",
)
return
# 先探测一次 864 当前阶段,让 Dashboard 能直接区分“等服务端准备”和“需要扫码”:
# 1. 864 的未登录态并不只有一种,部分场景其实是远端连接对象还没建好;
# 2. 若首页始终只显示“未登录”,运维很难判断下一步是等服务端还是去扫码;
# 3. 这里把差异压缩成轻量阶段字段,供前端直接展示,不改动核心登录流程。
login_stage_snapshot = await self._probe_login_stage()
await self._safe_callback(
on_login_qr_update,
login_stage_snapshot,
logger=logger,
callback_name="on_login_qr_update",
)
uuid, url = await self.get_qr_code(print_qr=True)
scan_url = f"http://weixin.qq.com/x/{uuid}" if uuid else ""
await self._safe_callback(
@@ -121,6 +140,10 @@ class Server864RuntimeMixin:
"status": "waiting",
"status_text": "等待扫码登录",
"login_source": "fresh_qr",
"provider_name": "server_864",
"provider_stage": "waiting_scan",
"connection_ready": False,
"login_required": True,
},
logger=logger,
callback_name="on_login_qr_update",
@@ -131,7 +154,15 @@ class Server864RuntimeMixin:
if is_logged_in:
await self._safe_callback(
on_login_qr_cleared,
{"status": "confirmed", "status_text": "扫码登录成功", "uuid": uuid},
{
"status": "confirmed",
"status_text": "扫码登录成功",
"uuid": uuid,
"provider_name": "server_864",
"provider_stage": "logged_in",
"connection_ready": True,
"login_required": False,
},
logger=logger,
callback_name="on_login_qr_cleared",
)
@@ -158,6 +189,10 @@ class Server864RuntimeMixin:
"status": "waiting",
"status_text": str(login_status.get("msg") or login_status.get("loginState") or "等待扫码登录"),
"login_source": "fresh_qr",
"provider_name": "server_864",
"provider_stage": "waiting_scan" if uuid else "login_required",
"connection_ready": False,
"login_required": True,
},
logger=logger,
callback_name="on_login_qr_update",
@@ -180,6 +215,10 @@ class Server864RuntimeMixin:
"status": "waiting",
"status_text": "二维码已刷新,等待扫码登录",
"login_source": "refresh_qr",
"provider_name": "server_864",
"provider_stage": "waiting_scan",
"connection_ready": False,
"login_required": True,
},
logger=logger,
callback_name="on_login_qr_update",
@@ -196,6 +235,64 @@ class Server864RuntimeMixin:
logger=logger,
)
async def _probe_login_stage(self) -> dict[str, Any]:
"""探测 864 当前登录阶段,供 Dashboard 展示更准确的运维状态。"""
default_payload = {
"status": "waiting",
"status_text": "等待扫码登录",
"login_source": "fresh_qr",
"provider_name": "server_864",
"provider_stage": "login_required",
"connection_ready": False,
"login_required": True,
}
try:
login_status = await self.get_login_status(auto_login=False)
except Exception as e:
error_message = str(e).strip()
if "该链接不存在" in error_message:
return {
**default_payload,
"status_text": "864 服务端连接尚未建立,等待创建登录连接",
"provider_stage": "connection_pending",
"login_required": False,
}
if "重新登录" in error_message or "未登录" in error_message:
return {
**default_payload,
"status_text": error_message or "当前登录态已失效,等待重新扫码登录",
}
return {
**default_payload,
"status": "unavailable",
"status_text": error_message or "864 登录状态暂不可用",
"provider_stage": "status_unavailable",
}
if isinstance(login_status, dict):
login_message = str(
login_status.get("msg")
or login_status.get("message")
or login_status.get("loginState")
or ""
).strip()
if "在线" in login_message or str(login_status.get("loginState", "")).strip().lower() == "online":
return {
"status": "logged_in",
"status_text": "已检测到现有登录态",
"login_source": "runtime_state",
"provider_name": "server_864",
"provider_stage": "logged_in",
"connection_ready": True,
"login_required": False,
}
if "重新登录" in login_message or "未登录" in login_message:
return {
**default_payload,
"status_text": login_message or "当前登录态已失效,等待重新扫码登录",
}
return default_payload
async def _wait_init_ready(self, *, logger) -> None:
"""等待 864 server 侧初始化完成。"""
for _ in range(30):