主题预设("我全都要"): - gpui-app/themes/ 内嵌官方捆绑 21 个文件 36 变体 + Default Light/Dark - theme.rs:register_bundled_themes(bootstrap 注册)/ apply_theme_preset (Theme::update + apply_config 整包应用)/ theme_preset_names - settings.theme_preset 字段(serde 默认 linear);保存/启动按预设分派, 外观模式与跟随系统监听仅对 Linear 生效(预设自带明暗不被冲掉) - 设置页「主题预设」下拉(Linear + 38 注册名),切换即时生效 语言包按语言分文件(用户要求): - locales/ui.yml → locales/en.yml + locales/zh-CN.yml (rust-i18n 文件名 stem 即 locale,扁平 "ns.key": "value") - i18n.rs 测试改为双文件键集合一致性 + 占位符强制 修复:设置对话框打开即栈溢出 - gpui-kit 0.7.0→0.7.3 无法解决;根因是 Windows 主线程 8MB 栈对 Dialog 覆盖层内 Select 渲染的深调用链不足,注册多主题后越过阈值 (64MB 试验栈下不复现,证实深调用链而非无限递归) - .cargo/config.toml:Windows 主线程栈 8MB→64MB - 注册时机移到 bootstrap(main 的 init_themes,gpui_kit::init 后、 窗口创建前),对齐官方 story 示例的注册姿势 - 误伤修复:gpui-app/Cargo.toml 被批量编辑误删 bin.name 与 build-dependencies 段;examples/flood.rs 误删已恢复 官方 skill 同步:npx skills add 被墙,gh-proxy 镜像克隆后手动覆盖 ~/.agents/skills 与 ~/.zcode/skills 的 gpui-kit + gpui-kit-design-guides。
78 lines
2.6 KiB
TOML
78 lines
2.6 KiB
TOML
[package]
|
|
name = "mqttx-desktop"
|
|
version = "1.0.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"
|
|
tracing = "0.1"
|
|
tracing-subscriber = "0.3"
|
|
rust-i18n = "4.2"
|
|
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",
|
|
] }
|
|
|
|
[target.'cfg(target_os = "windows")'.build-dependencies]
|
|
# 嵌入窗口图标(gpui 从 exe 资源 ID 1 加载,缺失则任务栏显示默认图标)
|
|
embed-resource = "3"
|