# electron ipc api-doc

本文档主要记录主进程和渲染进程的通信约定。

## 命名方式

本项目渲染进程包含两个：字幕窗口和控制窗口，主进程需要分别和两者进行通信。通信命令的命名规则如下：

1. 命令一般由三个关键字组成，由点号隔开。
2. 第一个关键字表示通信发送目标：
   - `config` 表示控制窗口类实例（后端）或控制窗口（前端）
   - `engine` 表示字幕窗口类实例（后端）或字幕窗口（前端）
   - `both` 表示上述对象都有可能成为目标
3. 第二个关键字表示需要修改的对象 / 发生改变的对象，采用小驼峰命名
4. 第三个关键字一般是动词，表示通信发生时对应动作 / 需要进行的操作

根据上面的描述可以看出通信命令一般有两种语义，一种表示要求执行的操作，另一种表示当前发生的事件。

## 前端 <=> 后端

### `both.window.mounted`

**介绍：** 前端窗口挂载完毕，请求最新的配置数据

**发起方：** 前端

**接收方：** 后端

**数据类型：**

- 发送：无数据
- 接收：`FullConfig`

### `control.nativeTheme.get`

**介绍：** 前端获取系统当前的主题

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：**

- 发送：无数据
- 接收：`string`

### `control.folder.select`

**介绍：** 打开文件夹选择器，并将用户选择的文件夹路径返回给前端

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：**

- 发送：无数据
- 接收：`string`

### `control.engine.info`

**介绍：** 获取字幕引擎的资源消耗情况

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：**

- 发送：无数据
- 接收：`EngineInfo`

## 前端 ==> 后端

### `control.uiLanguage.change`

**介绍：** 前端修改字界面语言，将修改同步给后端

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：** `UILanguage`

### `control.uiTheme.change`

**介绍：** 前端修改界面主题，将修改同步给后端

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：** `UITheme`

### `control.uiColor.change`

**介绍：** 前端修改界面主题颜色，将修改同步给后端

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：** `string`

### `control.leftBarWidth.change`

**介绍：** 前端修改边栏宽度，将修改同步给后端

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：** `number`

### `control.captionLog.clear`

**介绍：** 清空字幕记录

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：** 无数据

### `control.styles.change`

**介绍：** 前端修改字幕样式，将修改同步给后端

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：** `Styles`

### `control.styles.reset`

**介绍：** 将字幕样式恢复为默认

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：** 无数据

### `control.controls.change`

**介绍：** 前端修改了字幕引擎配置，将最新配置发送给后端

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：** `Controls`

### `control.captionWindow.activate`

**介绍：** 激活字幕窗口

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：** 无数据

### `control.engine.start`

**介绍：** 启动字幕引擎

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：** 无数据

### `control.engine.stop`

**介绍：** 关闭字幕引擎

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：** 无数据

### `control.engine.forceKill`

**介绍：** 强制关闭启动超时的字幕引擎

**发起方：** 前端控制窗口

**接收方：** 后端控制窗口实例

**数据类型：** 无数据

### `caption.windowHeight.change`

**介绍：** 字幕窗口宽度发生改变

**发起方：** 前端字幕窗口

**接收方：** 后端字幕窗口实例

**数据类型：** `number`

### `caption.pin.set`

**介绍：** 是否将窗口置顶

**发起方：** 前端字幕窗口

**接收方：** 后端字幕窗口实例

**数据类型：** `boolean`

### `caption.controlWindow.activate`

**介绍：** 激活控制窗口

**发起方：** 前端字幕窗口

**接收方：** 后端字幕窗口实例

**数据类型：** 无数据

### `caption.window.close`

**介绍：** 关闭字幕窗口

**发起方：** 前端字幕窗口

**接收方：** 后端字幕窗口实例

**数据类型：** 无数据

## 后端 ==> 前端

### `control.uiLanguage.set`

**介绍：** 后端将最新界面语言发送给前端，前端进行设置

**发起方：** 后端

**接收方：** 字幕窗口

**数据类型：** `UILanguage`

### `control.nativeTheme.change`

**介绍：** 系统主题发生改变

**发起方：** 后端

**接收方：** 前端控制窗口

**数据类型：** `string`

### `control.engine.started`

**介绍：** 引擎启动成功，参数为引擎的进程 ID

**发起方：** 后端

**接收方：** 前端控制窗口

**数据类型：** `number`

### `control.engine.stopped`

**介绍：** 引擎关闭

**发起方：** 后端

**接收方：** 前端控制窗口

**数据类型：** 无数据

### `control.error.occurred`

**介绍：** 发送错误

**发起方：** 后端

**接收方：** 前端控制窗口

**数据类型：** `string`

### `control.controls.set`

**介绍：** 后端将最新字幕引擎配置发送给前端，前端进行设置

**发起方：** 后端

**接收方：** 前端控制窗口

**数据类型：** `Controls`

### `control.softwareLog.add`

**介绍：** 添加一条新的日志数据

**发起方：** 后端

**接收方：** 前端控制窗口

**数据类型：** `SoftwareLog`

### `both.styles.set`

**介绍：** 后端将最新字幕样式发送给前端，前端进行设置

**发起方：** 后端

**接收方：** 前端

**数据类型：** `Styles`

### `both.captionLog.add`

**介绍：** 添加一条新的字幕数据

**发起方：** 后端

**接收方：** 前端

**数据类型：** `CaptionItem`

### `both.captionLog.upd`

**介绍：** 更新最后一条字幕数据

**发起方：** 后端

**接收方：** 前端

**数据类型：** `CaptionItem`

### `both.captionLog.set`

**介绍：** 设置全部的字幕数据

**发起方：** 后端

**接收方：** 前端

**数据类型：** `CaptionItem[]`
