Move unrelated code out of menu.js and ipc.js
This commit is contained in:
187
main/ipc.js
187
main/ipc.js
@@ -6,9 +6,12 @@ var electron = require('electron')
|
||||
|
||||
var app = electron.app
|
||||
|
||||
var dialog = require('./dialog')
|
||||
var dock = require('./dock')
|
||||
var log = require('./log')
|
||||
var menu = require('./menu')
|
||||
var powerSaveBlocker = require('./power-save-blocker')
|
||||
var shell = require('./shell')
|
||||
var shortcuts = require('./shortcuts')
|
||||
var vlc = require('./vlc')
|
||||
var windows = require('./windows')
|
||||
@@ -20,15 +23,15 @@ var messageQueueMainToWebTorrent = []
|
||||
var vlcProcess
|
||||
|
||||
function init () {
|
||||
var ipcMain = electron.ipcMain
|
||||
var ipc = electron.ipcMain
|
||||
|
||||
ipcMain.on('ipcReady', function (e) {
|
||||
ipc.on('ipcReady', function (e) {
|
||||
windows.main.show()
|
||||
app.ipcReady = true
|
||||
app.emit('ipcReady')
|
||||
})
|
||||
|
||||
ipcMain.on('ipcReadyWebTorrent', function (e) {
|
||||
ipc.on('ipcReadyWebTorrent', function (e) {
|
||||
app.ipcReadyWebTorrent = true
|
||||
log('sending %d queued messages from the main win to the webtorrent window',
|
||||
messageQueueMainToWebTorrent.length)
|
||||
@@ -38,109 +41,111 @@ function init () {
|
||||
})
|
||||
})
|
||||
|
||||
ipcMain.on('showOpenTorrentFile', () => menu.showOpenTorrentFile())
|
||||
/**
|
||||
* Dialog
|
||||
*/
|
||||
|
||||
ipcMain.on('setBounds', function (e, bounds, maximize) {
|
||||
setBounds(bounds, maximize)
|
||||
})
|
||||
ipc.on('openTorrentFile', () => dialog.openTorrentFile())
|
||||
|
||||
ipcMain.on('setAspectRatio', function (e, aspectRatio) {
|
||||
setAspectRatio(aspectRatio)
|
||||
})
|
||||
/**
|
||||
* Dock
|
||||
*/
|
||||
|
||||
ipcMain.on('setBadge', function (e, text) {
|
||||
setBadge(text)
|
||||
})
|
||||
ipc.on('setBadge', (e, ...args) => dock.setBadge(...args))
|
||||
ipc.on('downloadFinished', (e, ...args) => dock.downloadFinished(...args))
|
||||
|
||||
ipcMain.on('setProgress', function (e, progress) {
|
||||
setProgress(progress)
|
||||
})
|
||||
/**
|
||||
* Events
|
||||
*/
|
||||
|
||||
ipcMain.on('toggleFullScreen', function (e, flag) {
|
||||
windows.main.toggleFullScreen(flag)
|
||||
})
|
||||
|
||||
ipcMain.on('setTitle', function (e, title) {
|
||||
windows.main.win.setTitle(title)
|
||||
})
|
||||
|
||||
ipcMain.on('openItem', function (e, path) {
|
||||
ipc.on('show', (e, ...args) => windows.main.show(...args))
|
||||
log('open item: ' + path)
|
||||
electron.shell.openItem(path)
|
||||
})
|
||||
|
||||
ipcMain.on('showItemInFolder', function (e, path) {
|
||||
log('show item in folder: ' + path)
|
||||
electron.shell.showItemInFolder(path)
|
||||
})
|
||||
|
||||
ipcMain.on('blockPowerSave', () => powerSaveBlocker.start())
|
||||
ipcMain.on('unblockPowerSave', () => powerSaveBlocker.stop())
|
||||
|
||||
ipcMain.on('onPlayerOpen', function () {
|
||||
ipc.on('onPlayerOpen', function () {
|
||||
menu.onPlayerOpen()
|
||||
shortcuts.onPlayerOpen()
|
||||
})
|
||||
|
||||
ipcMain.on('onPlayerClose', function () {
|
||||
ipc.on('onPlayerClose', function () {
|
||||
menu.onPlayerClose()
|
||||
shortcuts.onPlayerOpen()
|
||||
})
|
||||
|
||||
ipcMain.on('downloadFinished', function (e, filePath) {
|
||||
if (app.dock) {
|
||||
// Bounces the Downloads stack if the filePath is inside the Downloads folder.
|
||||
app.dock.downloadFinished(filePath)
|
||||
}
|
||||
})
|
||||
/**
|
||||
* Power Save Blocker
|
||||
*/
|
||||
|
||||
ipcMain.on('checkForVLC', function (e) {
|
||||
ipc.on('blockPowerSave', () => powerSaveBlocker.start())
|
||||
ipc.on('unblockPowerSave', () => powerSaveBlocker.stop())
|
||||
|
||||
/**
|
||||
* Shell
|
||||
*/
|
||||
|
||||
ipc.on('openItem', (e, ...args) => shell.openItem(...args))
|
||||
ipc.on('showItemInFolder', (e, ...args) => shell.showItemInFolder(...args))
|
||||
|
||||
/**
|
||||
* Windows: Main
|
||||
*/
|
||||
|
||||
var main = windows.main
|
||||
|
||||
ipc.on('setAspectRatio', (e, ...args) => main.setAspectRatio(...args))
|
||||
ipc.on('setBounds', (e, ...args) => main.setBounds(...args))
|
||||
ipc.on('setProgress', (e, ...args) => main.setProgress(...args))
|
||||
ipc.on('setTitle', (e, ...args) => main.setTitle(...args))
|
||||
ipc.on('show', () => main.show())
|
||||
ipc.on('toggleFullScreen', (e, ...args) => main.toggleFullScreen(...args))
|
||||
|
||||
/**
|
||||
* VLC
|
||||
* TODO: Move most of this code to vlc.js
|
||||
*/
|
||||
|
||||
ipc.on('checkForVLC', function (e) {
|
||||
vlc.checkForVLC(function (isInstalled) {
|
||||
windows.main.send('checkForVLC', isInstalled)
|
||||
})
|
||||
})
|
||||
|
||||
ipcMain.on('vlcPlay', function (e, url) {
|
||||
ipc.on('vlcPlay', function (e, url) {
|
||||
var args = ['--play-and-exit', '--video-on-top', '--no-video-title-show', '--quiet', url]
|
||||
console.log('Running vlc ' + args.join(' '))
|
||||
log('Running vlc ' + args.join(' '))
|
||||
|
||||
vlc.spawn(args, function (err, proc) {
|
||||
if (err) return windows.main.send('dispatch', 'vlcNotFound')
|
||||
if (err) return windows.main.dispatch('vlcNotFound')
|
||||
vlcProcess = proc
|
||||
|
||||
// If it works, close the modal after a second
|
||||
var closeModalTimeout = setTimeout(() =>
|
||||
windows.main.send('dispatch', 'exitModal'), 1000)
|
||||
windows.main.dispatch('exitModal'), 1000)
|
||||
|
||||
vlcProcess.on('close', function (code) {
|
||||
clearTimeout(closeModalTimeout)
|
||||
if (!vlcProcess) return // Killed
|
||||
console.log('VLC exited with code ', code)
|
||||
log('VLC exited with code ', code)
|
||||
if (code === 0) {
|
||||
windows.main.send('dispatch', 'backToList')
|
||||
windows.main.dispatch('backToList')
|
||||
} else {
|
||||
windows.main.send('dispatch', 'vlcNotFound')
|
||||
windows.main.dispatch('vlcNotFound')
|
||||
}
|
||||
vlcProcess = null
|
||||
})
|
||||
|
||||
vlcProcess.on('error', function (e) {
|
||||
console.log('VLC error', e)
|
||||
log('VLC error', e)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
ipcMain.on('vlcQuit', function () {
|
||||
ipc.on('vlcQuit', function () {
|
||||
if (!vlcProcess) return
|
||||
console.log('Killing VLC, pid ' + vlcProcess.pid)
|
||||
log('Killing VLC, pid ' + vlcProcess.pid)
|
||||
vlcProcess.kill('SIGKILL') // kill -9
|
||||
vlcProcess = null
|
||||
})
|
||||
|
||||
// Capture all events
|
||||
var oldEmit = ipcMain.emit
|
||||
ipcMain.emit = function (name, e, ...args) {
|
||||
var oldEmit = ipc.emit
|
||||
ipc.emit = function (name, e, ...args) {
|
||||
// Relay messages between the main window and the WebTorrent hidden window
|
||||
if (name.startsWith('wt-') && !app.isQuitting) {
|
||||
if (e.sender.browserWindowOptions.title === 'webtorrent-hidden-window') {
|
||||
@@ -163,68 +168,6 @@ function init () {
|
||||
}
|
||||
|
||||
// Emit all other events normally
|
||||
oldEmit.call(ipcMain, name, e, ...args)
|
||||
oldEmit.call(ipc, name, e, ...args)
|
||||
}
|
||||
}
|
||||
|
||||
function setBounds (bounds, maximize) {
|
||||
// Do nothing in fullscreen
|
||||
if (!windows.main.win || windows.main.win.isFullScreen()) {
|
||||
log('setBounds: not setting bounds because we\'re in full screen')
|
||||
return
|
||||
}
|
||||
|
||||
// Maximize or minimize, if the second argument is present
|
||||
var willBeMaximized
|
||||
if (maximize === true) {
|
||||
if (!windows.main.win.isMaximized()) {
|
||||
log('setBounds: maximizing')
|
||||
windows.main.win.maximize()
|
||||
}
|
||||
willBeMaximized = true
|
||||
} else if (maximize === false) {
|
||||
if (windows.main.win.isMaximized()) {
|
||||
log('setBounds: unmaximizing')
|
||||
windows.main.win.unmaximize()
|
||||
}
|
||||
willBeMaximized = false
|
||||
} else {
|
||||
willBeMaximized = windows.main.win.isMaximized()
|
||||
}
|
||||
|
||||
// Assuming we're not maximized or maximizing, set the window size
|
||||
if (!willBeMaximized) {
|
||||
log('setBounds: setting bounds to ' + JSON.stringify(bounds))
|
||||
if (bounds.x === null && bounds.y === null) {
|
||||
// X and Y not specified? By default, center on current screen
|
||||
var scr = electron.screen.getDisplayMatching(windows.main.win.getBounds())
|
||||
bounds.x = Math.round(scr.bounds.x + scr.bounds.width / 2 - bounds.width / 2)
|
||||
bounds.y = Math.round(scr.bounds.y + scr.bounds.height / 2 - bounds.height / 2)
|
||||
log('setBounds: centered to ' + JSON.stringify(bounds))
|
||||
}
|
||||
windows.main.win.setBounds(bounds, true)
|
||||
} else {
|
||||
log('setBounds: not setting bounds because of window maximization')
|
||||
}
|
||||
}
|
||||
|
||||
function setAspectRatio (aspectRatio) {
|
||||
log('setAspectRatio %o', aspectRatio)
|
||||
if (!windows.main.win) return
|
||||
windows.main.win.setAspectRatio(aspectRatio)
|
||||
}
|
||||
|
||||
// Display string in dock badging area (OS X)
|
||||
function setBadge (text) {
|
||||
log('setBadge %s', text)
|
||||
if (app.dock) {
|
||||
app.dock.setBadge(String(text))
|
||||
}
|
||||
}
|
||||
|
||||
// Show progress bar. Valid range is [0, 1]. Remove when < 0; indeterminate when > 1.
|
||||
function setProgress (progress) {
|
||||
log('setProgress %s', progress)
|
||||
if (!windows.main.win) return
|
||||
windows.main.win.setProgressBar(progress)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user