electron/atom/browser/api/lib/auto-updater/squirrel-update-win.js

119 lines
2.8 KiB
JavaScript
Raw Normal View History

2016-01-12 02:40:23 +00:00
var appFolder, exeName, fs, path, spawn, spawnUpdate, updateExe;
fs = require('fs');
path = require('path');
spawn = require('child_process').spawn;
2016-01-14 18:35:29 +00:00
// i.e. my-app/app-0.1.13/
2016-01-12 02:40:23 +00:00
appFolder = path.dirname(process.execPath);
2016-01-14 18:35:29 +00:00
// i.e. my-app/Update.exe
2016-01-12 02:40:23 +00:00
updateExe = path.resolve(appFolder, '..', 'Update.exe');
exeName = path.basename(process.execPath);
/*
Spawn a command and invoke the callback when it completes with an error
and the output from standard out.
*/
spawnUpdate = function(args, detached, callback) {
var error, error1, errorEmitted, spawnedProcess, stderr, stdout;
try {
spawnedProcess = spawn(updateExe, args, {
detached: detached
});
} catch (error1) {
error = error1;
2016-01-14 18:35:29 +00:00
// Shouldn't happen, but still guard it.
2016-01-12 02:40:23 +00:00
process.nextTick(function() {
return callback(error);
});
return;
}
stdout = '';
stderr = '';
spawnedProcess.stdout.on('data', function(data) {
return stdout += data;
});
spawnedProcess.stderr.on('data', function(data) {
return stderr += data;
});
errorEmitted = false;
spawnedProcess.on('error', function(error) {
errorEmitted = true;
return callback(error);
});
return spawnedProcess.on('exit', function(code, signal) {
2016-01-14 18:35:29 +00:00
// We may have already emitted an error.
2016-01-12 02:40:23 +00:00
if (errorEmitted) {
return;
}
2016-01-14 18:35:29 +00:00
// Process terminated with error.
2016-01-12 02:40:23 +00:00
if (code !== 0) {
return callback("Command failed: " + (signal != null ? signal : code) + "\n" + stderr);
}
2016-01-14 18:35:29 +00:00
// Success.
2016-01-12 02:40:23 +00:00
return callback(null, stdout);
});
};
2016-01-14 18:35:29 +00:00
// Start an instance of the installed app.
2016-01-12 02:40:23 +00:00
exports.processStart = function(callback) {
return spawnUpdate(['--processStart', exeName], true, function() {});
};
2016-01-14 18:35:29 +00:00
// Download the releases specified by the URL and write new results to stdout.
2016-01-12 02:40:23 +00:00
exports.download = function(updateURL, callback) {
return spawnUpdate(['--download', updateURL], false, function(error, stdout) {
var error1, json, ref, ref1, update;
if (error != null) {
return callback(error);
}
try {
2016-01-14 18:35:29 +00:00
// Last line of output is the JSON details about the releases
2016-01-12 02:40:23 +00:00
json = stdout.trim().split('\n').pop();
update = (ref = JSON.parse(json)) != null ? (ref1 = ref.releasesToApply) != null ? typeof ref1.pop === "function" ? ref1.pop() : void 0 : void 0 : void 0;
} catch (error1) {
return callback("Invalid result:\n" + stdout);
}
return callback(null, update);
});
};
2016-01-14 18:35:29 +00:00
// Update the application to the latest remote version specified by URL.
2016-01-12 02:40:23 +00:00
exports.update = function(updateURL, callback) {
return spawnUpdate(['--update', updateURL], false, callback);
};
2016-01-14 18:35:29 +00:00
// Is the Update.exe installed with the current application?
2016-01-12 02:40:23 +00:00
exports.supported = function() {
var error1;
try {
fs.accessSync(updateExe, fs.R_OK);
return true;
} catch (error1) {
return false;
}
};