updateService
src/main/services/update.service.ts
Для чого це
Автоматично перевіряє наявність нових версій і дає оператору оновитись без ручного завантаження. Підтримує Windows (.exe) і macOS (.dmg).
Перевірка оновлень
Автоматично — кожні 15 хвилин через setInterval (на відміну від інших сервісів — не ourSetTimeout).
Вручну — checkForUpdates(isForce: true) на кроці Login (крок 2).
Перед кожною перевіркою → cleanupOldInstallers() — видаляє старі .exe/.dmg з temp директорії (паттерн: golden-bride-app-*-win-x64.exe і golden-bride-app-*-mac-universal.dmg).
Два режими при знайденому оновленні
isForce: false (автоматична перевірка)
Показує dialog.showMessageBox — не блокуючий діалог:
- Версія нового релізу
- Release notes
- Текст “перезапустіть коли зручно”
- Кнопка “Зрозуміло”
isForce: true (при логіні)
Запускає повний флоу завантаження і встановлення.
Флоу завантаження (force)
-
Платформа і шлях:
- Windows:
temp/golden-bride-app-{version}-win-x64.exe - macOS:
temp/golden-bride-app-{version}-mac-universal.dmg
- Windows:
-
createUpdateWindow()— BrowserWindow 600×400,closable: false, з HTML-інтерфейсом:- Поточна і нова версія
- Release notes (скрол)
- Кнопка “Почати оновлення”
- Після кліку — прогрес-бар
-
waitForUserConfirmation()— чекає клік на кнопку через IPC (start-update-download) -
stackService.downloadUpdateWithProgress(platform, arch, path, progressCallback)— завантаження з відображенням відсотка у вікні черезupdate-progressIPC -
validateInstallerFile(path, platform)— перевірки:- Файл існує
- Розмір ≥ 50 MB (Win) або ≥ 100 MB (Mac) — захист від неповного завантаження
- Windows: перші 2 байти =
MZ(заголовок PE executable)
-
Встановлення — платформо-специфічно
Встановлення Windows
spawn(installer, ['/S'], { detached: true, stdio: 'ignore', windowsHide: true })
/S— тихий режим (без UI інсталятора)detached: true+unref()— інсталятор живе післяapp.quit()- Timeout 5 сек на
spawn— якщо не відповів → вважаємо що запустився - При помилці spawn → fallback через
execзshell: true - Після spawn →
app.quit()
Встановлення macOS
Bash-скрипт що виконується у фоні:
hdiutil imageinfo— перевірка валідності DMGhdiutil attach -nobrowse -mountrandom /tmp— монтування- Знаходить
.appв змонтованому DMG sleep 3— чекає закриття поточного додаткуrm -rf oldApp→cp -R newAppchmod -R 755— права доступуhdiutil detach— розмонтовує DMGopen appPath— запускає нову версію- Скрипт самовидаляється
Лог скрипту записується в temp/update_log.txt для діагностики.
Нюанси
- Вікно оновлення
closable: false— не дозволяє закрити під час завантаження - macOS: вікно
alwaysOnTop: true, на Windows — модальне зparent: mainWindow stop()— очищаєsetIntervalперевірок при логауті- При помилці завантаження —
dialog.showMessageBoxз текстом помилки