core:新增 addon::online —— 按 Modrinth v2 真实形状建模(search facets / project /
project versions / version_file by hash),网络出口只有 Transport 一个 trait,生产实现
EngineTransport 走既有 DownloadEngine::download_bytes(零新依赖);错误分大类,网络类
失败映射成 NotConnected(= 未联网),不再用空列表冒充「没有结果」。
core:online::download::download_verified —— sha1 交给引擎流式校验、sha512 落盘后复核
(download::HashAlgo 没有 Sha512,改它超出 scope,已登记 finding),不符/失败删文件重试,
最多 3 次尝试且不留半截文件。
core:远端条目补全 —— PackFetcher::modrinth_file_by_sha512(默认 Unsupported = 补不出),
import 管线与新增的 scan_pack_online 都会在「有 path 但缺 hashes.sha1」时按 sha512 反查;
补出的 sha1 走 M160 同一套 judge 与合并判定,补不出仍进 unknown_remote 计数(口径未改)。
DownloadEngineFetcher 改用 download_verified,FetchRequest 增 sha512。
presenter:Modrinth 检索/详情改由 core 的 online 客户端提供(不再自己拼 URL、不再读错
date_modified);ContentFailure{kind} 取代裸字符串,无网 = Offline;新增
ContentDetailRequest/ContentDetail + LoadContentDetail 命令与 CoreEvent::ContentDetail 通道;
预检改走 scan_pack_online;内容库安装也走 download_verified(sha1+sha512)。
app-iced:Status::Offline 独立一态(未联网 ≠ 空列表 ≠ 普通失败),详情面板消费新 DTO
显示可用版本;选中项目即拉详情。i18n 新增 6 个键并同步金表。
测试:online 模块 24 个离线用例(录制 JSON + 假字节:搜索/详情/版本/按摘要反查/校验失败
即删/重试/离线分类/补全),import 侧 6 个(离线计数不变、补全后判冲突、补错摘要 ⇒ Failed),
presenter/app-iced 各补失败分类与详情状态机用例。
73 lines
3.7 KiB
Rust
73 lines
3.7 KiB
Rust
//! presenter ↔ core/agent 的 IPC 边界(01c §5 纪律)。
|
||
//!
|
||
//! 这里只允许出现「扁平 DTO / 事件 / 指令」:本 crate 的 DTO 里不得出现 `unlucky_core::*`
|
||
//! 或 `use unlucky_agent::*` 的内部类型。core/agent 侧的 host 层负责把自身类型翻译成本模块的类型,
|
||
//! 反向的 [`AppCommand`] 也一样。P0 阶段由 [`crate::mock`] 的假后端实现 [`Backend`] 驱动骨架,
|
||
//! P3 起由 [`crate::host`] 的真实后端驱动全部页面。
|
||
//!
|
||
//! 结构:**按领域拆子模块**(instances / versions / logs / agent / accounts / java /
|
||
//! settings / install / notices / content / events),全量 `pub use` 出去,调用方依旧写
|
||
//! `crate::dto::InstanceSummary` 这类路径。
|
||
//! 契约说明(字段口径、事件顺序、错误语义)见 `DevDocs/SubAgentsTalk/app-DTO通道约定.md`;
|
||
//! UI 侧的唯一入口与 iced 接线用法见 crate 文档(`src/lib.rs`)。
|
||
//!
|
||
//! 全部跨界类型 `Serialize + Deserialize`(AGENTS §6):事件与快照是 IPC 契约,
|
||
//! 序列化能力由 derive 钉住,`dto` 的单测做 round-trip 断言。
|
||
|
||
mod accounts;
|
||
mod agent;
|
||
mod content;
|
||
mod events;
|
||
mod install;
|
||
mod instances;
|
||
mod java;
|
||
// M157: 实例启动参数(启动参数区的读取视图 + 写回补丁)
|
||
mod launch_args;
|
||
mod launch_failure;
|
||
mod logs;
|
||
mod notices;
|
||
// M113: import/export —— 整合包导入/导出的 DTO(M111/M112 管线的 IPC 面)
|
||
mod pack;
|
||
mod settings;
|
||
// M159: 自更新(检查结论 / 候选 / 就位状态)
|
||
mod update;
|
||
mod versions;
|
||
|
||
pub use accounts::{
|
||
looks_like_jwt, redact, valid_offline_name, AccountKind, AccountNotice, AccountNoticeCode,
|
||
AccountView, AuthlibLoginView, AuthlibRequest, DeviceLoginPhase, DeviceLoginView, LoginFailure,
|
||
SkinImage, REDACTED,
|
||
};
|
||
pub use agent::{AgentEvent, ChatMessage, ChatRole, ConfirmRequest, Sensitivity, ToolCallView};
|
||
pub use content::{
|
||
loader_facet, ContentDetail, ContentDetailRequest, ContentFailure, ContentFailureKind,
|
||
ContentHit, ContentInstallRequest, ContentKind, ContentQuery, ContentResults, ContentSort,
|
||
ContentSource, ContentState, ContentVersionView,
|
||
};
|
||
pub use events::{AppCommand, AppEvent, Backend, CoreEvent, LaunchFinished, LiveLogBatch};
|
||
pub use install::{derive_speed, human_bytes, InstallProgressView, InstallStage};
|
||
pub use instances::{
|
||
CreateRequest, InstanceId, InstanceRuntime, InstanceSummary, LaunchFailureCause,
|
||
LaunchFailureStage, LaunchFailureView, LaunchStage, LoaderInfo, LoaderKind, Progress,
|
||
};
|
||
pub use java::{JavaChainOutcome, JavaChainStep, JavaPageView, JavaRuntimeView, JavaVendorView};
|
||
pub use launch_args::{LaunchArgsPatch, LaunchArgsView};
|
||
pub use logs::{Diagnosis, DiagnosisReport, LogLevel, LogLine, LogOutcome, LogSession, SessionId};
|
||
pub use notices::{NoticeLevel, NoticeView};
|
||
// M113: import/export
|
||
pub use pack::{
|
||
ConflictChoiceView, ConflictDecisionView, ConflictDecisionsView, ConflictFileView,
|
||
ConflictReasonView, ConflictSourceView, ExportClassView, ExportDoneView, ExportFileView,
|
||
ExportPreviewView, ExportReasonView, ExportRequestView, ExportState, FileActionView,
|
||
ImportConflictView, ImportErrorView, ImportFailureStageView, ImportProgressView,
|
||
ImportReportView, ImportRequestView, ImportScanView, ImportStageView, ImportState,
|
||
ImportStatusView, ImportedFileView, MissingFileView, MissingReasonView, PackCommand, PackEvent,
|
||
PackFormatView, PackState, ProbeView,
|
||
};
|
||
pub use settings::{SettingControl, SettingGroupView, SettingRowView};
|
||
// M159: 自更新
|
||
pub use update::{
|
||
ReadyUpdate, UpdateBanner, UpdateCandidateView, UpdateFailureView, UpdateOutcome, UpdateView,
|
||
};
|
||
pub use versions::{AncientKind, VersionCategory, VersionKind, VersionSummary};
|