fix(m204): Java 组写盘成功后请 host 重发设置快照
`pages/settings/java/store.rs` 的 `save()` / `set_selected()` / `prefs_store::save()` 是页面自己的一次同步原子落盘(`SettingStore::set` 多个键 + 一次 `save()`), 不经过 `AppCommand::SetSetting` 的写盘分支;而 `CoreEvent::SettingsChanged` 全仓只有 `dispatch.rs` 的 `SetSetting` 分支与 `host/mod.rs::refresh_all` 两处发出。 于是三键写成功之后,`AppState::settings_groups` 里 java 组那几行会停在旧值, 直到下一次任何别的写入顺手带一份新快照回来。 修法用一条**动作键**(`dto::JAVA_REFRESH_ACTION` = `java.action.refresh`, 与 `download.action.detect_region` 同一族:不写盘、见到就返回 Ok): 写盘成功后派发它,`SetSetting` 分支照常重发快照。 不用 `RefreshAll`:那个除重发快照之外还会 `versions::spawn_list` 与 `start_update_check`——每点一次「保存内存」打两个网络请求(实测:一次真 host 出图 就在数据根里落了 `cache/meta/version_manifest_v2.json`),代价与动作不相称。 另外给 D30 §2.1 补一行自证身份的日志:`--screenshot` 且身份变化时打 `[shot] settings route=… group=… theme=…`(`view` 每帧都跑,所以只在变化时落一行), 免得再出现「拿外观页当下载组证据」那种图与结论对不上的事故。 守卫(`tests/java_refresh.rs`,4 条): - 真 `CoreHost` + 临时数据根跑完整链:写盘 ⇒ 快照里 `java.extra_args` 真的变了; - 被拒的保存不许请求刷新; - 成功之后确实派发了那条动作键(键名写错就红); - 「立即扫描」在 App 层真的接线(此前没有任何用例驱动 `Message::Scan`)。
This commit is contained in:
1 parent
a48d055118
commit
92ab3d4ddf
8 files changed
+436
-1
No files matched your search
@@ -250,6 +250,14 @@ pub fn set(env: &HostEnv, key: &str, value: &str) -> Result<(), String> {
|
||||
if key == super::engine::DETECT_REGION_ACTION {
|
||||
return detect_region(env);
|
||||
}
|
||||
// M204:设置页 Java 组的「写回完成,重发快照」动作键。**不写盘**——页面那一侧已经把三键
|
||||
// 一次原子写进 `launcher.json` 了(`pages/settings/java/store.rs::save`),这里只要返回
|
||||
// `Ok(())`,`dispatch.rs` 的 `SetSetting` 分支就会重发 `CoreEvent::SettingsChanged`,
|
||||
// `AppState::settings_groups` 里 java 组那几行随之变成刚写进去的真值。
|
||||
// 键的来历与取舍见 `crate::dto::JAVA_REFRESH_ACTION` 的文档。
|
||||
if key == crate::dto::JAVA_REFRESH_ACTION {
|
||||
return Ok(());
|
||||
}
|
||||
let parsed = parse_value(key, value)?;
|
||||
let mut store = env.store();
|
||||
store
|
||||
|
||||
Reference in new issue
Block a user