fix: stabilize local attachment icons and office proxy urls

This commit is contained in:
lix-2026
2026-05-26 09:44:35 +08:00
parent 0a15595066
commit 8cd8b44db3
11 changed files with 564 additions and 14 deletions
+22
View File
@@ -68,4 +68,26 @@
- 系统性后续:
- 当前修复覆盖“选中文本删除本地附件链接”的高频路径。块菜单删除、拖拽重排、折叠标题转换等仍有 `set_content`/HTML 整文替换路径,后续应拆一个 editor command history 设计,把块级删除/重排统一迁移到 Tiptap transaction/command,而不是继续扩散整文替换。
5,md文件上传后刷新前面的黑色方块会变成灰色:/mnt/Data1T/mnote/tmp/image copy 80.png/mnt/Data1T/mnote/tmp/image copy 81.png
处理记录(2026-05-26):
- 归类:`05-editor-mainline`,本质是本地 Markdown 上传附件插入后,Tiptap DOM、document session 保存、刷新后附件增强三者之间的时序合同不完整。
- CodeGraph 定位:拆分后可直接从 `local-upload-runtime.js::insertUploadedAssetIntoEditor``sidebar-attachment-open-runtime.js::enhanceEditorAttachmentLink``document-editor-adapter-runtime.js::handleSessionChange``document-session-runtime.js::persistSession` 定位,不再需要在 `layout.rs` 大型 raw string 中翻找。
- 根因:
- 上传插入成功后,链接只进入当前 Tiptap DOM,没有稳定触发 local-folder document save,刷新后会从旧 Markdown 重建。
- 刷新后 `/api/local-folder/files/open` 本地链接增强存在首屏时序竞态,普通 local open 链接可能暂时只有灰色通用文件 badge。
- 修复:
- `rust/crates/mnote-web/browser/local-upload-runtime.js`:上传插入后派发 Tiptap bridge change,并对 local-folder 上传直接按现有 conversion runtime 转为 `editorBlocks``/api/documents/save`;保存前登记 self-change suppression,避免 watcher 把自写入误报为外部冲突。
- `rust/crates/mnote-web/browser/sidebar-attachment-open-runtime.js`:本地 open 链接也先补 `data-mnote-attachment-link``data-asset-id` 和类型 class,再做存在性刷新;并增加初始附件增强重扫。
- `rust/crates/mnote-web/browser/document-tiptap-conversion-runtime.js`:刷新时从本地 open URL 的 `path` 重新推导附件类型,在 Markdown → Tiptap link mark 边界直接补 `mnote-uploaded-attachment-code` 等类型 classCSS 只消费 class,不再用 `.md` href 颜色选择器兜底。
- `scripts/task491-local-md-attachment-icon-refresh-smoke.js`:新增窄浏览器回归,覆盖上传 md 附件、写入 Markdown、刷新后仍保持黑色 md 附件图标。
- `scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js`:第 1 项补充刷新前后 md 附件图标断言,必须恢复 `mnote-uploaded-attachment-code` class,不再接受单纯 `::before` 黑色背景。
- 验证:
- `node scripts/task491-local-md-attachment-icon-refresh-smoke.js` 通过。
- `node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js``editor-upload-to-page-resource-dir` 通过;该宽脚本仍有既有 `broken-link-after-real-file-delete``editor-delete-one-attachment-preserves-adjacent` 失败,非本条阻塞。
6. 当前office文件本地可以打开,我们当前使用sakura frp映射3000端口至:https://www.aichem.dpdns.org 后,发现pdf可以正常打开,但onlyoffice打不开了,报错为:ONLYOFFICE 加载失败{"target":{"frameOrigin":"https://www.aichem.dpdns.org"},"data":{"errorCode":-4,"errorDescription":"下载失败"}}。请检查原因,同时要兼容未来更换域名。
处理记录(2026-05-26):
- 归类:`05-editor-mainline` / OnlyOffice transport,问题是 DocumentServer 下载地址随浏览器公网域名变化。
- 根因:OnlyOffice 页面在非 localhost 访问时把 `proxyOrigin` 设为 `location.origin`,导致 DocumentServer 去拉 `https://www.aichem.dpdns.org/api/onlyoffice/proxy?...`;公网映射域名对 DocumentServer 不一定可达,触发 `errorCode=-4 下载失败`
- 修复:`rust/crates/mnote-web/src/routes/onlyoffice.rs``proxyOrigin``callbackOrigin` 固定使用 `documentUrlBase`,即 `ONLYOFFICE_DOCUMENT_URL_BASE` / 内部可达 base,不再依赖浏览器当前域名;未来换 FRP 域名不影响 DocumentServer 回源。
- 验证:`cargo test --manifest-path rust/Cargo.toml -p mnote-web onlyoffice_page_exposes_documentserver_fetch_base_for_local_files -- --test-threads=1` 通过。