Unlucky Launcher v0.0.1-alpha
CI / fmt (rustfmt --check) (push) Canceled after 0s
CI / clippy (ubuntu-latest) (push) Canceled after 0s
CI / clippy (windows-latest) (push) Canceled after 0s
CI / test (ubuntu-latest) (push) Canceled after 0s
CI / test (windows-latest) (push) Canceled after 0s
CI / build release (ubuntu-latest) (push) Canceled after 0s
CI / build release (windows-latest) (push) Canceled after 0s
Guards / core 零 UI 守门 (push) Canceled after 0s
Guards / 文件行数 ≤400 守门 (push) Canceled after 0s
Guards / 依赖许可与来源(cargo-deny) (push) Canceled after 0s

Rust 原生单文件 Minecraft 启动器:CLI 完整可用(install/launch/accounts/java/diagnose/agent),
MCP server 接入外部 Agent 工具,GUI 开发中。
This commit is contained in:
AskaEth committed 2026-10-31 21:54:10 +08:00
commit bc41dfcf7d
517 files changed
+92844

No files matched your search

+78
View File
@@ -0,0 +1,78 @@
//! 系统摘要与启动自检的 **CLI 呈现层**(D19 探测 + D21 Win10+ 单基线)。
//!
//! 事实采集与等级判定全在 `unlucky_core::platform::os_info`(M20):
//! - [`os_info::detect`] 真探一次(会起子进程,别在热路径反复调用);
//! - [`os_info::current`] 进程内缓存(CLI 每次执行只真探一次);
//! - [`os_info::check`] 启动自检(等级 + 双语文案 + 系统信息)。
//!
//! 本模块只做 CLI 关心的事:一行摘要、`--json` 对象、拒绝运行时的文案。
//! 支持级别只有两档(D21 用户拍板「直接 win10 起步」):[`SupportLevel::One`] 与
//! [`SupportLevel::Unsupported`]——Win8.1/8/7 不承诺 GUI 也不承诺 CLI,
//! 识别出旧版本正是为了明确报「不支持」。
use serde_json::{json, Value};
use unlucky_core::platform::os_info::{self, OsInfo, SupportLevel};
/// 取进程内缓存的系统信息(一次进程只真探一次)。
#[must_use]
pub fn detect() -> OsInfo {
os_info::current().clone()
}
/// 启动自检(等级 + 双语文案 + 系统信息),供拒绝运行时直接打印。
#[must_use]
pub fn check() -> os_info::SupportCheck {
os_info::check()
}
/// 一行摘要(`ull --version` 附带)。
#[must_use]
pub fn summary_line(info: &OsInfo) -> String {
let version = if info.version_string.is_empty() {
"版本未知"
} else {
info.version_string.as_str()
};
format!(
"{} · {}({})· {}",
info.product,
version,
info.arch,
support_label(info.support_level)
)
}
/// `--json` 里的系统对象。
#[must_use]
pub fn to_json(info: &OsInfo) -> Value {
json!({
"family": info.family.manifest_name(),
"product": info.product,
"version": if info.version_string.is_empty() { None } else { Some(&info.version_string) },
"major_minor": info.major_minor.map(|(major, minor)| format!("{major}.{minor}")),
"build": info.build,
"arch": info.arch,
"session": info.session.as_str(),
"support": info.support_level.as_str(),
"baseline": BASELINE,
})
}
/// 支持基线的一句话(`--json` 与帮助文案共用)。
pub const BASELINE: &str = "Windows 10+ / macOS 12+ / Linux(内核 ≥ 3.2,glibc ≥ 2.17)";
/// 环境级提示:仅在低于基线时非空(一等基线不打岔)。
#[must_use]
pub fn notes(info: &OsInfo) -> Vec<String> {
match info.support_level {
SupportLevel::One => Vec::new(),
SupportLevel::Unsupported => info.describe().zh.lines().map(str::to_string).collect(),
}
}
fn support_label(level: SupportLevel) -> &'static str {
match level {
SupportLevel::One => "满足最低要求",
SupportLevel::Unsupported => "不支持(低于最低要求)",
}
}