From af7a5948a782e4c6a4c9903056d741c17f237507 Mon Sep 17 00:00:00 2001 From: funman300 Date: Wed, 19 Aug 2026 04:26:29 +0000 Subject: [PATCH] launcher: plain-language launch status for players The dashboard named OpenFUT internals at a player: "Client integration", "Local services", "Hook DLL", and a "Deployed -> 10.10.0.120" value that conflates a DLL with a server address. None of it tells someone who just wants to play whether they can press Play. Rows are now Game files / Background helpers / Game patch, and the patch row states Installed rather than echoing the host it will point FIFA at. The important fix is the helper state. Two of the three cases returned labels that sound like faults for what is the NORMAL idle condition - the helpers only run alongside a session, and Launch starts whatever is missing - with "Partly running" being the worst: it reads broken and offers nothing to act on. Both collapse to "Start with the game", which says what will happen. Observed live: the dashboard showed "Partly running" while genuinely healthy, and pressing Launch brought autopatch up on its own. No behaviour change: readiness values are untouched, so the overall verdict pill and the launch gating are identical. fmt, clippy -D warnings, 75 tests clean. --- src/app.rs | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/app.rs b/src/app.rs index b523422..0684306 100644 --- a/src/app.rs +++ b/src/app.rs @@ -541,7 +541,7 @@ impl LauncherApp { status_text(ui, readiness_status(server), &server_label); ui.end_row(); - ui.label(RichText::new("Client integration").color(theme::TEXT_WEAK)); + ui.label(RichText::new("Game files").color(theme::TEXT_WEAK)); status_text( ui, readiness_status(integration), @@ -555,11 +555,11 @@ impl LauncherApp { ); ui.end_row(); - ui.label(RichText::new("Local services").color(theme::TEXT_WEAK)); + ui.label(RichText::new("Background helpers").color(theme::TEXT_WEAK)); status_text(ui, readiness_status(services), &services_label); ui.end_row(); - ui.label(RichText::new("Hook DLL").color(theme::TEXT_WEAK)); + ui.label(RichText::new("Game patch").color(theme::TEXT_WEAK)); status_text(ui, readiness_status(hook), &hook_label); ui.end_row(); }); @@ -725,13 +725,12 @@ impl LauncherApp { match (ready, blocked) { (_, true) => (launch::Readiness::Attention, "Blocked".into()), (2, _) => (launch::Readiness::Ready, "Ready".into()), - (0, _) => ( - // Not a problem: Launch starts them. Stating "Stopped" is honest - // and does not demand an action. - launch::Readiness::Unknown, - "Stopped — Launch starts them".into(), - ), - (_, _) => (launch::Readiness::Unknown, "Partly running".into()), + // Neither stopped nor mid-start is a fault: the helpers only run + // alongside a session and Launch brings up whatever is missing. This + // used to read "Partly running", which sounds broken for what is the + // normal idle state and gave the player nothing to act on. Say what + // will happen instead. + (_, _) => (launch::Readiness::Unknown, "Start with the game".into()), } } @@ -745,14 +744,14 @@ impl LauncherApp { .and_then(|body| openfut_common::ServerConfig::parse(&body).ok()) { Some(d) if d == self.config.server_config() => { - (launch::Readiness::Ready, format!("Deployed → {}", d.host)) + (launch::Readiness::Ready, "Installed".into()) } // Launch rewrites it, so this is not something to demand action for. - Some(d) => ( + Some(_) => ( launch::Readiness::Unknown, - format!("Deployed → {} · Launch updates it", d.host), + "Installed · Launch will update it".into(), ), - None => (launch::Readiness::Attention, "No openfut.cfg".into()), + None => (launch::Readiness::Attention, "Not set up".into()), } }