Restyle to a clean, flat look and rename brand to SCOPENET
- Brand is now SCOPENET everywhere (defaults, UI, installer, docs) - Launcher: solid backgrounds (no animated orbs/grain), flat Play button without gradient/shine/glow, quieter rail with a simple active indicator, smaller type scale, Inter as default font, glass off by default, restyled sliders - Panel: same flat treatment; live preview mirrors the new launcher - New flat scope-reticle logo and app icons - Calmer default palette - Fix: lock the shared cargo cache in the Docker build (amd64/arm64 raced) - Fix: Windows-only clippy lint in sys.rs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ARcGWxLx21FwXJ3yfGriS
This commit is contained in:
69 files changed
+378
-426
No files matched your search
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "scopenet-core"
|
||||
description = "Minecraft install / launch engine used by the ScopeNet launcher (and meta lookups in the panel)"
|
||||
description = "Minecraft install / launch engine used by the SCOPENET launcher (and meta lookups in the panel)"
|
||||
version.workspace = true
|
||||
edition.workspace = true
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ use std::sync::Arc;
|
||||
use std::time::{Duration, Instant};
|
||||
use tokio::io::AsyncWriteExt;
|
||||
|
||||
pub const USER_AGENT: &str = concat!("ScopeNet-Launcher/", env!("CARGO_PKG_VERSION"), " (+https://github.com/scopeddlol/SCOPENET-MC)");
|
||||
pub const USER_AGENT: &str = concat!("SCOPENET-Launcher/", env!("CARGO_PKG_VERSION"), " (+https://github.com/scopeddlol/SCOPENET-MC)");
|
||||
|
||||
pub fn client() -> reqwest::Client {
|
||||
reqwest::Client::builder()
|
||||
|
||||
@@ -346,7 +346,7 @@ mod tests {
|
||||
resolution: Some((1280, 720)),
|
||||
fullscreen: false,
|
||||
join_server: join.then(|| ("play.example.net".to_string(), 25565)),
|
||||
version_label: "ScopeNet".into(),
|
||||
version_label: "SCOPENET".into(),
|
||||
launcher_name: "scopenet".into(),
|
||||
launcher_version: "0.1.0".into(),
|
||||
}
|
||||
@@ -368,7 +368,7 @@ mod tests {
|
||||
assert!(a.contains("--width 1280 --height 720"));
|
||||
assert!(a.contains("--quickPlayMultiplayer play.example.net:25565"));
|
||||
assert!(!a.contains("--server"));
|
||||
assert!(a.contains("--versionType ScopeNet"));
|
||||
assert!(a.contains("--versionType SCOPENET"));
|
||||
assert!(a.contains("-Djava.library.path=/n"));
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//! ScopeNet launcher engine.
|
||||
//! SCOPENET launcher engine.
|
||||
//!
|
||||
//! The Tauri app is a thin UI shell around this crate: everything that
|
||||
//! downloads, installs or launches Minecraft lives here so it can be unit
|
||||
|
||||
@@ -76,9 +76,9 @@ mod tests {
|
||||
fn upserts_without_losing_player_servers() {
|
||||
let dir = tempfile::tempdir().unwrap();
|
||||
upsert(dir.path(), "Friend", "friend.net").unwrap();
|
||||
upsert(dir.path(), "ScopeNet", "play.scopenet.gg").unwrap();
|
||||
upsert(dir.path(), "ScopeNet SMP", "play.scopenet.gg").unwrap();
|
||||
assert_eq!(names(dir.path()), vec![("ScopeNet SMP".into(), "play.scopenet.gg".into()), ("Friend".into(), "friend.net".into())]);
|
||||
upsert(dir.path(), "SCOPENET", "play.scopenet.gg").unwrap();
|
||||
upsert(dir.path(), "SCOPENET SMP", "play.scopenet.gg").unwrap();
|
||||
assert_eq!(names(dir.path()), vec![("SCOPENET SMP".into(), "play.scopenet.gg".into()), ("Friend".into(), "friend.net".into())]);
|
||||
assert_eq!(format_address("a.b", 25565), "a.b");
|
||||
assert_eq!(format_address("a.b", 25570), "a.b:25570");
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ fn imp() -> Option<u64> {
|
||||
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)
|
||||
(ok != 0).then_some(status.ullTotalPhys / 1024 / 1024)
|
||||
}
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "scopenet-shared"
|
||||
description = "Types shared between the ScopeNet launcher and admin panel"
|
||||
description = "Types shared between the SCOPENET launcher and admin panel"
|
||||
version.workspace = true
|
||||
edition.workspace = true
|
||||
|
||||
|
||||
+17
-17
@@ -1,4 +1,4 @@
|
||||
//! Wire types shared by the ScopeNet launcher and the admin panel.
|
||||
//! Wire types shared by the SCOPENET launcher and the admin panel.
|
||||
//!
|
||||
//! Everything the panel sends to the launcher is described here, so both
|
||||
//! sides always agree on the JSON shape.
|
||||
@@ -39,19 +39,19 @@ pub struct Branding {
|
||||
impl Default for Branding {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
name: "ScopeNet".into(),
|
||||
name: "SCOPENET".into(),
|
||||
tagline: "Your worlds, one click away.".into(),
|
||||
logo_url: None,
|
||||
icon_url: None,
|
||||
background: Background::default(),
|
||||
colors: Palette::default(),
|
||||
font: "Outfit".into(),
|
||||
radius: 14,
|
||||
glass: true,
|
||||
version_label: "ScopeNet".into(),
|
||||
font: "Inter".into(),
|
||||
radius: 10,
|
||||
glass: false,
|
||||
version_label: "SCOPENET".into(),
|
||||
news: vec![NewsItem {
|
||||
id: "welcome".into(),
|
||||
title: "Welcome to ScopeNet".into(),
|
||||
title: "Welcome to SCOPENET".into(),
|
||||
body: "Your admin can customise this launcher from the panel: colours, news, instances and more.".into(),
|
||||
image_url: None,
|
||||
link: None,
|
||||
@@ -80,7 +80,7 @@ pub struct Background {
|
||||
|
||||
impl Default for Background {
|
||||
fn default() -> Self {
|
||||
Self { kind: "gradient".into(), url: None, blur: 0, dim: 45 }
|
||||
Self { kind: "gradient".into(), url: None, blur: 0, dim: 55 }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,14 +100,14 @@ pub struct Palette {
|
||||
impl Default for Palette {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
accent: "#7c5cff".into(),
|
||||
accent_2: "#22d3ee".into(),
|
||||
background: "#0b0d17".into(),
|
||||
surface: "#141828".into(),
|
||||
text: "#eef0ff".into(),
|
||||
muted: "#8b90b3".into(),
|
||||
success: "#34d399".into(),
|
||||
danger: "#f43f5e".into(),
|
||||
accent: "#6d6af5".into(),
|
||||
accent_2: "#8b88f8".into(),
|
||||
background: "#0d0e12".into(),
|
||||
surface: "#16181e".into(),
|
||||
text: "#ecedf1".into(),
|
||||
muted: "#8b8f9a".into(),
|
||||
success: "#3fb97c".into(),
|
||||
danger: "#e5484d".into(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -396,7 +396,7 @@ mod tests {
|
||||
#[test]
|
||||
fn manifest_roundtrip_with_defaults() {
|
||||
let m: LauncherManifest = serde_json::from_str("{}").unwrap();
|
||||
assert_eq!(m.branding.name, "ScopeNet");
|
||||
assert_eq!(m.branding.name, "SCOPENET");
|
||||
let loader: Loader = serde_json::from_str("\"neoforge\"").unwrap();
|
||||
assert_eq!(loader, Loader::NeoForge);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user