fix(packui): M113 第一批修正 —— 一次只摊开一件事、有界滚动、阶段词不再打架
D30 出图实测暴露的四个问题,都在本批范围内修掉: 1. **动作按钮被顶出屏幕**:内容库页正列没有整页滚动(只有结果列表自己滚),入口 + 报告 + 导出三块同时摊开时,「确认写盘 / 关闭 / 以包为准重新导入」落在 900px 以下。 改成一态一块(导出面板 > 进度 > 结果 > 入口);拖拽是窗口级事件,收起入口不丢功能。 2. **阶段词打架**:复用面板自带的阶段词是安装语义(Building the version),与 「Step 2/5 · Unpacking overrides」并排时两种说法。现在面板阶段词留空、由步骤行说真话 —— 仍然只有一份进度条 / 计数 / 取消按钮,没有第二套进度 UI。 3. **列表过长**:缺文件 / 冲突 / 预检样例与已知损失都套上「超过 n 条才滚」的有界容器 (packui/view/parts.rs 的 bounded),少量条目时不浪费空间。 4. **英文单复数**:计数行改成「标签:值」(Files written: 2、cannot export: 1)。 PackPathPlaceholder / PackFormatModrinth 的中文与英文雷同,被 chinese_catalog_is_actually_chinese 抓到,一并改掉。 另:app/update.rs 加完拖拽分支后 408 行超线 → 两个钩子改成返回 Task、三个分支各一行, 现在 397 行。新增致命态出图夹具(ULL_CONTENT_PACK=failed),用来证明「容忍的缺文件」与 「致命回滚」在视觉上可区分。 门禁:cargo check ✓ / clippy -D warnings ✓ / cargo test -p unlucky-app-iced(467+6)✓ / cargo test -p unlucky-i18n(24)✓ / rustfmt --check ✓ / wc -l 全表 ≤400 ✓
This commit is contained in:
1 parent
fbeff94e55
commit
2129d8cee6
10 files changed
+161
-83
No files matched your search
@@ -4,23 +4,24 @@
|
||||
//!
|
||||
//! 「沿用既有安装面板组件与状态机,禁止再写第二套进度 UI」——
|
||||
//!
|
||||
//! 1. 导入的 `ImportStageView` / 计数 / 当前路径先映射成 [`InstallProgressView`](本文件
|
||||
//! [`panel_progress`]);
|
||||
//! 2. 画法交给 `pages::download::install_panel`(M109 已经打过薄包装,同一个函数、同一套几何
|
||||
//! 与文案);
|
||||
//! 3. 面板只认四个粗阶段(规划 / 下载 / 安装 / 登记),任务书要的「解包 / overrides / 补文件」
|
||||
//! 三档由**一行步骤说明**([`stage_line`])承载。
|
||||
//! 1. 导入的 `ImportStageView` / 计数先映射成面板的入参形状([`panel_progress`] →
|
||||
//! `InstallProgressView` → [`InstallView`]);
|
||||
//! 2. 画法交给 `pages::download::install_panel`(同一个函数、同一套几何,进度条 / 计数 /
|
||||
//! 取消按钮都归它);
|
||||
//! 3. 任务书要的「解包 / overrides / 补文件」三档由**一行步骤说明**([`stage_line`])承载,
|
||||
//! 面板右边那个阶段词**留空**。
|
||||
//!
|
||||
//! 第 3 点不是第二套进度 UI:多出来的只是一句文字,进度条、计数行、取消按钮仍然只有那一份。
|
||||
//! 为什么不再造一条按 `ImportStageView` 五档划分的进度条:那正是「第二套」的定义,而且两块条
|
||||
//! 同时出现时用户不知道该信哪一条。
|
||||
//! 第 3 点的理由:面板自带的四个阶段词是**安装**语义(规划 / 下载 / 生成版本 / 登记实例),
|
||||
//! 套到导入上会出现「Step 2/5 · Unpacking overrides」旁边写着「Building the version」——
|
||||
//! 同一块地方两种说法(出图时实测到了)。留空 + 由步骤行说真话,是**不动那个组件**的最小解;
|
||||
//! 多出来的只有一句文字,没有第二条进度条。
|
||||
|
||||
use unlucky_i18n::{Catalog, Key};
|
||||
use unlucky_presenter::dto::{
|
||||
ImportProgressView, ImportStageView, InstallProgressView, InstallStage,
|
||||
};
|
||||
|
||||
use crate::pages::download::Download;
|
||||
use crate::pages::download::{Download, InstallView};
|
||||
|
||||
/// 抛进面板的进度行。
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
@@ -100,14 +101,31 @@ pub fn panel_progress(progress: &ImportProgressView) -> InstallProgressView {
|
||||
|
||||
/// 进度事件 → 面板要的视图模型。
|
||||
pub(super) fn running_of(progress: &ImportProgressView, catalog: Catalog) -> Running {
|
||||
let panel = panel_progress(progress);
|
||||
Running {
|
||||
pack: progress.pack.clone(),
|
||||
stage_line: stage_line(progress.stage, catalog),
|
||||
panel: Download {
|
||||
install: Some(crate::pages::download::install_view(
|
||||
&panel_progress(progress),
|
||||
catalog,
|
||||
)),
|
||||
install: Some(InstallView {
|
||||
version: panel.version.clone(),
|
||||
// 只用于 `running()` / `failed()` 的判定;**不**用它给用户看(见模块文档第 3 点)
|
||||
stage: panel.stage,
|
||||
stage_label: String::new(),
|
||||
detail: if progress.is_known() {
|
||||
catalog.render(
|
||||
Key::DownloadProgress,
|
||||
&[
|
||||
("done", &progress.done.to_string()),
|
||||
("total", &progress.total.to_string()),
|
||||
],
|
||||
)
|
||||
} else {
|
||||
catalog.text(Key::DownloadProgressUnknown).to_owned()
|
||||
},
|
||||
rate: None,
|
||||
ratio: progress.ratio(),
|
||||
known: progress.is_known(),
|
||||
}),
|
||||
..Download::loading()
|
||||
},
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user