123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- const { autoUpdater } = require("electron-updater");
- const ProgressBar = require('electron-progressbar');
- const { dialog } = require('electron');
- class Updater {
- run(mainWindow) {
- let progressBar = null;
- autoUpdater.autoDownload = false;
- autoUpdater.on('checking-for-update', () => {
- console.log('Checking for update...');
- });
- autoUpdater.on('update-available', (info) => {
- console.log('Update available:', info.version);
- dialog.showMessageBox(mainWindow, {
- type: 'question',
- buttons: ['Yes', 'No'],
- defaultId: 0,
- cancelId: 1,
- title: 'Update Available',
- message: `Version ${info.version} is available. Do you want to download it now?`
- }).then(result => {
- if (result.response === 0) {
- if (progressBar) {
- progressBar.close();
- progressBar = null;
- }
- progressBar = new ProgressBar({
- indeterminate: false,
- text: "Downloading update...",
- detail: "Please wait...",
- browserWindow: {
- parent: mainWindow,
- modal: true,
- closable: false,
- minimizable: false,
- maximizable: false,
- width: 400,
- height: 120
- }
- });
- autoUpdater.downloadUpdate();
- }
- });
- });
- autoUpdater.on('update-not-available', () => {
- console.log('No update available.');
- });
- autoUpdater.on("download-progress", (progress) => {
- console.log(`Downloaded ${Math.round(progress.percent)}%`);
- if (progressBar && !progressBar.isCompleted()) {
- progressBar.value = Math.floor(progress.percent);
- progressBar.detail = `Downloaded ${Math.round(progress.percent)}% (${(progress.transferred / 1024 / 1024).toFixed(2)} MB of ${(progress.total / 1024 / 1024).toFixed(2)} MB)`;
- }
- });
- autoUpdater.on("update-downloaded", (info) => {
- console.log("Update downloaded:", info.version);
- if (progressBar && !progressBar.isCompleted()) {
- progressBar.setCompleted();
- progressBar = null;
- }
- dialog.showMessageBox(mainWindow, {
- type: "info",
- buttons: ["Restart Now", "Later"],
- title: "Update Ready",
- message: "A new version has been downloaded. Restart the application to apply the updates?"
- }).then((result) => {
- if (result.response === 0) {
- autoUpdater.quitAndInstall();
- }
- });
- });
- autoUpdater.on("error", (err) => {
- console.error("Update error:", err);
- if (progressBar && !progressBar.isCompleted()) {
- progressBar.close();
- progressBar = null;
- }
- });
- autoUpdater.checkForUpdates();
- }
- }
- module.exports = Updater;
|