Auto-Update wie beim MSCO Launcher
Beim Start installiert sich ein neuer Launcher sofort selbst (Fortschrittsfenster, Neustart), neue BSO-Versionen kommen nach dem Anmelden - beides abschaltbar. Einstellungen: Nach Updates suchen / Installieren und neu starten. Updates wieder nur von der Website; dotnet publish laedt hoch (release.ps1). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+16
-5
@@ -21,7 +21,7 @@ public sealed class MainForm : Form
|
||||
/// <summary>Befehle, die nur einmal gleichzeitig laufen duerfen (Downloads/Installationen/Start).</summary>
|
||||
static readonly HashSet<string> Exclusive = new() { "installMod", "launch", "playLobby", "installLauncherUpdate", "uninstall" };
|
||||
readonly HashSet<string> running = new();
|
||||
static readonly HashSet<string> QuietCommands = new() { "window", "status", "me", "init", "releases", "friends", "lobby" };
|
||||
static readonly HashSet<string> QuietCommands = new() { "window", "status", "me", "init", "releases", "friends", "lobby", "checkLauncherUpdate" };
|
||||
bool updateInstalled;
|
||||
static readonly JsonSerializerOptions Json = new() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
|
||||
|
||||
@@ -248,6 +248,7 @@ public sealed class MainForm : Form
|
||||
loggedIn = settings.Token != null,
|
||||
master = Api.Base,
|
||||
language = Lang.Current,
|
||||
autoUpdateLauncher = settings.AutoUpdateLauncher,
|
||||
dev = Api.Dev || Api.Base != Api.BaseUrl
|
||||
};
|
||||
|
||||
@@ -311,19 +312,28 @@ public sealed class MainForm : Form
|
||||
case "lobbyStop": return await Site("POST", "/api/lobby/stop");
|
||||
case "releases":
|
||||
{
|
||||
if (!Api.TestWebsite && await GiteaReleases.List() is { Count: > 0 } fromGit) return fromGit;
|
||||
var r = await Api.Releases();
|
||||
if (!r.Ok) throw new Exception(r.Error ?? "Neuigkeiten nicht verfuegbar");
|
||||
return r.Json.GetProperty("releases");
|
||||
}
|
||||
case "checkLauncherUpdate":
|
||||
{
|
||||
var latest = await Api.Latest("launcher");
|
||||
return new { current = SelfUpdate.CurrentVersion, latest = latest?.version,
|
||||
available = latest != null && SelfUpdate.IsNewer(latest.version, SelfUpdate.CurrentVersion) };
|
||||
}
|
||||
case "installLauncherUpdate":
|
||||
{
|
||||
var latest = await Api.Latest("launcher") ?? throw new Exception("Kein Launcher-Update gefunden");
|
||||
LauncherLog.Info("Launcher wird aktualisiert auf " + latest.version);
|
||||
string version = await SelfUpdate.Install(latest, p => Progress("launcher", p, "Launcher-Update wird geladen …"));
|
||||
updateInstalled = true;
|
||||
LauncherLog.Info("Launcher aktualisiert auf " + version);
|
||||
BeginInvoke(Close); // die neue Version startet gerade
|
||||
return new { version };
|
||||
LauncherLog.Info("Launcher " + version + " installiert - Neustart");
|
||||
// Beenden, damit die neue Version starten kann. Haengt das Schliessen (WebView2 o.ae.), nach 5 s hart
|
||||
// beenden - sonst bleibt die alte Version offen und die neue wartet vergeblich
|
||||
BeginInvoke(() => Application.Exit());
|
||||
_ = Task.Delay(5000).ContinueWith(_ => Environment.Exit(0));
|
||||
return new { version, restarting = true };
|
||||
}
|
||||
|
||||
// --- Einstellungen
|
||||
@@ -333,6 +343,7 @@ public sealed class MainForm : Form
|
||||
settings.AutoConnect = BoolArg(args, "autoConnect") ?? settings.AutoConnect;
|
||||
settings.KeepOpen = BoolArg(args, "keepOpen") ?? settings.KeepOpen;
|
||||
settings.AutoUpdateMod = BoolArg(args, "autoUpdateMod") ?? settings.AutoUpdateMod;
|
||||
settings.AutoUpdateLauncher = BoolArg(args, "autoUpdateLauncher") ?? settings.AutoUpdateLauncher;
|
||||
if (Arg(args, "language") is "de" or "en") { settings.Language = Arg(args, "language"); Lang.Set(settings.Language); }
|
||||
settings.Save();
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user