Skip to content

🐛 脚本同步设置改为即时保存#1615

Merged
CodFrm merged 3 commits into
mainfrom
fix/1614-cloud-sync-auto-save
Jul 20, 2026
Merged

🐛 脚本同步设置改为即时保存#1615
CodFrm merged 3 commits into
mainfrom
fix/1614-cloud-sync-auto-save

Conversation

@CodFrm

@CodFrm CodFrm commented Jul 18, 2026

Copy link
Copy Markdown
Member

Checklist / 检查清单

  • Fixes mentioned issues / 修复已提及的问题
  • Code reviewed by human / 代码通过人工检查
  • Changes tested / 已完成测试

Description / 描述

背景

Script Sync 的 Sync Delete、Sync Status、文件系统类型和连接参数此前只更新页面草稿,离开页面前还必须点击位置不明显的 Save;这会让用户误以为勾选已经生效。启用同步也缺少明确的控件级校验状态与完整的异步竞态保护。

本次改动

  • 将已保存的 cloud_sync 配置作为界面唯一真相;Sync Delete、Sync Status、filesystem 类型和参数变更立即持久化。
  • 从关闭状态启用同步时,保持 checkbox 未勾选并进入 disabled / aria-busy / spinner 校验状态,通过现有 FileSystemFactory.create 生产路径验证当前 provider 与参数。
  • 仅在校验成功且配置仍是发起校验时的同一版本时保存 enable=true;失败时显示具体错误并保持 enable=false
  • 关闭同步直接保存 enable=false,不执行连接校验。
  • 删除 Save 按钮;保留“立即同步”,并继续仅按已保存的 enable 状态门控。

实现考虑

  • 复用现有 useSystemConfig("cloud_sync") 外部存储适配器,确保当前页面写入和其他上下文的 systemConfig 更新都会刷新 UI,不再维护未保存 draft。
  • 每次启用校验持有独立请求令牌;普通配置变化、外部配置更新、新请求或组件卸载都会淘汰旧令牌。校验成功提交前还会重新读取 systemConfig 做版本检查,避免旧结果覆盖新意图。
  • provider 授权仍由现有 FileSystemFactory.create / FileSystemParams 流程负责,没有新增或伪造 OAuth 路径。

已知限制

  • 本地真实扩展验证没有使用外部 provider 凭据,因此未手工完成真实 OAuth/账号的成功授权;成功提交路径由组件测试覆盖,浏览器验证使用受控 WebDAV 401 覆盖生产失败路径。
  • 现有 filesystem API 没有通用 AbortSignal;配置变化后已启动的 provider 网络/授权动作本身可能继续完成,但其旧结果会被忽略,不会写回配置或弹出过时结果。

建议审查重点

  • 开启校验期间 checkbox、状态条和“立即同步”是否始终只反映已保存的 enable。
  • 配置变化、systemConfig 外部变化和组件卸载后,旧成功/失败结果是否都无法影响新状态。
  • WebDAV 与 OAuth provider 是否仍完整走现有 factory/参数授权路径。

关联

Fixes #1614

验证

  • pnpm exec vitest run --no-coverage --reporter=verbose src/pages/options/routes/Setting/sections/SyncSection.test.tsx — 1 file / 18 tests passed。
  • pnpm run test:ci — 306 files / 3374 tests passed。
  • pnpm run lint — Prettier、TypeScript 和全仓 ESLint passed。
  • pnpm run build — production build passed;保留现有的 4 组 Rspack 性能/Monaco dynamic require warnings,无构建错误。
  • CI=1 pnpm exec playwright test --config playwright.scratch.config.ts -g "Script Sync settings auto-save" — 真实 production build 加载验证 1 test passed;覆盖普通配置落库、Save 移除、loading/失败回滚、关闭不校验和“立即同步”门控。

Screenshots / 截图

未附远端截图。一次性真实扩展验证按仓库规范将截图与报告保存在 git-ignored 的 test-results/verify/script-sync-auto-save/,未提交验证产物。

@CodFrm CodFrm changed the title 脚本同步设置改为即时保存 🐛 脚本同步设置改为即时保存 Jul 20, 2026
@CodFrm
CodFrm merged commit 74a9814 into main Jul 20, 2026
10 checks passed
@CodFrm
CodFrm deleted the fix/1614-cloud-sync-auto-save branch July 20, 2026 02:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Script Sync 勾選選項應該要直接儲存

1 participant