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
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:
commit
bc41dfcf7d
517 files changed
+92844
No files matched your search
@@ -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 => "不支持(低于最低要求)",
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user