diff --git a/bin/package.js b/bin/package.js index 4c9c8cee..56918d32 100755 --- a/bin/package.js +++ b/bin/package.js @@ -210,6 +210,7 @@ function buildDarwin (cb) { // Create .zip file (used by the auto-updater) var zipPath = path.join(config.ROOT_PATH, 'dist', BUILD_NAME + '.zip') cp.execSync(`pushd ${buildPath[0]} && zip -r -y ${zipPath} ${config.APP_NAME + '.app'} && popd`) + console.log('Created OS X .zip file.') // Create a .dmg (OS X disk image) file, for easy user installation. var dmgOpts = { @@ -239,6 +240,7 @@ function buildDarwin (cb) { if (info.type === 'step-begin') console.log(info.title + '...') }) dmg.on('finish', function (info) { + console.log('Created OS X disk image (.dmg) file.') cb(null, buildPath) }) }) @@ -247,7 +249,32 @@ function buildDarwin (cb) { } function buildWin32 (cb) { - electronPackager(Object.assign({}, all, win32), cb) + var installer = require('electron-winstaller') + + electronPackager(Object.assign({}, all, win32), function (err, buildPath) { + if (err) return cb(err) + + installer.createWindowsInstaller({ + name: config.APP_NAME, + productName: config.APP_NAME, + title: config.APP_NAME, + exe: config.APP_NAME + '.exe', + + appDirectory: buildPath[0], + outputDirectory: path.join(config.ROOT_PATH, 'dist'), + version: pkg.version, + description: config.APP_NAME, + authors: config.APP_TEAM + // iconUrl: config.APP_ICON + '.ico', + // setupIcon: config.APP_ICON + '.ico', + // certificateFile: '', + // usePackageJson: false + // loadingGif: '', + }).then(function () { + console.log('Created Windows installer.') + cb(null, buildPath) + }).catch(cb) + }) } function buildLinux (cb) { diff --git a/config.js b/config.js index 3a88c94b..b0e6fbec 100644 --- a/config.js +++ b/config.js @@ -2,13 +2,15 @@ var applicationConfigPath = require('application-config-path') var path = require('path') var APP_NAME = 'WebTorrent' +var APP_TEAM = 'The WebTorrent Project' var APP_VERSION = require('./package.json').version module.exports = { - APP_COPYRIGHT: 'Copyright © 2014-2016 The WebTorrent Project', + APP_COPYRIGHT: 'Copyright © 2014-2016 ' + APP_TEAM, APP_FILE_ICON: path.join(__dirname, 'static', 'WebTorrentFile'), APP_ICON: path.join(__dirname, 'static', 'WebTorrent'), APP_NAME: APP_NAME, + APP_TEAM: APP_TEAM, APP_VERSION: APP_VERSION, AUTO_UPDATE_URL: 'https://webtorrent.io/app/update?version=' + APP_VERSION, diff --git a/main/register-handlers.js b/main/handlers.js similarity index 98% rename from main/register-handlers.js rename to main/handlers.js index 95e46c42..9413f84a 100644 --- a/main/register-handlers.js +++ b/main/handlers.js @@ -1,6 +1,10 @@ +module.exports = { + init +} + var log = require('./log') -module.exports = function () { +function init () { if (process.platform === 'win32') { var path = require('path') var iconPath = path.join(process.resourcesPath, 'app.asar.unpacked', 'static', 'WebTorrentFile.ico') diff --git a/main/index.js b/main/index.js index cea72c7c..a9abf502 100644 --- a/main/index.js +++ b/main/index.js @@ -4,13 +4,44 @@ var app = electron.app var autoUpdater = require('./auto-updater') var config = require('../config') +var handlers = require('./handlers') var ipc = require('./ipc') var log = require('./log') var menu = require('./menu') -var registerProtocolHandler = require('./register-handlers') var shortcuts = require('./shortcuts') var windows = require('./windows') +var argv = sliceArgv(process.argv) + +if (process.platform === 'win32') { + var squirrelCmd = argv[0] + if (squirrelCmd === '--squirrel-install' || squirrelCmd === '--squirrel-updated') { + handlers.init() + + // TODO: + // - Install desktop and start menu shortcuts + // - Add explorer context menus + + // Always quit when done + app.quit() + } + if (squirrelCmd === '--squirrel-uninstall') { + // Undo anything we did in the --squirrel-install and --squirrel-updated handlers + + // TODO: implement this + + // Always quit when done + app.quit() + } + if (squirrelCmd === '--squirrel-obsolete') { + // This is called on the outgoing version of your app before we update to the new + // version - it's the opposite of --squirrel-updated + + // Always quit when done + app.quit() + } +} + // Prevent multiple instances of the app from running at the same time. New instances // signal this instance and exit. var shouldQuit = app.makeSingleInstance(function (newArgv) { @@ -32,8 +63,6 @@ if (shouldQuit) { app.quit() } -var argv = sliceArgv(process.argv) - app.on('open-file', onOpen) app.on('open-url', onOpen) app.on('will-finish-launching', function () { @@ -48,7 +77,7 @@ app.on('ready', function () { menu.init() windows.createMainWindow() shortcuts.init() - registerProtocolHandler() + if (process.platform !== 'win32') handlers.init() }) app.on('ipcReady', function () { diff --git a/package.json b/package.json index 197832ff..0a548050 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "electron-osx-sign": "^0.3.0", "electron-packager": "^5.0.0", "electron-prebuilt": "0.37.2", + "electron-winstaller": "^2.0.5", "gh-release": "^2.0.2", "path-exists": "^2.1.0", "plist": "^1.2.0",