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

96 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```
请求体格式与发布功能相同。