diff --git a/ReleaseUpdater/GiteaReleaseProvider.cs b/ReleaseUpdater/ReleaseProvider.cs similarity index 98% rename from ReleaseUpdater/GiteaReleaseProvider.cs rename to ReleaseUpdater/ReleaseProvider.cs index 9f5e754..00a7f88 100644 --- a/ReleaseUpdater/GiteaReleaseProvider.cs +++ b/ReleaseUpdater/ReleaseProvider.cs @@ -6,7 +6,7 @@ namespace ReleaseUpdater; /// /// Провайдер для получения информации о релизах из Github / Gitea API. /// -public sealed class GiteaReleaseProvider +public sealed class ReleaseProvider { private static readonly JsonSerializerOptions JsonOpts = new(JsonSerializerDefaults.Web); diff --git a/ReleaseUpdater/ReleaseUpdaterFacade.cs b/ReleaseUpdater/ReleaseUpdaterFacade.cs index 6b69f84..9544b1b 100644 --- a/ReleaseUpdater/ReleaseUpdaterFacade.cs +++ b/ReleaseUpdater/ReleaseUpdaterFacade.cs @@ -29,7 +29,7 @@ public static class ReleaseUpdaterFacade /// public static async Task> GetVersionsAsync(string apiUrl, string? token = null) { - var provider = new GiteaReleaseProvider(); + var provider = new ReleaseProvider(); var releases = await provider.GetReleasesAsync(apiUrl, token); return releases.Select(r => r.TagName).ToList(); } @@ -42,7 +42,7 @@ public static class ReleaseUpdaterFacade { try { - var provider = new GiteaReleaseProvider(); + var provider = new ReleaseProvider(); var release = await provider.FindReleaseAsync(apiUrl, versionOrLatest, token) ?? throw new Exception("Release not found"); @@ -76,7 +76,7 @@ public static class ReleaseUpdaterFacade { try { - var provider = new GiteaReleaseProvider(); + var provider = new ReleaseProvider(); var release = await provider.FindReleaseAsync(apiUrl, versionOrLatest, token) ?? throw new Exception("Release not found"); diff --git a/Updater/Core/Options.cs b/Updater/Core/Options.cs index 1faabd3..abec43f 100644 --- a/Updater/Core/Options.cs +++ b/Updater/Core/Options.cs @@ -12,11 +12,14 @@ public sealed class Options /// Имя исполняемого файла приложения для перезапуска (e.g., MyBot.exe). public required string AppExe { get; init; } - /// Необязательно: подождите миллисекунды перед перезапуском (льготный период). + /// Необязательно: подождите миллисекунды перед перезапуском. public int RestartDelayMs { get; init; } = 500; + /// Необязательно: подождите миллисекунды перед запуском обновления. + public int UpdateDelayMs { get; init; } = 500; + public static string Usage => - "Usage: Updater.exe --zip --installPath --appExe [--restartDelayMs ]"; + "Usage: Updater.exe --zip --installPath --appExe [--restartDelayMs ] [--updateDelayMs ]"; /// Папрсинг CLI аргументов в Options. public static Options Parse(string[] args) @@ -42,7 +45,8 @@ public sealed class Options ZipPath = Path.GetFullPath(zip), InstallPath = Path.GetFullPath(install), AppExe = exe, - RestartDelayMs = dict.TryGetValue("restartDelayMs", out var d) && int.TryParse(d, out var n) ? n : 500 + RestartDelayMs = dict.TryGetValue("restartDelayMs", out var d) && int.TryParse(d, out var n) ? n : 500, + UpdateDelayMs = dict.TryGetValue("updateDelayMs", out var d2) && int.TryParse(d2, out var n2) ? n2 : 500 }; } diff --git a/Updater/Program.cs b/Updater/Program.cs index b5bd072..861e88d 100644 --- a/Updater/Program.cs +++ b/Updater/Program.cs @@ -19,6 +19,9 @@ internal sealed class Program return ExitCodes.InvalidArgs; } + + Thread.Sleep(options.UpdateDelayMs); + var extractor = new ZipExtractor(logger); var installer = new SafeFileInstaller(logger); var procMgr = new ProcessManager(logger);