Skip to content

拖拽导入逻辑层

系统概览

拖拽导入纯逻辑层(ADR-177)。将 dropped File / 路径落地为模型/动作加载请求。 不含 DOM 事件注册(仍在 events.tsinitDropHandler),只暴露纯异步函数,便于单测 mock 依赖后验证浏览器分支语义。路径语义对齐桌面(绝对路径)和浏览器(IndexedDB)分支。

核心职责

  • drop-import.ts — 拖拽文件落地、分支路由、加载触发。

对外 API(节选)

  • handleDropFile(path, zipBytes?) — 处理已落地的文件路径。
    • zip + zipBytes:浏览器分支,ExtractZip 读 IndexedDB 解压
    • zip 无 bytes:桌面分支,ImportZip 由 Go 落盘
    • pmx:loadManager.load({ kind: 'actor', path })
    • vmd:loadManager.load({ kind: 'vmd', path })

与其他子系统关系

  • 加载管理:./load-manager
  • Wails 绑定:ImportZip / ExtractZip./wails-bindings)。
  • IndexedDB:idbSet / saveModel./backend/idb)。
  • 资源库刷新:../menus/library.refreshLibrary
  • 状态提示:setStatus / formatError./config)。
  • 安全调用:safeCallAsync./safe-call)。

不变量

  • 纯逻辑层:不含 DOM 事件注册,便于单测。
  • 分支路由:桌面用绝对路径,浏览器用 IndexedDB 键。
  • 依赖精简:仅依赖 8 个数据/状态模块,单测成本可控。