MooTool

Handy tool set for developers

View on GitHub

随手记图片附件与备份

0.6.0 对照 Electron 的 QuickNoteTool.tsxquickNoteAttachments.ts 及测试、quickNoteVaultRepository.ts 实现。图片入口位于保存按钮之后、快速替换之前;使用 macOS 选图面板、剪贴板、原生文本拖放及图片缩放弹窗。

插入与预览

独立存储与副本

图片位于原生版数据目录的 attachments/ 中。文件名使用图片内容的 SHA-256 与规范化扩展名,正文写入 ![image](attachments/<hash>.png) 等相对引用。文件与记录均按内容校验;同一图片重复插入复用文件,不产生重复图片副本。

workspace.json 保存附件记录,正常自动保存不重复编码图片字节。目录使用 0700,附件文件使用 0600。只接受本产品的附件路径和普通文件,拒绝路径穿越及附件目录/文件符号链接。

重命名、移动、复制文档保留稳定图片引用。删除原文档不会损坏副本;删除引用或撤销插图时也不立即删除图片,以保留重做能力。旧附件文件暂不自动清理;恢复旧备份同样保留原目录内已有文件。读取或写入中止后可能留下尚未登记的文件,这些文件不会被预览或导出备份。

原生版不共享 Electron 的附件目录、文件元数据、Git 仓库、用户数据或安装标识。所有图片导入都是复制,编辑笔记不会改写来源图片。

导出与备份恢复

“更多”和文档右键菜单增加 导出文档及附件…:选择目标位置后创建新文件夹,包含 .md 正文和被引用的 attachments/ 文件,可整体移动或分享。已有同名文件夹增加数字后缀;源文件和已有导出不会被覆盖。图片引用缺失时整次导出失败,不留下部分导出文件夹。代码块、行内代码和转义后的图片示例不作为实际附件引用。普通文本导出仍只导出正文。

设置中的 导出备份 将工作区及全部已登记附件的字节打包在一个原生版 JSON 备份里。可将备份导入另一台机器或另一份原生测试目录,无需原始图片文件。导入备份 确认后,先保存当前工作区与附件副本,再校验待恢复的图片内容、大小、摘要和记录;全部通过后才安装图片并原子替换工作区文件。错误备份不会覆盖现有工作区。

0.1.0–0.5.0 不含附件的工作区与备份可直接读取和恢复。带附件记录但没有图片字节的 workspace.json 不是完整便携备份,导入时会明确拒绝;应使用“导出备份”。如果已登记图片在磁盘上丢失或损坏,完整备份会报错,不静默忽略图片。

限制与尚未对齐部分

验证

核心用例检查选区/换行、图片有效性、路径/符号链接、内容校验、私有权限、旧数据兼容、跨目录备份恢复、失败时工作区不变、复制后删除原文档、完整导出与同名保护。

原生验收打开并取消真实选图面板,使用独立测试剪贴板调用原生粘贴处理,检查连续图片插入、文件批量插入、撤销/重做、过期文档保护、图片与缩放弹窗、缺失占位及实际恢复。应用窗口内的鼠标事件验证分隔条拖动与切换视图后的比例恢复;另外检查分栏实际宽度及图片水平边界。文件拖放的插入回调已覆盖;不将回调测试等同于完整 Finder 拖动手势验收。所有验收使用临时工作区,不读取或修改用户的真实笔记和剪贴板。