## 🎵 自定义音源API配置

现在支持通过导入一个简单的 JSON 配置文件来对接第三方的音乐解析 API。这将提供极大的灵活性，可以接入任意第三方音源。

### 如何使用

1.  前往 **设置 -> 播放设置 -> 音源设置**。
2.  在 **自定义 API 设置** 区域，点击 **“导入 JSON 配置”** 按钮。
3.  选择你已经编写好的 `xxx.json` 配置文件。
4.  导入成功后，程序将优先使用你的自定义 API 进行解析。

### JSON 配置文件格式说明

导入的配置文件必须是一个合法的 JSON 文件，并包含以下字段：

| 字段名            | 类型     | 是否必须 | 描述                                                                                                                        |
| ----------------- | -------- | -------- | --------------------------------------------------------------------------------------------------------------------------- |
| `name`            | `string` | 是       | API 名称，将显示在应用的 UI 界面上。                                                                                        |
| `apiUrl`          | `string` | 是       | API 的基础请求地址。                                                                                                        |
| `method`          | `string` | 否       | HTTP 请求方法。可以是 `"GET"` 或 `"POST"`。**如果省略，默认为 "GET"**。                                                     |
| `params`          | `object` | 是       | 请求时需要发送的参数。对于 `GET` 请求，它们会作为查询字符串；对于 `POST` 请求，它们会作为请求体。                           |
| `qualityMapping`  | `object` | 否       | **音质映射表**。用于将应用内部的音质值（如 `"lossless"`）翻译成你的 API 需要的特定值。如果省略，则直接使用应用内部值。      |
| `responseUrlPath` | `string` | 是       | **URL提取路径**。用于从 API 返回的 JSON 响应中找到最终可播放的音乐链接。支持点 `.` 和方括号 `[]` 语法来访问嵌套对象和数组。 |

#### 占位符

在 `params` 对象的值中，你可以使用以下占位符，程序在请求时会自动替换它们：

- `{songId}`: 将被替换为当前歌曲的 ID。
- `{quality}`: 将被替换为当前用户设置的音质字符串 (例如, `"higher"`, `"lossless"`)。

#### 音质值列表

应用内部使用的音质值如下，你可以在 `qualityMapping` 中使用它们作为**键**：
`standard`, `higher`, `exhigh`, `lossless`, `hires`, `jyeffect`, `sky`, `dolby`, `jymaster`

### 示例

假设有一个 API 如下：
`https://api.example.com/music?song_id=12345&bitrate=320000`
它返回的 JSON 是：
`{ "code": 200, "data": { "play_url": "http://..." } }`

那么对应的 JSON 配置文件应该是：

```json
{
  "name": "Example API",
  "apiUrl": "https://api.example.com/music",
  "method": "GET",
  "params": {
    "song_id": "{songId}",
    "bitrate": "{quality}"
  },
  "qualityMapping": {
    "higher": "128000",
    "exhigh": "320000",
    "lossless": "999000"
  },
  "responseUrlPath": "data.play_url"
}
```
