mirror of
https://github.com/Tyrrrz/DiscordChatExporter.git
synced 2026-03-31 09:33:03 -06:00
* Add DISCORDCHATEXPORTER_DISABLE_UPDATE env var to disable auto-update in GUI Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com> Agent-Logs-Url: https://github.com/Tyrrrz/DiscordChatExporter/sessions/158dba86-9958-4f57-ab22-174e0606b42f * Rename IsAutoUpdateDisabled to IsAutoUpdateAllowed and env var to DISCORDCHATEXPORTER_ALLOW_AUTO_UPDATE Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com> Agent-Logs-Url: https://github.com/Tyrrrz/DiscordChatExporter/sessions/aa3944a4-e542-4770-8d17-2acb2c958ce9 * Refine IsAutoUpdateAllowed: group in (), invert, rename v to env, only accept false Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com> Agent-Logs-Url: https://github.com/Tyrrrz/DiscordChatExporter/sessions/1467eee2-3069-4f0b-abdf-b1dc65e00a9a * Fix CSharpier formatting: move is { } env to indented new line Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com> Agent-Logs-Url: https://github.com/Tyrrrz/DiscordChatExporter/sessions/7933cfe4-ecad-4697-8b9c-ee3991aa147e --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com>
95 lines
2.6 KiB
C#
95 lines
2.6 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Threading.Tasks;
|
|
using Onova;
|
|
using Onova.Exceptions;
|
|
using Onova.Services;
|
|
|
|
namespace DiscordChatExporter.Gui.Services;
|
|
|
|
public class UpdateService(SettingsService settingsService) : IDisposable
|
|
{
|
|
private readonly IUpdateManager? _updateManager =
|
|
OperatingSystem.IsWindows() && StartOptions.Current.IsAutoUpdateAllowed
|
|
? new UpdateManager(
|
|
new GithubPackageResolver(
|
|
"Tyrrrz",
|
|
"DiscordChatExporter",
|
|
// Examples:
|
|
// DiscordChatExporter.win-arm64.zip
|
|
// DiscordChatExporter.win-x64.zip
|
|
// DiscordChatExporter.linux-x64.zip
|
|
$"DiscordChatExporter.{RuntimeInformation.RuntimeIdentifier}.zip"
|
|
),
|
|
new ZipPackageExtractor()
|
|
)
|
|
: null;
|
|
|
|
private Version? _updateVersion;
|
|
private bool _updatePrepared;
|
|
private bool _updaterLaunched;
|
|
|
|
public async ValueTask<Version?> CheckForUpdatesAsync()
|
|
{
|
|
if (_updateManager is null)
|
|
return null;
|
|
|
|
if (!settingsService.IsAutoUpdateEnabled)
|
|
return null;
|
|
|
|
var check = await _updateManager.CheckForUpdatesAsync();
|
|
return check.CanUpdate ? check.LastVersion : null;
|
|
}
|
|
|
|
public async ValueTask PrepareUpdateAsync(Version version)
|
|
{
|
|
if (_updateManager is null)
|
|
return;
|
|
|
|
if (!settingsService.IsAutoUpdateEnabled)
|
|
return;
|
|
|
|
try
|
|
{
|
|
await _updateManager.PrepareUpdateAsync(_updateVersion = version);
|
|
_updatePrepared = true;
|
|
}
|
|
catch (UpdaterAlreadyLaunchedException)
|
|
{
|
|
// Ignore race conditions
|
|
}
|
|
catch (LockFileNotAcquiredException)
|
|
{
|
|
// Ignore race conditions
|
|
}
|
|
}
|
|
|
|
public void FinalizeUpdate(bool needRestart)
|
|
{
|
|
if (_updateManager is null)
|
|
return;
|
|
|
|
if (!settingsService.IsAutoUpdateEnabled)
|
|
return;
|
|
|
|
if (_updateVersion is null || !_updatePrepared || _updaterLaunched)
|
|
return;
|
|
|
|
try
|
|
{
|
|
_updateManager.LaunchUpdater(_updateVersion, needRestart);
|
|
_updaterLaunched = true;
|
|
}
|
|
catch (UpdaterAlreadyLaunchedException)
|
|
{
|
|
// Ignore race conditions
|
|
}
|
|
catch (LockFileNotAcquiredException)
|
|
{
|
|
// Ignore race conditions
|
|
}
|
|
}
|
|
|
|
public void Dispose() => _updateManager?.Dispose();
|
|
}
|