优化864登录三态展示并更新适配路线文档
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user