- 端口 1~65535(0 不是可连接端口);接收上限/最大报文长度/主题别名上限拒 0——MQTT 5 规范定义为 Protocol Error,broker 直接断连且值会被持久化,表现为每次连接都失败 - 遗嘱主题 trim 后入库,并拒绝包含通配符 + / #(通配符只用于订阅过滤器) - 16 个被校验字段订阅输入变更:编辑即清空字段错误,红字不再滞后于实际输入(此前错误只在保存时登记,改好值后红字仍挂着) - 传输切换只按「上一个方式」的默认端口覆盖端口:与全部默认端口比较会把用户手输的 8084/8883 误判为默认值,WSS:9443 → TCP → WSS 往返丢端口 - 五个对话框 open() 统一加 has_active_dialog 守卫:对话框是栈式叠加,多入口重复 open 会压入第二个模态,同 id 控件在两层间串台 - 阿里云预设对话框表单预填即选中第一项:此前 selected=None,打开即保存会 push 一条内容相同的重复预设 - OptionDelegate::position 按框架契约实现(按值反查索引):恒返回 None 会让 set_selected_value 失效、下拉显示空 - 非 Windows 不渲染置顶按钮:set_topmost 恒 false,显示必然报错的按钮只会让人困惑 - 主题键名对齐 gpui-component 的 serde rename:font.size / radius.lg 此前被静默忽略,14px 紧凑排版从未生效(实际渲染 16px) - aliyun.rs DeviceName 空值校验;Cargo.toml 声明 Apache-2.0(与关于页一致)
73 lines
2.4 KiB
TOML
73 lines
2.4 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.6"
|
|
|
|
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"] }
|
|
chrono = { version = "0.4", features = ["clock"] }
|
|
dirs = "6"
|
|
|
|
# 阿里云 MQTT 签名: HMAC-SHA1 -> Base64
|
|
hmac = "0.12"
|
|
sha1 = "0.10"
|
|
base64 = "0.22"
|
|
|
|
# 自定义 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 自更新:Gitea Release 检查/下载(ureq 用 rustls,与 rumqttc 依赖同源)
|
|
ureq = { version = "2", features = ["json"] }
|
|
sha2 = "0.10"
|
|
# 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.58", 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"
|