fix(harmony): discover devices and release disconnected sessions asynchronously
Use USB descriptors and MTP identity instead of the static libmtp product label. Monitor attachment, discard stale UI responses, clear disconnected views, and release slow MTP sessions in the background while preserving operation serialization. Publish 0.1.1 with immutable source history. Cover discovery, names, unplugging and slow disconnect with native and UI regressions. Verify real Pura 70 Ultra identity and prompt disconnect; run the newest published backend during Git-source checks.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Harmony Connector
|
||||
|
||||
插件 ID:`dev.trove.harmony-connector`。版本:`0.1.0`。
|
||||
插件 ID:`dev.trove.harmony-connector`。版本:`0.1.1`。
|
||||
|
||||
面向 HarmonyOS 6 的 USB 文件传输插件,提供设备选择、存储与目录浏览、分页、名称筛选、新建目录,以及单文件发送/接收、字节进度与取消。使用 libmtp 1.1.23 和 libusb 1.0.30,无需手机开发者模式、HDC、ADB 或 Homebrew 运行依赖。
|
||||
|
||||
@@ -16,13 +16,19 @@
|
||||
|
||||
1. 解锁手机,用支持数据传输的 USB 线连接 Mac。
|
||||
2. 在手机 USB 选项中选择「传输文件」,允许访问。
|
||||
3. 扫描、选择设备并连接,打开目标文件夹。
|
||||
3. 等待插件自动发现设备,选择并连接,打开目标文件夹。也可手动点击「扫描设备」。
|
||||
4. 点击「发送文件」从 Mac 选择一个文件;点击文件旁的「接收」选择 Mac 接收文件夹。
|
||||
|
||||
本插件只访问手机通过 MTP 开放的存储。目录来自设备对象 ID,不映射为 Android 路径。HarmonyOS 6 在文件传输模式下允许导出图库内容,导入图库需要图片传输模式;本版未实现 PTP 图库导入。[华为 HarmonyOS 6 官方说明](https://consumer.huawei.com/cn/support/content/zh-cn16090699/)
|
||||
|
||||
没有发现设备时,检查数据线和 USB 模式、保持手机解锁,退出占用手机的其他传输应用后重试。取消或 USB 操作失败会释放会话,请重新连接。取消是协作式的,需要等待手机或 USB 超时返回,不保证立即完成。
|
||||
|
||||
插件打开时立即扫描,随后在空闲时约每 2 秒检测一次。已连接时只检查 USB 设备是否仍存在,不重复打开 MTP 会话;传输期间也检测拔线并请求结束传输。发现设备后仍由用户选择连接,手动断开不会立即自动重连。
|
||||
|
||||
手动断开会立即清空文件和连接界面,USB 会话在后台释放;清理期间显示提示并暂时禁用连接,完成后继续自动发现。设备不响应 MTP 关闭请求时,底层释放仍可能需要等待 USB 超时。
|
||||
|
||||
名称在扫描阶段来自 USB 描述符;连接后优先使用设备通过 MTP 返回的友好名称,并单独显示设备报告的型号。友好名称由固件提供,不一定等于系统设置中的自定义设备名;缺失时回退到型号或 USB 名称。libmtp 的静态设备匹配表只用于协议兼容,不作为型号展示依据;0.1.0 曾把其中的 `Nova14` 兼容条目误用为设备名称,0.1.1 已修复。
|
||||
|
||||
## 文件保护与边界
|
||||
|
||||
- 一次传输一个普通文件;目录请先压缩。不提供删除手机内容的操作。
|
||||
@@ -72,11 +78,13 @@ node tools/preview-harmony.mjs
|
||||
| `native/src/wire.rs` | Trove Wire v1 认证握手、请求分发与退出 |
|
||||
| `build.mjs`、`legal/` | 固定依赖构建、动态库路径修正、签名与第三方声明 |
|
||||
|
||||
`@self` 接口:`info`、`devices`、`connect({id})`、`disconnect`、`list({storage,parent,offset?})`、`mkdir({storage,parent,name})`、`transfer(...)`、`transferStatus`、`cancelTransfer({id})`。根目录为 `0xffffffff`;目录响应每页最多 500 个条目,传输异步返回任务 ID,界面轮询实际进度。后端同一时刻仅执行一个 USB 操作;进度查询和取消不等待 USB 锁。重新连接后必须重新获取对象列表。
|
||||
`@self` 接口:`info`、`devices`、`monitor`、`connect({id})`、`disconnect`、`list({storage,parent,offset?})`、`mkdir({storage,parent,name})`、`transfer(...)`、`transferStatus`、`cancelTransfer({id})`。根目录为 `0xffffffff`;目录响应每页最多 500 个条目,传输异步返回任务 ID,界面轮询实际进度。后端同一时刻仅执行一个 MTP 操作;进度查询、取消及 USB 存在性检查不等待 MTP 锁。重新连接后必须重新获取对象列表。
|
||||
|
||||
## 验证记录与真机验收
|
||||
|
||||
开发机的原生 USB 扫描正常返回空设备列表。完成的自动测试包含 10 项传输行为测试、2 项界面数据测试,以及 Trove 的握手、并发响应、退出协议测试;传输行为测试使用独立内存设备并实际读写临时目录。浏览器中验证模拟设备选择、导航、中文目录、筛选、不可信文件名显示、进度、完成和取消状态。
|
||||
自动测试包含 16 项传输与会话行为测试、10 项完整界面回归测试、2 项界面数据测试、3 项原生 USB 边界检查,以及 Trove 的握手、并发响应、退出协议测试。传输行为测试使用独立内存设备并实际读写临时目录;界面回归测试加载真实页面和 SDK,在模拟硬件边界下验证自动发现、名称、手动断开、慢速 USB 释放、拔线、旧响应与页面关闭。原生边界检查复现静态表 `Nova14` 与设备实际报告信息不同的场景,并验证友好名称和 USB 存在性检测。
|
||||
|
||||
2026-09-10,HUAWEI Pura 70 Ultra 的实机只读连接测试返回 USB ID `12d1:1101`、USB 名称 `HDC Device`、MTP 友好名称 `HUAWEI Pura 70 Ultra`、型号代码 `HBP-AL00`,并成功读取内部存储信息。该设备的 MTP 返回值未包含系统设置中的自定义名称。实机还复现了关闭 MTP 会话时的长时间等待;原生调用栈停在等待 `CloseSession` 响应的位置。0.1.1 实测断开请求约 0.27 毫秒返回并清空连接状态,后台释放约 61 秒后结束,随后恢复可操作状态。
|
||||
|
||||
**这些结果不能代替 HarmonyOS 6 真机兼容性验收。** 当前未记录任何机型的真实 USB 往返或吞吐量。连接实际手机后,按[调研文档验收清单](research/harmony-connector.md#验收与尚未证明的部分)补充完整机型/系统版本、空文件/中文/二进制/大文件往返 SHA-256、图库导出、取消、拔线、重新连接及退出的结果。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user