logo
0
0
WeChat Login
XiaoLaptop<58349131+bsc5622@users.noreply.github.com>
fix img dir

Obsidian to Quartz

我的Obsidian使用单一仓库来管理所有的文章,所以当需要发表文章的时候,我希望能有插件可以把文章转换到Quartz的目录下。

这个插件就是帮助我方便的可以对当前仓库obsidian文档一件更新到Quartz仓库。

功能特性

  • 配置管理:用户可以配置目标Quartz仓库的路径
    • 文档路径配置:所有转换后的文档将存放在此路径下
    • 图片路径配置:所有转换后的图片将存放在此路径下
  • 一键转换:通过命令面板执行 Quartz: Send To Content Vault 命令
  • 智能处理:可选择是否同时处理引用的文档和图片
  • 链接扁平化:自动将嵌套的文档和图片链接扁平化处理
  • 批量复制:自动复制所有相关的文档和图片到目标位置

设计架构

核心组件

  1. ObsidianToQuartzPlugin:主插件类,负责插件生命周期管理
  2. ObsidianToQuartzSettingTab:设置界面,提供配置选项
  3. ConfirmIncludeReferencesModal:确认对话框,让用户选择处理范围
  4. FileSystemHelper:文件系统操作辅助类,处理文件读写

处理流程

  1. 用户触发:通过命令面板或快捷键触发转换命令
  2. 配置检查:验证用户是否已配置必要的路径
  3. 确认处理范围:弹出对话框让用户选择是否包含引用文档
  4. 内容处理
    • 解析文档中的图片链接 ![[image.png]]
    • 解析文档中的文档链接 [[document.md]]
    • 扁平化所有链接路径
  5. 文件复制
    • 复制图片到配置的图片路径
    • 复制文档到配置的文档路径
    • 递归处理引用的文档(如果用户选择)

安装和使用

开发环境设置

  1. 克隆此仓库到你的Obsidian插件目录
  2. 安装依赖:
    npm install
  3. 构建插件:
    npm run build

用户使用指南

  1. 配置路径

    • 打开Obsidian设置
    • 找到"Obsidian to Quartz"插件设置
    • 配置文档存放路径(如:/path/to/quartz/content/Articles
    • 配置图片存放路径(如:/path/to/quartz/content/images
  2. 转换文档

    • 打开要转换的文档
    • 使用命令面板(Ctrl/Cmd + P)
    • 搜索并执行 Quartz: Send To Content Vault
    • 选择是否包含引用的文档
    • 等待处理完成

配置说明

  • 文档路径:转换后的Markdown文档将存放在此路径下,文件将使用扁平化命名
  • 图片路径:转换后的图片文件将存放在此路径下,保持原始文件名

链接处理规则

  • 图片链接![[folder/image.png]]![[images/image.png]](包含配置的文件夹路径)
  • 文档链接[[folder/document.md]][[Articles/document.md]](包含配置的文件夹名称)
  • 引用处理:如果选择包含引用,会递归处理所有引用的文档

链接路径处理

插件会根据配置的路径自动生成正确的链接路径:

图片链接路径提取规则:

  • 从配置的图片路径中提取最后两个文件夹名称
  • 例如:配置路径 D:\quartz\content\images → 生成链接路径 images
  • 例如:配置路径 /home/user/site/assets/images → 生成链接路径 images

文档链接路径提取规则:

  • 从配置的文档路径中提取最后一个文件夹名称
  • 例如:配置路径 D:\quartz\content\Articles → 生成链接路径 Articles
  • 例如:配置路径 /home/user/site/content/Posts → 生成链接路径 Posts

文件覆盖行为:

  • 如果目标位置存在同名文件,插件会自动覆盖原文件
  • 建议在使用前备份重要文件

技术实现

文件结构

obsidian-to-quartz/ ├── main.ts # 主插件文件 ├── file-system-helper.ts # 文件系统辅助类 ├── manifest.json # 插件清单 ├── package.json # 项目配置 ├── tsconfig.json # TypeScript配置 ├── esbuild.config.mjs # 构建配置 └── versions.json # 版本信息

核心功能

  • 链接解析:使用正则表达式解析Obsidian的链接语法
  • 文件复制:支持文本和二进制文件的复制
  • 路径处理:跨平台路径处理,支持扁平化命名
  • 错误处理:完善的错误处理和用户提示

注意事项

  • 插件需要用户手动配置目标路径
  • 外部文件系统写入可能受到Obsidian安全限制
  • 建议在使用前备份重要文档
  • 大量文档处理时可能需要较长时间

开发要求

  • 参考 Obsidian示例插件 进行开发
  • 添加详细的中文注释
  • 遵循TypeScript最佳实践
  • 提供完善的错误处理机制