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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user