mirror of
https://github.com/heyman/heynote.git
synced 2025-08-17 18:11:12 +02:00
Add auto update support
This commit is contained in:
@ -1,3 +1,12 @@
|
||||
export const WINDOW_CLOSE_EVENT = "window-close"
|
||||
export const OPEN_SETTINGS_EVENT = "open-settings"
|
||||
export const SETTINGS_CHANGE_EVENT = "settings-change"
|
||||
|
||||
export const UPDATE_AVAILABLE_EVENT = "update-available"
|
||||
export const UPDATE_NOT_AVAILABLE_EVENT = "update-not-available"
|
||||
export const UPDATE_DOWNLOADED = "update-downloaded"
|
||||
export const UPDATE_ERROR = "update-error"
|
||||
export const UPDATE_DOWNLOAD_PROGRESS = "update-download-progress"
|
||||
|
||||
export const UPDATE_START_DOWNLOAD = "auto-update:startDownload"
|
||||
export const UPDATE_INSTALL_AND_RESTART = "auto-update:installAndRestart"
|
||||
|
70
electron/main/auto-update.ts
Normal file
70
electron/main/auto-update.ts
Normal file
@ -0,0 +1,70 @@
|
||||
import { autoUpdater } from "electron-updater"
|
||||
import { app, dialog, ipcMain } from "electron"
|
||||
|
||||
import {
|
||||
UPDATE_AVAILABLE_EVENT,
|
||||
UPDATE_NOT_AVAILABLE_EVENT,
|
||||
UPDATE_DOWNLOADED,
|
||||
UPDATE_DOWNLOAD_PROGRESS,
|
||||
UPDATE_ERROR,
|
||||
UPDATE_START_DOWNLOAD,
|
||||
UPDATE_INSTALL_AND_RESTART,
|
||||
} from '../constants'
|
||||
|
||||
|
||||
// will reference the main window
|
||||
let window
|
||||
|
||||
// configure logging
|
||||
const log = require('electron-log');
|
||||
|
||||
autoUpdater.logger = log
|
||||
autoUpdater.logger.transports.file.level = "info"
|
||||
|
||||
autoUpdater.autoDownload = false
|
||||
|
||||
autoUpdater.on('error', (error) => {
|
||||
window?.webContents.send(UPDATE_ERROR, error == null ? "unknown" : (error.stack || error).toString())
|
||||
//dialog.showErrorBox('Error: ', error == null ? "unknown" : (error.stack || error).toString())
|
||||
})
|
||||
|
||||
autoUpdater.on('update-available', (info) => {
|
||||
window?.webContents.send(UPDATE_AVAILABLE_EVENT, {
|
||||
version: info.version,
|
||||
releaseDate: info.releaseDate,
|
||||
currentVersion: app.getVersion(),
|
||||
})
|
||||
})
|
||||
|
||||
autoUpdater.on('update-not-available', () => {
|
||||
window?.webContents.send(UPDATE_NOT_AVAILABLE_EVENT)
|
||||
})
|
||||
|
||||
autoUpdater.on('update-downloaded', () => {
|
||||
window?.webContents.send(UPDATE_DOWNLOADED)
|
||||
})
|
||||
|
||||
autoUpdater.on('download-progress', (info) => {
|
||||
window?.webContents.send(UPDATE_DOWNLOAD_PROGRESS, {
|
||||
percent: info.percent,
|
||||
total: info.total,
|
||||
transferred: info.transferred,
|
||||
bytesPerSecond: info.bytesPerSecond,
|
||||
})
|
||||
})
|
||||
|
||||
// handle messages from Vue components
|
||||
ipcMain.handle(UPDATE_START_DOWNLOAD, () => {
|
||||
autoUpdater.downloadUpdate()
|
||||
})
|
||||
|
||||
ipcMain.handle(UPDATE_INSTALL_AND_RESTART, () => {
|
||||
setImmediate(() => autoUpdater.quitAndInstall())
|
||||
})
|
||||
|
||||
export function checkForUpdates(win) {
|
||||
window = win
|
||||
|
||||
// check for updates
|
||||
autoUpdater.checkForUpdates()
|
||||
}
|
@ -2,12 +2,15 @@ import { app, BrowserWindow, shell, ipcMain, Menu, nativeTheme, globalShortcut }
|
||||
import { release } from 'node:os'
|
||||
import { join } from 'node:path'
|
||||
import * as jetpack from "fs-jetpack";
|
||||
|
||||
import menu from './menu'
|
||||
import { initialContent, initialDevContent } from '../initial-content'
|
||||
import { WINDOW_CLOSE_EVENT, SETTINGS_CHANGE_EVENT } from '../constants';
|
||||
import CONFIG from "../config"
|
||||
import { onBeforeInputEvent } from "../keymap"
|
||||
import { isMac } from '../detect-platform';
|
||||
import { checkForUpdates } from './auto-update';
|
||||
|
||||
|
||||
// The built directory structure
|
||||
//
|
||||
@ -134,7 +137,9 @@ async function createWindow() {
|
||||
})
|
||||
}
|
||||
|
||||
app.whenReady().then(createWindow)
|
||||
app.whenReady().then(createWindow).then(async () => {
|
||||
checkForUpdates(win)
|
||||
})
|
||||
|
||||
app.on('window-all-closed', () => {
|
||||
win = null
|
||||
|
@ -2,7 +2,18 @@ const { contextBridge } = require('electron')
|
||||
import darkMode from "./theme-mode"
|
||||
import { isMac, isWindows, isLinux } from "../detect-platform"
|
||||
import { ipcRenderer } from "electron"
|
||||
import { WINDOW_CLOSE_EVENT, OPEN_SETTINGS_EVENT, SETTINGS_CHANGE_EVENT } from "../constants"
|
||||
import {
|
||||
WINDOW_CLOSE_EVENT,
|
||||
OPEN_SETTINGS_EVENT,
|
||||
SETTINGS_CHANGE_EVENT,
|
||||
UPDATE_AVAILABLE_EVENT,
|
||||
UPDATE_ERROR,
|
||||
UPDATE_DOWNLOAD_PROGRESS,
|
||||
UPDATE_NOT_AVAILABLE_EVENT,
|
||||
UPDATE_START_DOWNLOAD,
|
||||
UPDATE_INSTALL_AND_RESTART,
|
||||
UPDATE_DOWNLOADED,
|
||||
} from "../constants"
|
||||
import CONFIG from "../config"
|
||||
|
||||
//contextBridge.exposeInMainWorld("platform", )
|
||||
@ -51,6 +62,23 @@ contextBridge.exposeInMainWorld("heynote", {
|
||||
onSettingsChange(callback) {
|
||||
ipcRenderer.on(SETTINGS_CHANGE_EVENT, (event, settings) => callback(settings))
|
||||
},
|
||||
|
||||
autoUpdate: {
|
||||
callbacks(callbacks) {
|
||||
ipcRenderer.on(UPDATE_AVAILABLE_EVENT, (event, info) => callbacks?.updateAvailable(info))
|
||||
ipcRenderer.on(UPDATE_NOT_AVAILABLE_EVENT, (event) => callbacks?.updateNotAvailable())
|
||||
ipcRenderer.on(UPDATE_DOWNLOADED, (event) => callbacks?.updateDownloaded())
|
||||
ipcRenderer.on(UPDATE_ERROR, (event, error) => callbacks?.updateError(error))
|
||||
ipcRenderer.on(UPDATE_DOWNLOAD_PROGRESS, (event, progress) => callbacks?.updateDownloadProgress(progress))
|
||||
},
|
||||
|
||||
startDownload() {
|
||||
ipcRenderer.invoke(UPDATE_START_DOWNLOAD)
|
||||
},
|
||||
installAndRestart() {
|
||||
ipcRenderer.invoke(UPDATE_INSTALL_AND_RESTART)
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user