feat(m193): 下载并发/重试/gh-proxy 真接进引擎(schema 与引擎同源常量)

- download.concurrency / download.retry_limit 以前引擎侧零消费者(恒用
  EngineConfig::default() 的 64,而 schema 说 8)。现在默认值与硬上限收成
  download/config.rs 的常量,schema、EngineConfig::default()、Semaphore 容量
  三处同源;宿主把三个键翻译成 DownloadTuning 后经 shared::set_tuning(按数据根)
  灌进装配点,改了设置下一次取引擎就生效。
- download.gh_proxy 三态(留空=跟随内置默认 / off=关 / 前缀=覆盖)下沉到
  shared::build,所有走共享引擎的下载路径(内容库/版本清单/字体/安装)一致。
- 删掉 MirrorTable::set_gh_proxy 与 default_gh_proxy 两个改了没用的入口。
- 下载设置页把三条假演示值换成说语义的中文行(含三态说明与 1~64 硬上限)。
- 守卫:探针读 Semaphore 真实许可数(不是读配置),每条配变异证明。
- docs/download-settings.md 记下取证表(另四个键仍零消费,已立 finding)。
This commit is contained in:
worker-dlmsettings authored and AskaEth committed 2026-11-09 05:24:11 +08:00
1 parent 98262d3835
commit e8544b19a7
15 files changed
+958 -200

No files matched your search

+23 -4
View File
@@ -1,9 +1,25 @@
//! 设置页「Downloads」分组:首选源 / 并发数 / 校验(演示行)。
//! 设置页「Downloads」分组:并发 / 单源尝试次数 / GitHub 加速前缀(M193)。
//!
//! **这一组归 download 线**:接真控件时在本文件把 `body` 换成 `Some(download::body)`(渲染器也写在本文件),
//! `settings/mod.rs` 的注册表不用动。
//!
//! 注意与下载页(`pages/download*`)的区别:那是「装哪个版本」,这里是「怎么下」的默认值。
//!
//! ## 为什么这三行是「说语义」而不是「说当前值」(M193)
//!
//! 原来这三行是**写死的演示值**(`("Concurrency", "8 threads")` / `("Preferred source",
//! "Automatic (region)")` / `("Verify checksums", "On")`)。用户实测把它们当成真值投诉过
//! (「它默认显示 8,可我改成 2 也没变」)——因为 iced 侧**根本没有设置数据通路**:
//! `pages::Model` 没有设置快照、`grep -rn "SettingsChanged" crates/app-iced/src` 零命中、
//! [`State`] 是个空 struct 且无人填。而这三行里「8 threads」当时还是**假的**:引擎真值曾是 64
//! (schema 说 8),「Verify checksums」更是没有任何校验开关(校验恒开)。
//!
//! 所以这一轮把假值换成**不会撒谎的语义行**:区间、默认值、「留空 / off / 前缀」三态各是什么。
//! 真值(用户在 `launcher.json` 里填的那个数)不在这里显示——**宁可不说,也不说假的**。
//! 真正的可改控件要等一条 presenter 快照 → app → `Groups.download` 的数据通路,另立 mission。
//!
//! **生效保证**:这三条设置真的会被引擎读走(`core::download::shared::set_tuning`,宿主侧
//! 翻译在 `presenter::host::settings`),所以「行里的语义」与「引擎行为」是同一份契约。
use unlucky_design::icons::IconKind;
@@ -14,9 +30,11 @@ pub(super) const GROUP: Group = Group {
name: "Downloads",
icon: IconKind::Download,
rows: &[
("Preferred source", "Automatic (region)"),
("Concurrency", "8 threads"),
("Verify checksums", "On"),
("并发数", "出厂 8 · 可调 1~64"),
("单源尝试次数", "出厂 3 · 含首次 · 换源另算"),
("GitHub 加速前缀", "留空 = 跟随内置默认"),
("关掉它", "填 off = 关闭"),
("换掉它", "填 URL 前缀 = 覆盖"),
],
body: None,
};
@@ -24,6 +42,7 @@ pub(super) const GROUP: Group = Group {
/// Downloads 分组的运行期状态(M101 r2:**只归 download 线**)。
///
/// 加字段只改本文件:`Groups` 只认 `Groups.download` 这一个字段。
/// 现在仍然是空的——真值的数据通路还没接(见文件头「为什么这三行是说语义」)。
#[derive(Debug, Default)]
pub struct State {}