Repository navigation
管理器接入组件补全与问题反馈功能 - #84
Merged
Merged
Conversation
三个包加 TestMain,把 LOCALAPPDATA(非 Windows 还有 XDG_CONFIG_HOME、HOME) 指到新建的临时目录。这样哪条测试忘了自己设,也读写不到真实的 %LOCALAPPDATA%\ModAVD\components-settings.json,也看不到这台电脑上 正在跑的模拟器(%LOCALAPPDATA%\Temp\avd\running)。 Refs ModAVD/ModAVD#120
- 自定义地址用 net/url 解析:要 http(s)、有主机名,不收用户名密码 (报错里也不复述地址)、? 查询、# 片段和空格;最多 16 个、每个 2048 个字符以内。报错文字不再只说 --mirror-url,界面和设置文件 也走这里。 - 「下载源:」一行写明这次的源从哪来:--mirror / --mirror-url、 保存的设置、管理器里选的,或者默认(还没有设置过)。 - License 改成显式带下载源,和补全时取许可协议的方式一致;新增 LicenseSHA256。带了 LicenseSHA256 的补全,取到的协议对不上就以 components_rejected 停下,什么也不存、不下,提示重新点补全组件; 日志写「已在管理器里同意许可协议」,不再看 SourceOrigin 的字面值。 Refs ModAVD/ModAVD#120
- stdin 是不是终端改由平台文件判断:Windows 用 GetConsoleMode(NUL 的 Stat 也是字符设备,光看 ModeCharDevice 会把 `< NUL` 当成控制台), 其他平台是字符设备且不是 /dev/null。只用 syscall / os,不新增对 internal/win 的引用。 - 管道、文件、NUL 一律不问、不保存,按默认顺序:`echo y | modavd components fetch` 的 y 又回到许可协议的问题上。 - 测试工具里 stdin 默认是「不是终端」(和测试实际一样),要菜单的 测试显式注入「是终端」:回车记住默认、EOF 只这次用默认、编号不对 报错不保存;--json、--accept-license 在控制台里也不问(M04、M05)。 - 用了保存的设置时,下载源一行写「保存的设置」。 Refs ModAVD/ModAVD#120
- GET /api/components/license 带 source / mirror_urls 时从那个源取, 回 license_sha256;POST /api/components/fetch 必须带上它(64 位 十六进制),后台取到的协议对不上就以 components_rejected 失败、 什么也不下(P2 第 4 条)。 - 补全组件、收集问题信息的任务各用一个带任务日志的诊断后端:消息 带任务 id 进事件流和活动里的「过程」,警告进任务;许可协议全文和 它下面的说明只按 Debug 记进文件日志(P3 a)。 - 根任务的日志行不再写「实例 -1」。 - /api/open 去掉 what:"path",改成 what:"collect-info" + job:只打开 这个管理器做完的收集问题信息任务生成的问题包所在文件夹;what 不对 时的报错列上 collect-info(P3 f)。 - 删掉没人用的 diag_backend_unavailable.go(P3 b)。 - 测试:请求里的源、保存的源、MirrorURLs 都原样传到后端,许可协议 按源取,缺少或不合规的 license_sha256 不下载,任务日志带任务 id、 Debug 不进事件流,/api/open 只认做完的收集任务,mirror_urls 没有 值时是 [](M10、M11、M12,P3 i)。API.md 同步。 Refs ModAVD/ModAVD#120
- 电脑检查的组件一项没通过时,建议下面是「补全组件」;补全时这里 显示进度(后台那一行,不再重复拼百分比)和「取消」,失败时写明 原因和建议,按钮变成「重试」;补全完成后自动重新检查(P2 第 1 条)。 横幅上的「补全组件」走同一个对话框。 - 许可协议对话框先开出来、再从选的下载源取全文:下载源放在全文 上面,换源或改自定义地址就重新取;取不到时错误留在对话框里,可以 「重新获取」或换源。同意时带上这份全文的 license_sha256(P2 第 4 条)。 - 进度行、取消按钮建好以后只更新文字,不再每次重建(P3 a)。 - 根任务的提示和活动标题不再写「实例 -1」(P3 a)。 - 「组件与问题反馈」面板的组件部分只显示状态,加「去电脑检查补全」; 可选组件标「(可选)」、没装写「未安装」;收集完显示后端给的 privacy_note,「在资源管理器里显示」按任务 id 打开(P3 f、g、h)。 - 设置页:选内置源就保存并提示,保存失败退回原来的值;自定义地址 的输入框和「保存」放在下拉框下面,回车也能保存(P2 第 2 条)。 - dev/mock.js 跟着改:进度行和真后端一样,许可协议按源给并校验 license_sha256,/api/open 按任务,components-fail 只失败第一次, 补全后组件一项通过。 - scripts/test_create_cancel.mjs 的 panels.js 替身补上 runCheck。 Refs ModAVD/ModAVD#120
fileIsTerminal 在测试里是注入的,这条直接测真的判断,三个平台都跑。 Refs ModAVD/ModAVD#120
唯一的冲突是 internal/ui/diagnostics_test.go:两边都新加了这个文件 (add/add),测的是两件事。ModAVD#78 那份(按实例的诊断模式)原样留在原来 的文件名上;本 PR 那份(补全组件、收集问题信息的接口和互斥)一字不改 挪到 internal/ui/diag_jobs_test.go。两边的测试都在、都跑到。 handlers.go、http.go、API.md、test_create_cancel.mjs 等自动合并,逐处 看过:ModAVD#78 的 /api/instances/{i}/diagnostics/preview 路由、PATCH 的 diagnostics 字段和本 PR 的 /api/components*、/api/diag/*、/api/open 的 collect-info 都在。 Refs ModAVD/ModAVD#120
qiyinxi
added a commit
to qiyinxi/ModAVD
that referenced
this pull request
Nov 6, 2026
- 删掉包根的「补全组件.bat」「收集问题信息.bat」「复制配置信息.bat」和下载源菜单 components-sources.txt;fetch-components.ps1、collect-info.ps1、report-config.ps1 上一个提交已删。这三件事在 ModAVD/ModAVDManager#84 里接进了管理器(电脑检查的「补全组件」, 设置里的「组件与问题反馈」),命令行 components fetch / collect-info / report-config 不变。 - 发版工具:随包只取 package/modavd-bridge.ps1;NOTICE 的「ModAVD scripts and documents」 条目拿掉两个 .bat 和两个 .ps1、补上 modavd-bridge.ps1;审过的说明.txt 里讲批处理的三段 按原文替换成管理器和命令行的说法(README_EDITS,原文不在或不止一处就停);覆盖检查加反方向: NOTICE 点名的包根文件包里必须有。 - 升级:modavd update 按旧清单删掉新包里没有的包根文件,旧的批处理和脚本会被删掉; 手动覆盖的会留着,不再用到。 - README、CONTRIBUTING、THIRD_PARTY、package/README、AGENTS、issue 模板、发布说明模板、 modavd-src 的 NOTICE 和 modavd-bridge.ps1 找不到 adb 时的提示,改成管理器和命令行的说法。 Refs ModAVD#45
This was referenced Nov 6, 2026
Merged
This was referenced Nov 6, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
改动
POST /api/components/fetch(必须带),后台补全时从同一个源取到的协议对不上,就以components_rejected停下,什么也不存、不下。日志写「已在管理器里同意许可协议」。组件文件照旧按程序里写好的 SHA-1 和大小核对,换哪个源都一样。%LOCALAPPDATA%\ModAVD\components-settings.json。设置页「组件下载源」和更新源并排:选内置源就保存,选自定义地址时填地址再保存。modavd components source [auto|googledownloads_cn|tencent|google]查看、修改,--json带上当前值(没有自定义地址时mirror_urls是[])。界面和components fetch不带--mirror/--mirror-url时都用它;下载前那一行「下载源:」写明这次的源是参数给的、保存的设置、管理器里选的,还是默认。components fetch还没存过源、stdin 是控制台时,用编号问一次并记住(直接回车是自动并记住,读到结尾只这次用自动);--json、--accept-license、管道、文件、NUL 都不问、不保存,echo y | modavd components fetch的 y 照旧回答许可协议。net/url校验:http(s)、有主机名,不收用户名密码、?、#和空格,最多 16 个、每个 2048 个字符以内。设置文件被改坏或写了不认识的值,读出来按没设置处理;旧的downloads\source.txt内容不认识时忽略。tools\modavd.exe components fetch」。现有命令行参数、退出码和--json输出不变。测试
gofmt -l .没有输出;go vet ./...在 windows、darwin/arm64、linux/amd64 三个平台都过,三个平台都编得过;Windows 上go test ./...全过;node --test的两个脚本测试也过。LOCALAPPDATA(非 Windows 还有XDG_CONFIG_HOME、HOME)指到临时目录,后端用假执行器和临时根目录,不读写真实的%LOCALAPPDATA%\ModAVD。--accept-license和--json时也弹菜单、读设置不校验、存设置不校验或没存上、读到结尾也存了默认、NUL 和管道当成控制台;accept_license为 false 也放行、真后端不拒绝没同意的请求、不带license_sha256也放行、哈希没传到补全、协议对不上也照下、取协议时不看请求里的源;source.txt不认识时直接失败;--dev --no-window同样的ui.Run起管理器(错误打到控制台,不弹框),LOCALAPPDATA指到临时目录,根目录是假的(不放emulator.exe,mas-avd.json里 adb 端口设在 18600 段以外,不碰 5037、20049、20050),在浏览器里看过:modavd --json components source都是 tencent;横幅进来、保存的源连不上时对话框照样打开。echo y | modavd components fetch和< NUL都不弹菜单、不保存。AUTO-MAS 要跟着改的(本 PR 不改)
对照 AUTO-MAS 上游 dev
00ce51042。都改成「在 ModAVD 管理器的电脑检查里点『补全组件』,或运行tools\modavd.exe components fetch」这个意思:app/utils/common/emulator2/avd/__init__.py:24的文档字符串;app/utils/common/emulator2/avd/components.py:23、:71、:73(给用户看的提示)、:503;app/utils/common/emulator2/avd/precheck.py:27、:221;app/utils/common/emulator2/detect.py:81;app/api/emulator/instances.py:64、:397(接口字段描述);res/i18n/zh_CN.json、en.json、ja.json的core.emulator2.reason.components_missing(en、ja现在写的是「用完整的测试包」);frontend/src/api/models/Emulator2AvdStatusOut.ts、Emulator2SearchItem.ts是按instances.py的接口描述用 OpenAPI 生成的,改完instances.py重新生成,不手改;app/utils/common/emulator2/avd/update_stage.py:42文档字符串里的「两个 bat」。已知没修的
report.PrivacyNote),它照 collect-info.ps1 逐字搬来、有对拍测试,第一句还写着「脚本不会上传」。等 去掉随包的三个批处理和三个脚本,补全组件和问题反馈改由管理器和命令行做 ModAVD#119 删掉脚本时一起改,issue 草稿已交给维护者。internal/ui/diagnostics_test.go)在合并提交 34d8c8f 里解掉了:feat: 增加按实例诊断模式与有界现场保留 #78 那份留在原文件名,本 PR 那份原样挪到internal/ui/diag_jobs_test.go。macOS:补全固定版本 SDK 组件下载与安装 #72 也改了internal/components/fetch.go,后合的那个要解冲突。Refs 随包的三个 .bat 改成先调 modavd 命令行(等管理器 0.3.0 进包) ModAVD#45
Refs 管理器和命令行记住组件下载源,设置页里可以选 ModAVD#120