feat(presenter): adopt 的指令/事件/任务接线 + install 那句假话变真话(M223)

- AppCommand::Adopt(Box<AdoptCommand>)、CoreEvent::Adopt(Box<AdoptEvent>)、
  HostTask::Adopt { event, epoch }:三条穷尽枚举各加一条变体(代次独立于安装与 pack);
- dispatch.rs 一条分支、handle.rs 一条分支、state.rs 的 adopt 字段与一条 apply 分支;
- host/install.rs 的「还没有接入安装管线…请先在实例页导入已有版本」改成指向真入口:
  那里以前是一句假话(实例页根本没有导入动作),现在向导落地了,它才成立。
This commit is contained in:
AskaEth committed 2026-11-10 19:37:41 +08:00
1 parent 26e4fbb91d
commit 5a59cb33b2
6 files changed
+30 -1

No files matched your search

+2
View File
@@ -253,6 +253,8 @@ impl CoreHost {
// (`CancelInstall` 会把标记置位,下载在阶段边界收尾)。
// M113: import/export —— 导入 / 预检 / 确认写盘 / 关面板
AppCommand::Pack(command) => self.pack(*command),
// M223: 导入已有版本 —— 扫描 / 预检 / 确认登记 / 关面板
AppCommand::Adopt(command) => self.adopt(*command),
AppCommand::InstallContent(request) => {
let cancel = std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false));
self.install_cancel = Some(std::sync::Arc::clone(&cancel));
+1
View File
@@ -69,6 +69,7 @@ impl CoreHost {
// M105 的形状(代次丢包)为准:旧任务(已取消 / 被下一轮顶掉)的进度一律丢掉。
// 这是「点了取消没反应」的根因:取消时 `InstallProgress(None)` 刚把面板收回,
// 旧任务的下一条「下载中」事件立刻又把它点亮。
HostTask::Adopt { event, epoch } => self.handle_adopt(*event, epoch),
HostTask::Install { progress, epoch } => {
if epoch != self.install_epoch {
return;
+1 -1
View File
@@ -106,7 +106,7 @@ pub fn supported(kind: LoaderKind) -> bool {
/// 不支持的加载器 → 给用户的可执行建议。
pub fn unsupported_reason(kind: LoaderKind) -> String {
format!(
"{} 还没有接入安装管线(目前支持原版 + Fabric/Quilt/Forge/NeoForge/LiteLoader);请先在实例页导入已有版本,或换成受支持的加载器。",
"{} 还没有接入安装管线(目前支持原版 + Fabric/Quilt/Forge/NeoForge/LiteLoader);如果别的启动器已经装好了这个版本,可以在实例页用「导入已有版本」把它只读接进来(不复制文件),否则请换成受支持的加载器。",
kind.label()
)
}
+11
View File
@@ -68,6 +68,17 @@ pub enum HostTask {
/// 任务代次
epoch: u64,
},
// M223: 导入已有版本
/// 扫描 / 预检 / 确认的结果(一条事件 + 任务代次)
///
/// 代次是 adopt 自己的(`CoreHost::adopt_epoch`),**不**与安装或 pack 的代次共用:
/// 关一次导入面板不该把下载页在跑的安装静默丢掉。
Adopt {
/// 事件载荷(扫描 / 预检 / 完成 / 失败)
event: Box<crate::dto::AdoptEvent>,
/// 任务代次
epoch: u64,
},
/// 安装进度(高频,host 只做聚合与转发)
Install {
/// 进度快照