refactor(app-iced, presenter): M114 rebase 后守 400 行 —— 四处纯搬移(不动语义、不压注释、不挪断言)

主线六条合入后,四个被我碰过的文件越过 400 行;按模块拆开,只搬不改:

- `presenter/host/mod.rs` 421→366:账户刷新/皮肤三段(refresh_accounts / attach_skins /
  request_skins)搬进 `host/accounts/refresh.rs`(`impl CoreHost`,pub(in crate::host))
- `presenter/state.rs` 410→392:`TileCell` + `grid_positions` 搬进 `state/tiles.rs`,
  `state.rs` 用 `pub use` 再导出,老路径不变
- `app-iced/app/state.rs` 401→394:账户页重建那一段搬进 `app/view/account_page.rs`
  的 `App::rebuild_account_page`
- `app-iced/app/update.rs` 407→388:`ULL_START_ROUTE` 取值表搬进 `app/update/boot_env.rs`
  (纯函数、无状态)
This commit is contained in:
AskaEth committed 2026-11-05 05:13:54 +08:00
1 parent 0f69eec64d
commit a183adc072
12 files changed
+210 -120

No files matched your search

+3 -10
View File
@@ -360,16 +360,9 @@ impl App {
self.lang(),
&self.content,
);
// 账户页(M114):与 `view` 同一次门控重建;皮肤解码走缓存,所以重复重建不重解图。
// 语言同样跟着 M106 的 `LangState` 走(M114 早期钉死 `Lang::En` 的写法已删)。
let lang = self.lang();
self.account = pages::account::Page::build(
&self.state,
&self.account_form,
&mut self.avatars,
lang,
width,
);
// 账户页(M114):与 `view` 同一次门控重建(实现见 `view/account_page.rs`,
// 皮肤解码走缓存,所以重复重建不重解图)。
self.rebuild_account_page(width);
self.view_dirty = false;
self.refreshes += 1;
}
+2 -21
View File
@@ -44,6 +44,7 @@ use super::CAPTURE_AT_FRAME;
mod account;
mod agent;
mod boot_env;
mod content;
mod download;
mod page_messages;
@@ -178,7 +179,7 @@ impl App {
// 取证开关 `ULL_START_ROUTE`:截图/冒烟直接落到某一页(`cli.rs` 不在本 mission 的 scope,
// 而「外观」分组只在设置页上,出矩阵必须能直达)。未知值忽略。
if let Some(route) = env_start_route() {
if let Some(route) = boot_env::env_start_route() {
eprintln!("[boot] ULL_START_ROUTE → {route:?}");
self.state.navigate(route);
// 直达某一页时不要再被「自动选中第一条实例」拉回详情页。
@@ -383,25 +384,5 @@ fn heartbeat() -> Task<Message> {
})
}
/// 取证开关 `ULL_START_ROUTE` 的取值解析(`settings` / `instances` / `download` / `content` / `logs`)。
///
/// 为什么是环境变量:`crates/app-iced/src/cli.rs` 不在 M93 的 scope,而外观矩阵必须在**设置页**上
/// 出图。语义与 `ULL_APPEARANCE_*` / `ULL_TICK_TRACE` 一致:只影响这一次进程。
fn env_start_route() -> Option<Route> {
match std::env::var("ULL_START_ROUTE").ok()?.trim() {
"instances" => Some(Route::Instances),
"download" => Some(Route::Download),
"logs" => Some(Route::Logs),
"settings" => Some(Route::Settings),
// M104:AI 独立页也要能直达(三态矩阵的 Detached 那张)
"agent" => Some(Route::Agent),
// M109:内容库(截图矩阵要能直达;页面内的四条侧栏不在路由里)
"content" => Some(Route::Content),
// M114:账户页的 D30 矩阵要能直达(`cli.rs` 不在本 mission 的 scope)
"accounts" => Some(Route::Accounts),
_ => None,
}
}
#[cfg(test)]
mod download_wiring;
@@ -0,0 +1,26 @@
//! 启动期的取证环境变量解析(`ULL_START_ROUTE`)。
//!
//! 从 `app/update.rs` 原样搬出(那个文件在 M105/M106/M109/M113 之后贴着 400 行硬线):
//! **纯函数、无状态**,只是取值表长到了七条。
use unlucky_presenter::router::Route;
/// 取证开关 `ULL_START_ROUTE` 的取值解析(`settings` / `instances` / `download` / `content` / `logs`)。
///
/// 为什么是环境变量:`crates/app-iced/src/cli.rs` 不在 M93 的 scope,而外观矩阵必须在**设置页**上
/// 出图。语义与 `ULL_APPEARANCE_*` / `ULL_TICK_TRACE` 一致:只影响这一次进程。
pub(super) fn env_start_route() -> Option<Route> {
match std::env::var("ULL_START_ROUTE").ok()?.trim() {
"instances" => Some(Route::Instances),
"download" => Some(Route::Download),
"logs" => Some(Route::Logs),
"settings" => Some(Route::Settings),
// M104:AI 独立页也要能直达(三态矩阵的 Detached 那张)
"agent" => Some(Route::Agent),
// M109:内容库(截图矩阵要能直达;页面内的四条侧栏不在路由里)
"content" => Some(Route::Content),
// M114:账户页的 D30 矩阵要能直达(`cli.rs` 不在本 mission 的 scope)
"accounts" => Some(Route::Accounts),
_ => None,
}
}
@@ -10,12 +10,28 @@ use iced::Element;
use crate::app::Message;
use crate::pages;
use crate::pages::account::Page as AccountPage;
use crate::shell::{self, agent, NavItem, RailAccount};
use super::super::state::App;
use super::super::APP_TITLE;
impl App {
/// 账户页视图模型的重建(`refresh_view` 的账户那一步)。
///
/// 与 `view` 同一次门控;语言跟着 M106 的 `LangState` 走(M114 早期钉死 `Lang::En`
/// 的写法已删),宽度用 M104 的中栏可用宽。放在这里是为了让 `app/state.rs` 守住 400 行。
pub(in crate::app) fn rebuild_account_page(&mut self, width: f32) {
let lang = self.lang();
self.account = AccountPage::build(
&self.state,
&self.account_form,
&mut self.avatars,
lang,
width,
);
}
/// 账户页(走 `pages::account` 自己的树,而不是 `pages::Screen` 那四页的 `Model`)。
pub(super) fn account_page<'a>(
&'a self,