mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-30 23:25:24 +00:00
feat: desktop app auto updates with automatic, ask first or never modes
This commit is contained in:
1 parent
8403449669
commit
1aa1bde5f7
33 files changed
+1728
-177
No files matched your search
@@ -29,6 +29,7 @@ const pty = require("node-pty");
|
||||
const WebSocket = require("ws");
|
||||
const linkedServer = require("./linked-server.cjs");
|
||||
const desktopSettings = require("./desktop-settings.cjs");
|
||||
const autoUpdates = require("./auto-updater.cjs");
|
||||
const { launchNativeRdp } = require("./native-rdp.cjs");
|
||||
const { isCloseActiveTabInput } = require("./keyboard-shortcuts.cjs");
|
||||
const { quitApp } = require("./app-quit.cjs");
|
||||
@@ -1752,6 +1753,65 @@ ipcMain.handle("save-desktop-settings", (_event, settings) => {
|
||||
return desktopSettings.saveDesktopSettings(settings);
|
||||
});
|
||||
|
||||
let appUpdater = null;
|
||||
|
||||
function startAppUpdater() {
|
||||
const kind = autoUpdates.getInstallKind({
|
||||
platform: process.platform,
|
||||
arch: process.arch,
|
||||
isPackaged: app.isPackaged,
|
||||
mas: !!process.mas,
|
||||
env: process.env,
|
||||
execPath: process.execPath,
|
||||
resourcesPath: process.resourcesPath,
|
||||
exists: (target) => fs.existsSync(target),
|
||||
readFile: (target) => fs.readFileSync(target, "utf8"),
|
||||
});
|
||||
logToFile("Updater install kind:", kind);
|
||||
appUpdater = autoUpdates.createUpdater({
|
||||
currentVersion: app.getVersion(),
|
||||
platform: process.platform,
|
||||
arch: process.arch,
|
||||
kind,
|
||||
getMode: () => desktopSettings.getDesktopSettings().updateMode,
|
||||
saveMode: (mode) =>
|
||||
desktopSettings.saveDesktopSettings({ updateMode: mode }),
|
||||
fetchReleases: async () => {
|
||||
const { net } = require("electron");
|
||||
const response = await net.fetch(autoUpdates.RELEASES_API, {
|
||||
headers: { Accept: "application/vnd.github+json" },
|
||||
});
|
||||
if (!response.ok) {
|
||||
throw new Error(`GitHub releases returned ${response.status}`);
|
||||
}
|
||||
return response.json();
|
||||
},
|
||||
loadAutoUpdater: () => require("electron-updater").autoUpdater,
|
||||
send: (state) => {
|
||||
if (mainWindow && !mainWindow.isDestroyed()) {
|
||||
mainWindow.webContents.send("desktop-update-state", state);
|
||||
}
|
||||
},
|
||||
log: logToFile,
|
||||
beforeInstall: () => {
|
||||
isQuitting = true;
|
||||
},
|
||||
});
|
||||
appUpdater.start();
|
||||
}
|
||||
|
||||
ipcMain.handle(
|
||||
"desktop-update-get-state",
|
||||
() => appUpdater?.getState() ?? null,
|
||||
);
|
||||
ipcMain.handle("desktop-update-check", () => appUpdater?.check() ?? null);
|
||||
ipcMain.handle("desktop-update-download", () => appUpdater?.download() ?? null);
|
||||
ipcMain.handle("desktop-update-install", () => appUpdater?.install() ?? false);
|
||||
ipcMain.handle(
|
||||
"desktop-update-set-mode",
|
||||
(_event, mode) => appUpdater?.setMode(mode) ?? null,
|
||||
);
|
||||
|
||||
// The server an older version of the app was pointed at, offered again when
|
||||
// linking so upgraded installs do not have to look it up.
|
||||
ipcMain.handle("get-previous-server-url", () => {
|
||||
@@ -3804,6 +3864,7 @@ app.whenReady().then(async () => {
|
||||
|
||||
createTray();
|
||||
createWindow();
|
||||
startAppUpdater();
|
||||
desktopSettings.removeOldSyncFiles();
|
||||
logToFile("=== Startup complete ===");
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user