Add launcher engine (scopenet-core) and admin panel server
- scopenet-shared: wire types for branding, auth, instances, manifests - scopenet-core: Mojang versions/libraries/assets, automatic Java runtimes, Fabric/Quilt/Forge/NeoForge installation, file sync, launch command builder, Microsoft auth, servers.dat injection, server list ping - scopenet-panel: Axum + SQLite admin API with JWT auth, users/groups, branding, settings, instances, Modrinth/CurseForge/zip import, file hosting and launch stats Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ARcGWxLx21FwXJ3yfGriS
This commit is contained in:
43 files changed
+9317
No files matched your search
@@ -0,0 +1,41 @@
|
||||
//! Tiny system probes (kept dependency-free to stay lightweight).
|
||||
|
||||
/// Total physical memory in MiB (best effort; 8 GiB if unknown).
|
||||
pub fn total_memory_mb() -> u64 {
|
||||
imp().unwrap_or(8192)
|
||||
}
|
||||
|
||||
#[cfg(windows)]
|
||||
fn imp() -> Option<u64> {
|
||||
use windows_sys::Win32::System::SystemInformation::{GlobalMemoryStatusEx, MEMORYSTATUSEX};
|
||||
let mut status: MEMORYSTATUSEX = unsafe { std::mem::zeroed() };
|
||||
status.dwLength = std::mem::size_of::<MEMORYSTATUSEX>() as u32;
|
||||
let ok = unsafe { GlobalMemoryStatusEx(&mut status) };
|
||||
(ok != 0).then(|| status.ullTotalPhys / 1024 / 1024)
|
||||
}
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
fn imp() -> Option<u64> {
|
||||
let info = std::fs::read_to_string("/proc/meminfo").ok()?;
|
||||
let line = info.lines().find(|l| l.starts_with("MemTotal:"))?;
|
||||
let kb: u64 = line.split_whitespace().nth(1)?.parse().ok()?;
|
||||
Some(kb / 1024)
|
||||
}
|
||||
|
||||
#[cfg(not(any(windows, target_os = "linux")))]
|
||||
fn imp() -> Option<u64> {
|
||||
None
|
||||
}
|
||||
|
||||
/// Recursively sum file sizes under `path`.
|
||||
pub fn dir_size(path: &std::path::Path) -> u64 {
|
||||
let Ok(entries) = std::fs::read_dir(path) else { return 0 };
|
||||
entries
|
||||
.filter_map(|e| e.ok())
|
||||
.map(|e| match e.file_type() {
|
||||
Ok(t) if t.is_dir() => dir_size(&e.path()),
|
||||
Ok(t) if t.is_file() => e.metadata().map(|m| m.len()).unwrap_or(0),
|
||||
_ => 0,
|
||||
})
|
||||
.sum()
|
||||
}
|
||||
Reference in new issue
Block a user