Files
mqttx/gpui-app/Cargo.toml
T
JoeAllen 94fdb6a507 feat: 国际化 / 键盘操作 / 无障碍 / 性能优化
国际化
- 新增 ui/i18n 双语文案表(中文原文为 key,英文集中映射,tf 支持占位符)
- AppSettings 增加 language(跟随系统/中文/English),启动与保存时即时生效
- 全部界面文案(标题栏/侧栏/工作区/发布/订阅/表单/设置/全部对话框/通知)入表

键盘操作
- Ctrl+W 关闭当前标签页;Ctrl+Tab / Ctrl+Shift+Tab 循环切换标签
- Ctrl+F 聚焦当前工作区消息过滤框

无障碍
- 全部纯图标按钮补 accessibility_label(屏幕阅读器 / UIA 自动化可识别)

性能
- 折叠态预览(JSON 美化/压平+截断)改为入环形缓冲时计算一次,
  随 MqttRecord 缓存(Arc<str>),渲染热路径对最多数百条可见行
  不再逐帧重复 serde_json 解析
2026-10-01 15:54:18 +08:00

75 lines
2.5 KiB
TOML

[package]
name = "mqttx-desktop"
version = "1.1.0"
edition.workspace = true
description = "MQTT X —— 基于 GPUI 的跨平台 MQTT 调试客户端"
license = "Apache-2.0"
default-run = "mqttx"
[[bin]]
name = "mqttx"
path = "src/main.rs"
[dependencies]
gpui-kit = "0.7"
anyhow = "1"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
# MQTT 引擎运行在独立的 tokio runtime 线程上
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "net", "time", "io-util"] }
# GPUI 侧与引擎线程通信使用 smol 通道(GPUI 执行器兼容)
smol = "2"
rumqttc = { package = "rumqttc-v5-next", version = "0.34", features = ["websocket"] }
rumqttc-v4 = { package = "rumqttc-v4-next", version = "0.34", features = ["websocket"] }
uuid = { version = "1", features = ["v4"] }
sys-locale = "0.3"
chrono = { version = "0.4", features = ["clock"] }
dirs = "7"
# 阿里云 MQTT 签名: HMAC-SHA1 -> Base64
hmac = "0.13"
sha1 = "0.11"
base64 = "0.23"
# 自定义 TLS(自定义 CA / 双向认证 / 跳过校验),版本与 rumqttc 内部使用的 rustls 一致
rustls = { version = "0.23", default-features = false, features = ["std", "tls12", "aws_lc_rs"] }
# 加载系统根证书,作为自定义 CA 的补充
rustls-native-certs = "0.8"
# 原生文件对话框(连接导入/导出);Windows 走内建 COM 后端,Linux 用默认 xdg-portal
rfd = "0.17"
# OTA 自更新:GitHub Release 检查/下载(ureq 用 rustls,与 rumqttc 依赖同源;
# win-system-proxy 使 Windows 系统代理注册表设置自动生效,环境变量代理本就默认支持)
ureq = { version = "3", features = ["json", "win-system-proxy"] }
sha2 = "0.11"
# Release 附件为 7z 压缩包,纯 Rust 解压(客户端免装 7-Zip)
sevenz-rust = "0.6"
# 错误上报(自建 Sentry):panic 捕获 + 持久化错误;rustls 传输避免 openssl 依赖
sentry = { version = "0.49", default-features = false, features = [
"backtrace",
"contexts",
"panic",
"reqwest",
"rustls",
] }
# 窗口置顶(raw HWND + SetWindowPos)与进程资源采样
raw-window-handle = "0.6"
[target.'cfg(target_os = "windows")'.dependencies]
windows = { version = "0.62", features = [
"Win32_Foundation",
"Win32_System_Threading",
"Win32_System_ProcessStatus",
"Win32_System_Diagnostics_ToolHelp",
"Win32_UI_WindowsAndMessaging",
] }
# 嵌入窗口图标(gpui 从 exe 资源 ID 1 加载,缺失则任务栏显示默认图标)
[target.'cfg(target_os = "windows")'.build-dependencies]
embed-resource = "3"