feat(halo-plugin): 新增文章导入、删除和标签分类管理功能
添加从本地 Markdown 文件导入创建文章的功能,支持文件预览和自动发布选项 新增文章删除命令,支持选择性删除 Halo 文章或本地文件 添加标签和分类管理功能,支持创建、编辑和删除操作 更新国际化文案,支持新功能的多种语言界面 扩展服务层以支持文章导入、删除和标签分类管理 API 调用 更新插件版本至 2.1.1 并更新作者信息
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
# Markdown 文件导入功能检查清单
|
||||
|
||||
## 代码实现检查
|
||||
|
||||
- [ ] `src/commands/import-markdown.ts` 文件创建完成
|
||||
- [ ] 文件选择器正确实现(仅显示 .md 文件)
|
||||
- [ ] 文件读取和解析逻辑正确
|
||||
- [ ] 文章创建逻辑正确调用 Halo API
|
||||
- [ ] `src/modals/file-preview-modal.ts` 文件创建完成
|
||||
- [ ] 文件内容预览正确显示
|
||||
- [ ] frontmatter 信息正确显示
|
||||
- [ ] 导入/取消按钮功能正常
|
||||
- [ ] "导入后发布"选项功能正常
|
||||
|
||||
## 集成检查
|
||||
|
||||
- [ ] `src/main.ts` 中命令注册完成
|
||||
- [ ] 命令名称符合国际化规范
|
||||
- [ ] 命令在命令面板中可见
|
||||
|
||||
## 国际化检查
|
||||
|
||||
- [ ] 英文文案添加完成
|
||||
- [ ] 简体中文文案添加完成
|
||||
- [ ] 繁体中文文案添加完成
|
||||
|
||||
## 测试检查
|
||||
|
||||
- [ ] 编译通过无错误
|
||||
- [ ] 插件文件正确复制到 Obsidian 插件目录
|
||||
- [ ] 文件选择器测试通过
|
||||
- [ ] 导入功能测试通过(创建草稿)
|
||||
- [ ] 导入功能测试通过(导入并发布)
|
||||
@@ -0,0 +1,96 @@
|
||||
# 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
|
||||
```
|
||||
|
||||
请求体格式与发布功能相同。
|
||||
@@ -0,0 +1,47 @@
|
||||
# Markdown 文件导入功能任务清单
|
||||
|
||||
## 任务列表
|
||||
|
||||
- [ ] 任务 1:创建导入命令模块 `src/commands/import-markdown.ts`
|
||||
- [ ] 子任务 1.1:实现 Obsidian 文件选择器调用
|
||||
- [ ] 子任务 1.2:实现文件读取和解析
|
||||
- [ ] 子任务 1.3:实现文章创建逻辑
|
||||
|
||||
- [ ] 任务 2:创建文件预览弹窗 `src/modals/file-preview-modal.ts`
|
||||
- [ ] 子任务 2.1:显示文件内容预览
|
||||
- [ ] 子任务 2.2:显示 frontmatter 信息
|
||||
- [ ] 子任务 2.3:添加导入/取消按钮
|
||||
- [ ] 子任务 2.4:添加"导入后发布"选项
|
||||
|
||||
- [ ] 任务 3:更新主程序注册命令 `src/main.ts`
|
||||
- [ ] 子任务 3.1:导入新命令模块
|
||||
- [ ] 子任务 3.2:注册"从 Markdown 文件导入"命令
|
||||
|
||||
- [ ] 任务 4:添加国际化文案
|
||||
- [ ] 子任务 4.1:更新英文文案 `src/i18n/locales/en.json`
|
||||
- [ ] 子任务 4.2:更新简体中文文案 `src/i18n/locales/zh-cn.json`
|
||||
- [ ] 子任务 4.3:更新繁体中文文案 `src/i18n/locales/zh-tw.json`
|
||||
|
||||
- [ ] 任务 5:编译和测试
|
||||
- [ ] 子任务 5.1:运行 `pnpm build` 确保编译通过
|
||||
- [ ] 子任务 5.2:复制编译产物到插件目录
|
||||
- [ ] 子任务 5.3:手动测试导入功能
|
||||
|
||||
---
|
||||
|
||||
## 任务依赖关系
|
||||
|
||||
- [任务 2] 和 [任务 3] 可并行开发
|
||||
- [任务 1] 依赖 [任务 2] 完成
|
||||
- [任务 4] 可与任何任务并行
|
||||
- [任务 5] 需要 [任务 1]、[任务 3] 完成
|
||||
|
||||
---
|
||||
|
||||
## 实现顺序建议
|
||||
|
||||
1. 先完成 [任务 2](文件预览弹窗)- 核心 UI
|
||||
2. 再完成 [任务 1](导入命令模块)- 核心逻辑
|
||||
3. 然后完成 [任务 3](注册命令)
|
||||
4. [任务 4] 可与 [任务 1] 并行
|
||||
5. 最后 [任务 5](测试)
|
||||
Reference in New Issue
Block a user