refactor(setting): download 四键纯搬移到 setting/keys/download.rs(M292 1/2)
`keys.rs` 396 行、贴着全仓 400 行硬线,M292 要再加三个键 ⇒ 先纯搬移腾地方。
- 新增 `crates/core/src/setting/keys/download.rs`:并发 / 单源尝试次数 / 地区判定 /
镜像偏好四条登记项,**逐字搬来**(唯一机械变换是 `.with(` 外壳换成 `vec![` 项、
`))` 换成 `),` 定界符)。
- `keys.rs` 原地换成一行 `.with_all(download::specs())`,登记顺序不变。
逐字节证明(搬移块 28 行):
git show HEAD~1:crates/core/src/setting/keys.rs | sed -n '109,136p' \
| sed -e 's/^ \.with(/ /' -e 's/^ ))$/ ),/' > old.txt
sed -n '/^ vec!\[$/,/^ \]$/p' keys/download.rs | sed '1d;$d' > new.txt
diff -u old.txt new.txt; echo $? # 0
两条归一化规则都是**行首精确缩进锚定**:块内 `.with(` 只出现在四个项首、`))` 只出现在
四个项尾(各 4 处,与项数一一对应),所以它们不可能顺手改掉块内的真实差异。
This commit is contained in:
1 parent
bba98d5898
commit
f4b5a73594
2 files changed
+55
-30
No files matched your search
@@ -37,8 +37,9 @@ pub const JAVA_INSTALL_ROOT_UNSET: &str = "";
|
|||||||
/// 必须同一份集合(setting 层不依赖 game 层),一致性由 `tests/setting/java_install_keys.rs` 守。
|
/// 必须同一份集合(setting 层不依赖 game 层),一致性由 `tests/setting/java_install_keys.rs` 守。
|
||||||
pub const JDK_VENDORS: &[&str] = &["temurin", "oracle", "microsoft", "zulu", "termux"];
|
pub const JDK_VENDORS: &[&str] = &["temurin", "oracle", "microsoft", "zulu", "termux"];
|
||||||
|
|
||||||
/// 拆到各自文件的键域:中文字体 CDN(M168)/ 自更新(M161)/ 代理与 gh-proxy(M197)。
|
/// 拆到各自文件的键域:中文字体 CDN(M168)/ 自更新(M161)/ 代理与 gh-proxy(M197)/
|
||||||
/// 主表各留一行登记。
|
/// 下载调优四键(M292)。主表各留一行登记。
|
||||||
|
pub mod download;
|
||||||
pub mod font;
|
pub mod font;
|
||||||
pub mod proxy;
|
pub mod proxy;
|
||||||
pub mod update;
|
pub mod update;
|
||||||
@@ -106,34 +107,9 @@ pub fn launcher_schema() -> SettingSchema {
|
|||||||
AiPolicy::sensitive(),
|
AiPolicy::sensitive(),
|
||||||
"实例默认隔离模式:isolated(运行目录派生 versions/<版本 id>,D20 默认)/ shared(所有实例共用 .minecraft 根)",
|
"实例默认隔离模式:isolated(运行目录派生 versions/<版本 id>,D20 默认)/ shared(所有实例共用 .minecraft 根)",
|
||||||
))
|
))
|
||||||
.with(SettingSpec::int(
|
// M292:下载调优四键(并发 / 单源尝试次数 / 地区 / 镜像偏好)搬到 [`download`]——主表这一行
|
||||||
"download.concurrency",
|
// 代替原先四条 `.with(..)`,登记顺序与搬到那边之前逐项相同。
|
||||||
crate::download::config::DEFAULT_MAX_CONCURRENCY as i64,
|
.with_all(download::specs())
|
||||||
(1, crate::download::config::MAX_CONCURRENCY as i64),
|
|
||||||
AiPolicy::silent(),
|
|
||||||
"同时下载的文件数(1~64,出厂 8)。这是引擎真实持有的并发许可,不是展示值;越界或手改坏值按出厂值生效",
|
|
||||||
))
|
|
||||||
.with(SettingSpec::int(
|
|
||||||
"download.retry_limit",
|
|
||||||
crate::download::config::DEFAULT_MAX_ATTEMPTS_PER_SOURCE as i64,
|
|
||||||
(0, crate::download::config::MAX_ATTEMPTS_PER_SOURCE as i64),
|
|
||||||
AiPolicy::silent(),
|
|
||||||
"单个下载源的最多尝试次数(含首次;出厂 3)。0 与 1 都等于「只试一次、不重试」——0 是旧版 GUI 提供过的档位,保留合法但不代表「不下载」。换源不受此限",
|
|
||||||
))
|
|
||||||
.with(SettingSpec::enumeration(
|
|
||||||
"download.region",
|
|
||||||
"auto",
|
|
||||||
REGIONS,
|
|
||||||
AiPolicy::audited(),
|
|
||||||
"下载地区判定:auto(时区+语言+探测)/ cn / global",
|
|
||||||
))
|
|
||||||
.with(SettingSpec::enumeration(
|
|
||||||
"download.mirror_preference",
|
|
||||||
"auto",
|
|
||||||
MIRROR_PREFERENCES,
|
|
||||||
AiPolicy::audited(),
|
|
||||||
"镜像偏好:auto(健康度评分)/ official(官方源优先)/ mirror(镜像优先)",
|
|
||||||
))
|
|
||||||
// M197:代理与 gh-proxy 三键(`download.proxy_mode` / `proxy_url` / `gh_proxy`)搬到
|
// M197:代理与 gh-proxy 三键(`download.proxy_mode` / `proxy_url` / `gh_proxy`)搬到
|
||||||
// [`proxy`]——主表这一段的注释也一起搬过去,见那个模块的表格。
|
// [`proxy`]——主表这一段的注释也一起搬过去,见那个模块的表格。
|
||||||
.with_all(proxy::specs())
|
.with_all(proxy::specs())
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
//! `download.*` 的基础四键(M292 从 `keys.rs` 纯搬移拆出:那边 396 行、贴着 400 行硬线)。
|
||||||
|
//!
|
||||||
|
//! 搬移范围与顺序都未改:并发 / 单源尝试次数 / 地区判定 / 镜像偏好,四项逐字搬来,主表只留
|
||||||
|
//! `.with_all(download::specs())` 一行。语义与「谁消费」仍写在各自的 `doc` 里(那是给界面与
|
||||||
|
//! AI 的 JSON Schema `description`,不是本文件的注释),所以这里不再抄第二份。
|
||||||
|
//!
|
||||||
|
//! 与 [`super::proxy`] 的分工:代理 / gh-proxy 三个键在那边(它们问的是「怎么把包拿到手」,
|
||||||
|
//! 而本文件这四个问的是「怎么排队、怎么重试、从哪个源拿」)。M292 新增的三个超时键
|
||||||
|
//! (吞吐下限 / 无进展窗口 / 单次请求上界)也登记在本文件,它们与并发、重试同属「下载调优」,
|
||||||
|
//! 而**改它们的代价**只写在一处:`core::download::stall` 的模块头。
|
||||||
|
|
||||||
|
use crate::setting::spec::{AiPolicy, SettingSpec};
|
||||||
|
|
||||||
|
use super::{MIRROR_PREFERENCES, REGIONS};
|
||||||
|
|
||||||
|
/// 四个基础键的完整登记项(主表一行 `.with_all(download::specs())`)。
|
||||||
|
#[must_use]
|
||||||
|
pub fn specs() -> Vec<SettingSpec> {
|
||||||
|
vec![
|
||||||
|
SettingSpec::int(
|
||||||
|
"download.concurrency",
|
||||||
|
crate::download::config::DEFAULT_MAX_CONCURRENCY as i64,
|
||||||
|
(1, crate::download::config::MAX_CONCURRENCY as i64),
|
||||||
|
AiPolicy::silent(),
|
||||||
|
"同时下载的文件数(1~64,出厂 8)。这是引擎真实持有的并发许可,不是展示值;越界或手改坏值按出厂值生效",
|
||||||
|
),
|
||||||
|
SettingSpec::int(
|
||||||
|
"download.retry_limit",
|
||||||
|
crate::download::config::DEFAULT_MAX_ATTEMPTS_PER_SOURCE as i64,
|
||||||
|
(0, crate::download::config::MAX_ATTEMPTS_PER_SOURCE as i64),
|
||||||
|
AiPolicy::silent(),
|
||||||
|
"单个下载源的最多尝试次数(含首次;出厂 3)。0 与 1 都等于「只试一次、不重试」——0 是旧版 GUI 提供过的档位,保留合法但不代表「不下载」。换源不受此限",
|
||||||
|
),
|
||||||
|
SettingSpec::enumeration(
|
||||||
|
"download.region",
|
||||||
|
"auto",
|
||||||
|
REGIONS,
|
||||||
|
AiPolicy::audited(),
|
||||||
|
"下载地区判定:auto(时区+语言+探测)/ cn / global",
|
||||||
|
),
|
||||||
|
SettingSpec::enumeration(
|
||||||
|
"download.mirror_preference",
|
||||||
|
"auto",
|
||||||
|
MIRROR_PREFERENCES,
|
||||||
|
AiPolicy::audited(),
|
||||||
|
"镜像偏好:auto(健康度评分)/ official(官方源优先)/ mirror(镜像优先)",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in new issue
Block a user