using System; using System.Threading.Tasks; using System.Windows.Forms; using Электронная_Фармация.Classes; namespace Электронная_Фармация.HelpForms { public partial class HF_UpdateAvailable : Form { private readonly UpdateCheckResult _result; private bool _updating; public HF_UpdateAvailable(UpdateCheckResult result) { _result = result ?? throw new ArgumentNullException(nameof(result)); InitializeComponent(); UiThemeHelper.ApplyToControlTree(this); var latest = string.IsNullOrWhiteSpace(_result.LatestVersion) ? "?" : _result.LatestVersion; var local = string.IsNullOrWhiteSpace(_result.LocalVersion) ? "?" : _result.LocalVersion; lblMessage.Text = $"Доступно новое обновление {latest} (у вас {local}).{Environment.NewLine}{Environment.NewLine}" + "Нажмите «Обновить» — программа скачает и установит новую версию сама." + Environment.NewLine + "Локальная база и данные сохранятся."; btnDownload.Text = "Обновить"; } private async void btnDownload_Click(object sender, EventArgs e) { if (_updating) { return; } if (string.IsNullOrWhiteSpace(_result.DownloadUrl) && string.IsNullOrWhiteSpace(_result.ReleaseUrl)) { UiDialogs.ShowError("Ссылка на обновление не задана.", "Обновление", this); return; } _updating = true; btnDownload.Enabled = false; btnExit.Enabled = false; ControlBox = false; var progress = new Progress(msg => { lblMessage.Text = msg; }); try { await AutoUpdater.ApplyUpdateAsync(_result, progress); lblMessage.Text = "Обновление скачано. Перезапуск..."; DialogResult = DialogResult.OK; Application.Exit(); } catch (Exception ex) { AppDebugLog.Error("Update", "Автообновление не удалось", ex); _updating = false; btnDownload.Enabled = true; btnExit.Enabled = true; ControlBox = true; UiDialogs.ShowError( "Не удалось установить обновление автоматически." + Environment.NewLine + ex.Message, "Обновление", this); } } private void btnExit_Click(object sender, EventArgs e) { if (_updating) { return; } DialogResult = DialogResult.Abort; Close(); } private void HF_UpdateAvailable_FormClosing(object sender, FormClosingEventArgs e) { if (_updating) { e.Cancel = true; return; } // Крестик / Alt+F4 — выход из приложения (не пускать в работу). if (DialogResult != DialogResult.Abort && DialogResult != DialogResult.OK) { DialogResult = DialogResult.Abort; } } } }