fix(editor): ignore logistics toasts during cover upload

This commit is contained in:
chengma
2026-07-27 16:18:54 +08:00
parent b08a6fed73
commit 0d1bbab8f8
4 changed files with 86 additions and 12 deletions
+43 -2
View File
@@ -37,6 +37,27 @@ LEGACY_ITEMBOX_XPATH = (
COVER_FOREGROUND_RECOVERY_TIMEOUT_SECONDS = 120
COVER_FOREGROUND_UPLOAD_RECOVERY_REASONS = {"UPLOAD_STILL_PROCESSING", "UPLOAD_TIMEOUT"}
COVER_FOREGROUND_DRAG_RECOVERY_REASONS = {"DRAG_NOT_FIRST", "NEW_IMAGE_NOT_FOUND"}
UPLOAD_TOAST_CONTEXT_TOKENS = (
"圖片",
"图片",
"封面",
"照片",
"相片",
"圖像",
"图像",
"image",
"photo",
"cover",
"upload",
"上傳",
"上传",
"檔案",
"文件",
"file",
"重複",
"重复",
"duplicate",
)
LOGIN_PATH_MARKERS = (
"/login",
@@ -134,7 +155,7 @@ JS_UPLOAD_STATE = (
"var upload=cmMainUploadInput(image);var uploadBox=cmMainUploadBox(image);"
"var busy=manager?[].slice.call(manager.querySelectorAll('[class*=loading],[class*=Loading],[class*=spinner],[class*=Spinner],[class*=progress],[class*=Progress],[class*=uploading],[class*=Uploading]')).filter(visible):[];"
"var errRe=/(失敗|失败|錯誤|错误|不支援|不支持|格式|大小|尺寸|超過|超过|重複|重复|duplicate|error|fail|invalid|unsupported)/i;"
"var uploadRe=/(圖片|图片|封面|照片|相片|圖像|图像|image|photo|cover|upload|上傳|上传|檔案|文件|file|格式|大小|尺寸|像素|解析度|分辨率|超過|超过|重複|重复|duplicate)/i;"
"var uploadRe=/(圖片|图片|封面|照片|相片|圖像|图像|image|photo|cover|upload|上傳|上传|檔案|文件|file|重複|重复|duplicate)/i;"
"var texts=manager?[].slice.call(manager.querySelectorAll('*')).filter(visible).map(text).filter(Boolean):[];"
"var errors=texts.filter(function(t){return errRe.test(t);}).slice(0,8);"
"var roots=[].slice.call(document.querySelectorAll('.eds-modal__content,.eds-modal__box,[role=dialog]')).filter(visible);"
@@ -656,8 +677,28 @@ def _image_rects(cdp):
return _json_value(cdp, JS_RECTS, default=[]) or []
def _is_upload_error_text(value):
text = str(value or "").strip().lower()
return bool(text) and any(token in text for token in UPLOAD_TOAST_CONTEXT_TOKENS)
def _normalize_upload_state(state):
normalized = dict(state or {})
candidates = []
for key in ("page_error_toasts", "error_toasts"):
for value in normalized.get(key) or []:
if value not in candidates:
candidates.append(value)
normalized["error_toasts"] = [
value for value in candidates if _is_upload_error_text(value)
][:8]
return normalized
def _upload_state(cdp):
return _json_value(cdp, JS_UPLOAD_STATE, default={}) or {}
return _normalize_upload_state(
_json_value(cdp, JS_UPLOAD_STATE, default={}) or {}
)
def _click_upload_tile(cdp):