# Markdown 文件导入功能规格说明 ## Why 当前 Obsidian Halo 插件只支持从 Obsidian 发布文章到 Halo,但没有提供从本地 Markdown 文件导入创建文章的功能。用户可能希望: 1. 直接从文件系统导入已存在的 Markdown 文件 2. 从其他平台迁移文章时批量导入 3. 快速创建新文章时选择本地文件而非在编辑器中编写 ## What Changes - 新增命令:直接从 Markdown 文件导入创建 Halo 文章 - 新增文件选择器:支持选择本地 .md 文件 - 新增预览功能:导入前预览文件内容和 frontmatter - 新增选项:导入时是否立即发布 ## Impact - Affected specs: - 文章发布功能:提供新的文章创建入口 - 设置功能:可能需要添加导入相关配置 - Affected code: - 新增 `src/commands/import-markdown.ts`:导入命令 - 新增 `src/modals/file-preview-modal.ts`:文件预览弹窗 - 修改 `src/main.ts`:注册新命令 - 修改 `src/i18n/locales/*.json`:国际化文案 ## ADDED Requirements ### Requirement: 从 Markdown 文件导入 系统 SHALL 提供从本地 Markdown 文件导入创建 Halo 文章的功能。 #### Scenario: 选择文件导入 - **WHEN** 用户执行"从 Markdown 文件导入"命令 - **THEN** 系统显示文件选择器,允许用户选择 .md 文件 #### Scenario: 预览和确认 - **WHEN** 用户选择了一个 Markdown 文件 - **THEN** 系统显示文件内容预览(标题、内容摘要、frontmatter) - **AND** 显示"导入"和"取消"按钮 #### Scenario: 导入成功 - **WHEN** 用户点击"导入"按钮 - **THEN** 系统读取文件内容 - **AND** 解析 frontmatter 和正文 - **AND** 调用 Halo API 创建文章 - **AND** 显示导入成功通知 #### Scenario: 导入选项 - **WHEN** 用户可以勾选"导入后立即发布"选项 - **THEN** 文章创建后自动发布 ## MODIFIED Requirements ### Requirement: 命令面板扩展 现有命令列表扩展,新增: - `Halo: 从 Markdown 文件导入` - 打开文件选择器进行导入 ## REMOVED Requirements 无 --- ## 技术实现细节 ### Obsidian 文件选择器 API ```typescript const filePicker = app.createFilePicker(); filePicker.setFilter(file => file.extension === 'md'); filePicker.onChange = async (files) => { // 处理选中的文件 }; filePicker.open(); ``` ### 文件读取 ```typescript const content = await app.vault.read(file); ``` ### Frontmatter 解析 参考现有的 `src/utils/yaml.ts` 实现,或使用 gray-matter 库。 ### API 端点 ``` POST /apis/uc.api.content.halo.run/v1alpha1/posts ``` 请求体格式与发布功能相同。