# 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
```

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