命令系统是 ChatGPT 桌面应用程序的核心架构组件,它实现了前端 (React) 和后端 (Rust) 之间的无缝通信。它为基于 Web 的 UI 提供了一种结构化的方式,通过 Tauri 的 Command API 调用原生功能,使应用程序能够执行诸如控制 Webview、管理窗口状态、处理用户输入以及更改应用程序设置等操作。
有关整体系统架构的信息,请参阅 系统架构。
命令系统遵循请求-响应模式,其中前端组件调用命名命令,这些命令由后端中注册的 Rust 函数处理。这种架构实现了 UI 和原生功能之间的清晰分离。
来源
命令在 Rust 中被定义为使用 Tauri 的 #[command] 属性修饰的函数。这些命令使用 invoke_handler 方法和 tauri::generate_handler! 注册到 Tauri 应用程序构建器中。
来源
应用程序的命令可以分为几个功能组
控制 Webview 导航和状态的命令
| 命令 | 目的 | 来源 |
|---|---|---|
view_reload | 重新加载主 Webview 中的当前页面 | src-tauri/src/core/cmd.rs8-16 |
view_url | 获取主 Webview 的当前 URL | src-tauri/src/core/cmd.rs18-26 |
view_go_forward | 向前导航到主 Webview | src-tauri/src/core/cmd.rs28-36 |
view_go_back | 向后导航到主 Webview | src-tauri/src/core/cmd.rs38-46 |
控制窗口行为的命令
| 命令 | 目的 | 来源 |
|---|---|---|
window_pin | 切换窗口的“总在最前”状态 | src-tauri/src/core/cmd.rs48-60 |
set_view_ask | 启用或禁用提问界面并调整视图布局 | src-tauri/src/core/cmd.rs105-192 |
处理 UI 和 ChatGPT 之间消息交互的命令
| 命令 | 目的 | 来源 |
|---|---|---|
ask_sync | 将消息内容同步到主视图 | src-tauri/src/core/cmd.rs62-70 |
ask_send | 将消息提交给 ChatGPT | src-tauri/src/core/cmd.rs72-87 |
管理应用程序设置的命令
| 命令 | 目的 | 来源 |
|---|---|---|
get_app_conf | 检索当前的应用程序配置 | src-tauri/src/core/cmd.rs100-103 |
set_theme | 更改应用程序主题 | src-tauri/src/core/cmd.rs89-98 |
来源
命令流程遵循一个确定的顺序,从前端调用到后端执行和响应。
来源
应用程序的 UI 组件广泛使用命令系统来与后端交互。以下是一些关键示例:
标题栏组件使用多个命令来控制应用程序行为
来源
提问组件与后端通信以同步消息内容和发送消息
来源
视图管理命令展示了命令系统如何与 Tauri Webview API 交互
来源
消息处理命令展示了后端如何处理来自前端的用户输入
来源
命令系统的能力在应用程序的能力配置文件中定义,其中指定了允许的系统资源和操作。
| 权限类别 | 描述 | 示例权限 |
|---|---|---|
| 窗口 | 窗口管理功能 | window:allow-create, window:allow-start-dragging |
| Webview | Webview 操作能力 | webview:allow-create-webview, webview:allow-set-webview-focus |
| 事件 | 事件系统交互 | event:allow-emit, event:allow-listen |
| Shell | 系统 Shell 访问 | shell:allow-open, shell:allow-execute |
| 操作系统 | 操作系统信息访问 | os:allow-platform, os:allow-version |
来源
命令系统是 ChatGPT 桌面应用程序中连接前端 React 界面与后端 Rust 功能的关键架构组件。它提供了一个结构良好的界面,用于执行原生操作、管理应用程序状态以及实现丰富的用户交互。
该系统围绕一组小而集中的命令进行设计,每个命令负责特定的职责,例如 Webview 导航、配置管理、窗口行为和消息处理。这种设计实现了 UI 层和原生功能层之间的关注点分离。