Fix Exception when dropping .torrent file onto Dock icon when app is closed

Fixes #154
This commit is contained in:
Feross Aboukhadijeh
2016-03-19 15:59:22 -07:00
parent e9db07e855
commit 4f40e5d963
7 changed files with 35 additions and 18 deletions

View File

@@ -1,3 +1,4 @@
console.time('init')
require('./main') require('./main')
// report crashes // report crashes

View File

@@ -1,5 +1,3 @@
var startTime = Date.now()
var electron = require('electron') var electron = require('electron')
var ipc = require('./ipc') var ipc = require('./ipc')
var menu = require('./menu') var menu = require('./menu')
@@ -8,8 +6,11 @@ var windows = require('./windows')
var app = electron.app var app = electron.app
app.on('open-file', onOpen)
app.on('open-url', onOpen)
app.ipcReady = false // main window has finished loading and IPC is ready
app.isQuitting = false app.isQuitting = false
app.startTime = startTime
app.on('ready', function () { app.on('ready', function () {
menu.init() menu.init()
@@ -17,9 +18,6 @@ app.on('ready', function () {
shortcuts.init() shortcuts.init()
}) })
app.on('open-file', onOpen)
app.on('open-url', onOpen)
app.on('before-quit', function () { app.on('before-quit', function () {
app.isQuitting = true app.isQuitting = true
}) })
@@ -42,5 +40,13 @@ ipc.init()
function onOpen (e, torrentId) { function onOpen (e, torrentId) {
e.preventDefault() e.preventDefault()
windows.main.send('dispatch', 'openFiles', torrentId) console.log(app.ipcReady)
if (app.ipcReady) {
openFiles()
} else {
app.on('ipcReady', openFiles)
}
function openFiles () {
windows.main.send('dispatch', 'openFiles', torrentId)
}
} }

View File

@@ -4,6 +4,7 @@ module.exports = {
var debug = require('debug')('webtorrent-app:ipcMain') var debug = require('debug')('webtorrent-app:ipcMain')
var electron = require('electron') var electron = require('electron')
var app = electron.app var app = electron.app
var ipcMain = electron.ipcMain var ipcMain = electron.ipcMain
var powerSaveBlocker = electron.powerSaveBlocker var powerSaveBlocker = electron.powerSaveBlocker
@@ -15,6 +16,12 @@ var windows = require('./windows')
var powerSaveBlockID = 0 var powerSaveBlockID = 0
function init () { function init () {
ipcMain.on('ipcReady', function (e) {
console.timeEnd('init')
app.ipcReady = true
app.emit('ipcReady')
})
ipcMain.on('showOpenTorrentFile', function (e) { ipcMain.on('showOpenTorrentFile', function (e) {
menu.showOpenTorrentFile() menu.showOpenTorrentFile()
}) })

View File

@@ -7,12 +7,14 @@ module.exports = {
toggleFullScreen: toggleFullScreen toggleFullScreen: toggleFullScreen
} }
var config = require('../config')
var debug = require('debug')('webtorrent-app:menu') var debug = require('debug')('webtorrent-app:menu')
var electron = require('electron') var electron = require('electron')
var windows = require('./windows')
var app = electron.app var app = electron.app
var config = require('../config')
var windows = require('./windows')
var appMenu, dockMenu var appMenu, dockMenu
function init () { function init () {
@@ -51,7 +53,6 @@ function toggleDevTools () {
function reloadWindow () { function reloadWindow () {
debug('reloadWindow') debug('reloadWindow')
if (windows.main) { if (windows.main) {
app.startTime = Date.now()
windows.main.webContents.reloadIgnoringCache() windows.main.webContents.reloadIgnoringCache()
} }
} }

View File

@@ -4,11 +4,12 @@ module.exports = {
var electron = require('electron') var electron = require('electron')
var localShortcut = require('electron-localshortcut') var localShortcut = require('electron-localshortcut')
var menu = require('./menu')
var windows = require('./windows')
var globalShortcut = electron.globalShortcut var globalShortcut = electron.globalShortcut
var menu = require('./menu')
var windows = require('./windows')
function init () { function init () {
// Special "media key" for play/pause, available on some keyboards // Special "media key" for play/pause, available on some keyboards
globalShortcut.register('MediaPlayPause', () => windows.main.send('dispatch', 'playPause')) globalShortcut.register('MediaPlayPause', () => windows.main.send('dispatch', 'playPause'))

View File

@@ -3,19 +3,19 @@ var windows = module.exports = {
createMainWindow: createMainWindow createMainWindow: createMainWindow
} }
var config = require('../config')
var debug = require('debug')('webtorrent-app:windows')
var electron = require('electron') var electron = require('electron')
var ipcMain = electron.ipcMain
var menu = require('./menu')
var app = electron.app var app = electron.app
var ipcMain = electron.ipcMain
var config = require('../config')
var menu = require('./menu')
function createMainWindow () { function createMainWindow () {
var win = windows.main = new electron.BrowserWindow({ var win = windows.main = new electron.BrowserWindow({
autoHideMenuBar: true, // Hide top menu bar unless Alt key is pressed (Windows, Linux) autoHideMenuBar: true, // Hide top menu bar unless Alt key is pressed (Windows, Linux)
backgroundColor: '#282828', backgroundColor: '#282828',
darkTheme: true, // Forces dark theme (GTK+3 only) darkTheme: true, // Forces dark theme (GTK+3)
icon: config.APP_ICON, icon: config.APP_ICON,
minWidth: 375, minWidth: 375,
minHeight: 38 + (120 * 2), // header height + 2 torrents minHeight: 38 + (120 * 2), // header height + 2 torrents
@@ -32,7 +32,6 @@ function createMainWindow () {
}) })
win.webContents.on('did-finish-load', function () { win.webContents.on('did-finish-load', function () {
debug('startup time: %sms', Date.now() - app.startTime)
win.show() win.show()
}) })

View File

@@ -246,6 +246,8 @@ function dispatch (action, ...args) {
} }
function setupIpc () { function setupIpc () {
ipcRenderer.send('ipcReady')
ipcRenderer.on('dispatch', function (e, action, ...args) { ipcRenderer.on('dispatch', function (e, action, ...args) {
dispatch(action, ...args) dispatch(action, ...args)
}) })