Files
Serendipity 5c4a16dc3a feat(halo-plugin): 新增文章导入、删除和标签分类管理功能
添加从本地 Markdown 文件导入创建文章的功能,支持文件预览和自动发布选项
新增文章删除命令,支持选择性删除 Halo 文章或本地文件
添加标签和分类管理功能,支持创建、编辑和删除操作
更新国际化文案,支持新功能的多种语言界面
扩展服务层以支持文章导入、删除和标签分类管理 API 调用
更新插件版本至 2.1.1 并更新作者信息
2026-04-26 17:23:35 +08:00

2.6 KiB
Raw Permalink Blame History

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

const filePicker = app.createFilePicker();
filePicker.setFilter(file => file.extension === 'md');
filePicker.onChange = async (files) => {
  // 处理选中的文件
};
filePicker.open();

文件读取

const content = await app.vault.read(file);

Frontmatter 解析

参考现有的 src/utils/yaml.ts 实现,或使用 gray-matter 库。

API 端点

POST /apis/uc.api.content.halo.run/v1alpha1/posts

请求体格式与发布功能相同。