From 0a05b137df63e5c5509b368ebb96d118fb5af99e Mon Sep 17 00:00:00 2001 From: Red-Asuka Date: Wed, 18 Dec 2024 10:57:12 +0800 Subject: [PATCH] feat(update): implement dynamic feed URL for updates based on latest version --- apps/desktop/electron-builder.yml | 4 ---- apps/desktop/src/main/update.ts | 22 ++++++++++++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/apps/desktop/electron-builder.yml b/apps/desktop/electron-builder.yml index 14f9d64cf..b605c8f2d 100644 --- a/apps/desktop/electron-builder.yml +++ b/apps/desktop/electron-builder.yml @@ -67,7 +67,3 @@ linux: maintainer: electronjs.org category: Utility npmRebuild: false -publish: - provider: generic - # TODO: change to our own server - url: http://localhost:8080/ diff --git a/apps/desktop/src/main/update.ts b/apps/desktop/src/main/update.ts index 0307b481f..9b9a2bc92 100644 --- a/apps/desktop/src/main/update.ts +++ b/apps/desktop/src/main/update.ts @@ -9,10 +9,6 @@ import pkg, { CancellationToken } from 'electron-updater' const store = new Store() as any const { autoUpdater } = pkg -if (process.env.NODE_ENV === 'development') { - autoUpdater.forceDevUpdateConfig = true -} - autoUpdater.autoDownload = false autoUpdater.autoInstallOnAppQuit = false @@ -75,6 +71,17 @@ async function showReleaseNotesWindow(lang: Lang) { } } +async function getLatestVersion(): Promise { + try { + const response = await fetch('https://community-sites.emqx.com/api/v1/all_version?product=MQTTX') + const data = await response.json() + return data.data?.[0] + } catch (error) { + console.error('Failed to get latest version:', error) + return app.getVersion() + } +} + function sendUpdateStatus(updateEvent: UpdateEvent) { const windows = BrowserWindow.getAllWindows() windows.forEach((window) => { @@ -95,6 +102,13 @@ function useAppUpdater(settings: SelectSettings) { store.set('version', version) } ipcMain.handle('check-for-updates', async () => { + if (process.env.NODE_ENV === 'development') { + autoUpdater.forceDevUpdateConfig = true + } else { + const latestVersion = await getLatestVersion() + const feedUrl = `https://www.emqx.com/en/downloads/MQTTX/${latestVersion}` + autoUpdater.setFeedURL({ provider: 'generic', url: feedUrl }) + } return await autoUpdater.checkForUpdates() }) ipcMain.handle('download-update', async () => {