mirror of
https://github.com/CringeStudios/element-desktop.git
synced 2025-01-31 05:29:58 +01:00
a2c5d6176f
None of this will work as it will need tweaking (at the very least I've not copied the origin migrator because that's had long enough) but these are files which already existed in their current state and so don't need re-reviewing.
85 lines
3.4 KiB
JavaScript
85 lines
3.4 KiB
JavaScript
const { app, autoUpdater, ipcMain } = require('electron');
|
|
|
|
const UPDATE_POLL_INTERVAL_MS = 60 * 60 * 1000;
|
|
const INITIAL_UPDATE_DELAY_MS = 30 * 1000;
|
|
|
|
function installUpdate() {
|
|
// for some reason, quitAndInstall does not fire the
|
|
// before-quit event, so we need to set the flag here.
|
|
global.appQuitting = true;
|
|
autoUpdater.quitAndInstall();
|
|
}
|
|
|
|
function pollForUpdates() {
|
|
try {
|
|
autoUpdater.checkForUpdates();
|
|
} catch (e) {
|
|
console.log('Couldn\'t check for update', e);
|
|
}
|
|
}
|
|
|
|
module.exports = {};
|
|
module.exports.start = function startAutoUpdate(updateBaseUrl) {
|
|
if (updateBaseUrl.slice(-1) !== '/') {
|
|
updateBaseUrl = updateBaseUrl + '/';
|
|
}
|
|
try {
|
|
let url;
|
|
// For reasons best known to Squirrel, the way it checks for updates
|
|
// is completely different between macOS and windows. On macOS, it
|
|
// hits a URL that either gives it a 200 with some json or
|
|
// 204 No Content. On windows it takes a base path and looks for
|
|
// files under that path.
|
|
if (process.platform === 'darwin') {
|
|
// include the current version in the URL we hit. Electron doesn't add
|
|
// it anywhere (apart from the User-Agent) so it's up to us. We could
|
|
// (and previously did) just use the User-Agent, but this doesn't
|
|
// rely on NSURLConnection setting the User-Agent to what we expect,
|
|
// and also acts as a convenient cache-buster to ensure that when the
|
|
// app updates it always gets a fresh value to avoid update-looping.
|
|
url = `${updateBaseUrl}macos/?localVersion=${encodeURIComponent(app.getVersion())}`;
|
|
|
|
} else if (process.platform === 'win32') {
|
|
url = `${updateBaseUrl}win32/${process.arch}/`;
|
|
} else {
|
|
// Squirrel / electron only supports auto-update on these two platforms.
|
|
// I'm not even going to try to guess which feed style they'd use if they
|
|
// implemented it on Linux, or if it would be different again.
|
|
console.log('Auto update not supported on this platform');
|
|
}
|
|
|
|
if (url) {
|
|
autoUpdater.setFeedURL(url);
|
|
// We check for updates ourselves rather than using 'updater' because we need to
|
|
// do it in the main process (and we don't really need to check every 10 minutes:
|
|
// every hour should be just fine for a desktop app)
|
|
// However, we still let the main window listen for the update events.
|
|
// We also wait a short time before checking for updates the first time because
|
|
// of squirrel on windows and it taking a small amount of time to release a
|
|
// lock file.
|
|
setTimeout(pollForUpdates, INITIAL_UPDATE_DELAY_MS);
|
|
setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS);
|
|
}
|
|
} catch (err) {
|
|
// will fail if running in debug mode
|
|
console.log('Couldn\'t enable update checking', err);
|
|
}
|
|
}
|
|
|
|
ipcMain.on('install_update', installUpdate);
|
|
ipcMain.on('check_updates', pollForUpdates);
|
|
|
|
function ipcChannelSendUpdateStatus(status) {
|
|
if (global.mainWindow) {
|
|
global.mainWindow.webContents.send('check_updates', status);
|
|
}
|
|
}
|
|
|
|
autoUpdater.on('update-available', function() {
|
|
ipcChannelSendUpdateStatus(true);
|
|
}).on('update-not-available', function() {
|
|
ipcChannelSendUpdateStatus(false);
|
|
}).on('error', function(error) {
|
|
ipcChannelSendUpdateStatus(error.message);
|
|
});
|