UNPKG

electron-updater

Version:

Cross platform auto-updater for electron applications

58 lines (53 loc) 1.72 kB
var directory = require('./directory.js'), file = require('./file.js'), fs = process.versions.electron ? require('original-fs') : require('fs'), path = require('path'), util = require('util'), async = require('async') var whitelist = [ 'resources', 'default_app', 'locales' ] function copyFile(sourceDir, destDir, name, callback) { var sourceFile = path.join(sourceDir, name) var destFile = path.join(destDir, name) fs.stat(sourceFile, function (err, sourceStat) { if(err) return callback(err); fs.stat(destFile, function (err, destStat) { if(sourceStat.isFile() && (err || !destStat || (sourceStat.mtime > destStat.mtime))) { file.copy(sourceFile, destFile, callback) } else if(sourceStat.isDirectory() && whitelist.indexOf(path.basename(sourceFile)) >= 0) { copyDir(sourceFile, destFile, callback) } else { callback() } }) }) } function copyDir(sourceDir, destDir, callback) { directory.create(destDir, function () { fs.readdir(sourceDir, function (err, files) { if(err) return callback(err); async.forEach( files, function (f, callback) { copyFile(sourceDir, destDir, f, callback) }, callback) }) }) } function copy(execPath, publisher, appName, callback) { var execDir = path.join(path.dirname(execPath)) var appData = directory.appDir(publisher, appName) var electronVersion = process.versions.electron var updateDir = path.join(appData, 'updater', electronVersion) copyDir(execDir, updateDir, function (err) { if(err) return callback(err); callback(null, path.join(updateDir, path.basename(execPath))) }) } module.exports = { copy: copy }