Setup-Assistent und Update-Abfrage bei jedem Start
Die heruntergeladene Datei ist ein Setup: Sprache, Ordner (nur ohne Admin-Rechte beschreibbar), Verknuepfungen, Fortschritt, Fertig-Seite; Ordner steht in der Registry. Deinstallieren loescht im gewaehlten Ordner nur die eigenen Dateien. Beim Start fragt der Launcher nach neuen Updates (Launcher und Mod). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -178,6 +178,15 @@ nav button.on { background: var(--panel-2); color: var(--text); }
|
||||
background: var(--panel-2); color: var(--accent-2); border: 1px solid var(--border); }
|
||||
.release pre { margin: 0; white-space: pre-wrap; font: inherit; color: #c4ccd8; }
|
||||
|
||||
/* Update-Abfrage beim Start */
|
||||
.modal-back { position: fixed; inset: 0; z-index: 90; display: grid; place-items: center; padding: 24px; background: rgba(5, 7, 10, .72); }
|
||||
.modal { width: min(520px, 100%); max-height: calc(100vh - 48px); overflow: auto; display: grid; gap: 14px; background: var(--panel);
|
||||
border: 1px solid var(--border); border-radius: 18px; padding: 24px; box-shadow: 0 24px 64px rgba(0, 0, 0, .5); }
|
||||
.modal h2 { margin: 0; }
|
||||
.modal p { margin: 0; }
|
||||
.update-item { display: grid; gap: 6px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 12px; padding: 12px 14px; }
|
||||
.update-item pre { margin: 0; max-height: 160px; overflow: auto; white-space: pre-wrap; font: inherit; font-size: 13px; color: #c4ccd8; }
|
||||
|
||||
/* ---------------------------------------------------------------- Einstellungen */
|
||||
.settings { display: grid; gap: 14px; }
|
||||
.settings .card { gap: 16px; }
|
||||
|
||||
@@ -447,6 +447,48 @@ async function renderSettings(root) {
|
||||
renderLangSwitch(setLang);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------- Update-Abfrage
|
||||
|
||||
/** Bei jedem Start: gibt es einen neuen Launcher (oder eine neue Mod)? Dann fragen - "Später" fragt beim naechsten Start wieder. */
|
||||
async function askForUpdates() {
|
||||
let s;
|
||||
try { s = await call("status"); } catch { return; }
|
||||
const mod = s.mod.installed && s.mod.updateAvailable && !s.game.running ? s.mod : null;
|
||||
if (!s.launcherUpdate && !mod) return;
|
||||
|
||||
const item = (name, from, to, changelog) => h("div", { class: "update-item" },
|
||||
h("div", {}, h("b", {}, name + " " + to), h("span", { class: "muted small" }, " " + t("installiert: {0}", from))),
|
||||
h("pre", {}, changelog || t("Keine Beschreibung")));
|
||||
const progress = h("div", { class: "progress hidden" }, h("span", { class: "small muted" }), h("div", { class: "bar" }, h("div")));
|
||||
const later = h("button", { class: "btn", type: "button" }, t("Später"));
|
||||
const now = h("button", { class: "btn primary", type: "button" }, t("Jetzt aktualisieren"));
|
||||
const box = h("div", { class: "modal-back" }, h("div", { class: "modal", role: "dialog" },
|
||||
h("h2", {}, t("Update verfügbar")),
|
||||
h("p", { class: "muted" }, t("Beim Start gefunden – jetzt aktualisieren?")),
|
||||
s.launcherUpdate ? item("Launcher", s.launcherVersion, s.launcherUpdate, s.launcherChangelog) : null,
|
||||
mod ? item(t("BSO-Mod"), mod.installed, mod.latest, mod.changelog) : null,
|
||||
progress,
|
||||
h("div", { class: "row", style: "justify-content:flex-end" }, later, now)));
|
||||
document.body.append(box);
|
||||
now.focus();
|
||||
|
||||
later.addEventListener("click", () => box.remove());
|
||||
now.addEventListener("click", async () => {
|
||||
now.disabled = later.disabled = true;
|
||||
progressBox = progress;
|
||||
try {
|
||||
if (mod) await call("installMod");
|
||||
if (s.launcherUpdate) { await call("installLauncherUpdate"); toast(t("Launcher startet neu …")); return; } // beendet sich gleich
|
||||
box.remove();
|
||||
toast(t("BSO {0} installiert", mod.latest));
|
||||
if (!$("app").classList.contains("hidden")) showPage(page);
|
||||
} catch (e) {
|
||||
toast(e.message, true);
|
||||
now.disabled = later.disabled = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------- Start
|
||||
|
||||
(async () => {
|
||||
@@ -464,6 +506,7 @@ async function renderSettings(root) {
|
||||
$("meVersion").textContent += " · DEV";
|
||||
}
|
||||
$("authServer").textContent = t("Server: {0}", init.master.replace(/^https?:\/\//, ""));
|
||||
askForUpdates(); // auch vor dem Anmelden
|
||||
if (!init.loggedIn) { showAuth(); return; }
|
||||
const me = await call("me");
|
||||
if (me.loggedIn) showApp(me.username);
|
||||
|
||||
@@ -45,6 +45,8 @@ const EN = {
|
||||
"Freund entfernen": "Remove friend", "{0} als Freund entfernen?": "Remove {0} as a friend?", "eingeladen": "invited", "Einladen": "Invite",
|
||||
"in der Lobby": "in the lobby", "Gesendet": "Sent", "wartet …": "pending …", "Zurückziehen": "Withdraw",
|
||||
// Neuigkeiten
|
||||
"Update verfügbar": "Update available", "Beim Start gefunden – jetzt aktualisieren?": "Found at startup – update now?",
|
||||
"installiert: {0}": "installed: {0}", "Später": "Later", "BSO-Mod": "BSO mod",
|
||||
"Keine Beschreibung": "No description", "Noch keine Versionen veroeffentlicht.": "No versions published yet.",
|
||||
// Einstellungen
|
||||
"Spielordner waehlen": "Choose game folder", "Spielordner gespeichert": "Game folder saved", "Protokoll-Ordner oeffnen": "Open log folder",
|
||||
|
||||
Reference in New Issue
Block a user