250 lines
5.9 KiB
JavaScript
250 lines
5.9 KiB
JavaScript
module.exports = {
|
|
init,
|
|
setModule
|
|
}
|
|
|
|
const electron = require('electron')
|
|
|
|
const app = electron.app
|
|
|
|
const log = require('./log')
|
|
const menu = require('./menu')
|
|
const windows = require('./windows')
|
|
|
|
// Messages from the main process, to be sent once the WebTorrent process starts
|
|
const messageQueueMainToWebTorrent = []
|
|
|
|
// Will hold modules injected from the app that will be used on fired
|
|
// IPC events.
|
|
const modules = {}
|
|
|
|
function setModule (name, module) {
|
|
modules[name] = module
|
|
}
|
|
|
|
function init () {
|
|
const ipc = electron.ipcMain
|
|
|
|
ipc.once('ipcReady', function (e) {
|
|
app.ipcReady = true
|
|
app.emit('ipcReady')
|
|
})
|
|
|
|
ipc.once('ipcReadyWebTorrent', function (e) {
|
|
app.ipcReadyWebTorrent = true
|
|
log('sending %d queued messages from the main win to the webtorrent window',
|
|
messageQueueMainToWebTorrent.length)
|
|
messageQueueMainToWebTorrent.forEach(function (message) {
|
|
windows.webtorrent.send(message.name, ...message.args)
|
|
log('webtorrent: sent queued %s', message.name)
|
|
})
|
|
})
|
|
|
|
/**
|
|
* Dialog
|
|
*/
|
|
|
|
ipc.on('openTorrentFile', () => {
|
|
const dialog = require('./dialog')
|
|
dialog.openTorrentFile()
|
|
})
|
|
ipc.on('openFiles', () => {
|
|
const dialog = require('./dialog')
|
|
dialog.openFiles()
|
|
})
|
|
|
|
/**
|
|
* Dock
|
|
*/
|
|
|
|
ipc.on('setBadge', (e, ...args) => {
|
|
const dock = require('./dock')
|
|
dock.setBadge(...args)
|
|
})
|
|
ipc.on('downloadFinished', (e, ...args) => {
|
|
const dock = require('./dock')
|
|
dock.downloadFinished(...args)
|
|
})
|
|
|
|
/**
|
|
* Player Events
|
|
*/
|
|
|
|
ipc.on('onPlayerOpen', function () {
|
|
const powerSaveBlocker = require('./power-save-blocker')
|
|
const shortcuts = require('./shortcuts')
|
|
const thumbar = require('./thumbar')
|
|
|
|
menu.togglePlaybackControls(true)
|
|
powerSaveBlocker.enable()
|
|
shortcuts.enable()
|
|
thumbar.enable()
|
|
})
|
|
|
|
ipc.on('onPlayerUpdate', function (e, ...args) {
|
|
const thumbar = require('./thumbar')
|
|
|
|
menu.onPlayerUpdate(...args)
|
|
thumbar.onPlayerUpdate(...args)
|
|
})
|
|
|
|
ipc.on('onPlayerClose', function () {
|
|
const powerSaveBlocker = require('./power-save-blocker')
|
|
const shortcuts = require('./shortcuts')
|
|
const thumbar = require('./thumbar')
|
|
|
|
menu.togglePlaybackControls(false)
|
|
powerSaveBlocker.disable()
|
|
shortcuts.disable()
|
|
thumbar.disable()
|
|
})
|
|
|
|
ipc.on('onPlayerPlay', function () {
|
|
const powerSaveBlocker = require('./power-save-blocker')
|
|
const thumbar = require('./thumbar')
|
|
|
|
powerSaveBlocker.enable()
|
|
thumbar.onPlayerPlay()
|
|
})
|
|
|
|
ipc.on('onPlayerPause', function () {
|
|
const powerSaveBlocker = require('./power-save-blocker')
|
|
const thumbar = require('./thumbar')
|
|
|
|
powerSaveBlocker.disable()
|
|
thumbar.onPlayerPause()
|
|
})
|
|
|
|
/**
|
|
* Folder Watcher Events
|
|
*/
|
|
|
|
ipc.on('startFolderWatcher', function () {
|
|
if (!modules.folderWatcher) {
|
|
log('IPC ERR: folderWatcher module is not defined.')
|
|
return
|
|
}
|
|
|
|
modules.folderWatcher.start()
|
|
})
|
|
|
|
ipc.on('stopFolderWatcher', function () {
|
|
if (!modules.folderWatcher) {
|
|
log('IPC ERR: folderWatcher module is not defined.')
|
|
return
|
|
}
|
|
|
|
modules.folderWatcher.stop()
|
|
})
|
|
|
|
/**
|
|
* Shell
|
|
*/
|
|
|
|
ipc.on('openPath', (e, ...args) => {
|
|
const shell = require('./shell')
|
|
shell.openPath(...args)
|
|
})
|
|
ipc.on('showItemInFolder', (e, ...args) => {
|
|
const shell = require('./shell')
|
|
shell.showItemInFolder(...args)
|
|
})
|
|
ipc.on('moveItemToTrash', (e, ...args) => {
|
|
const shell = require('./shell')
|
|
shell.moveItemToTrash(...args)
|
|
})
|
|
|
|
/**
|
|
* File handlers
|
|
*/
|
|
|
|
ipc.on('setDefaultFileHandler', (e, flag) => {
|
|
const handlers = require('./handlers')
|
|
|
|
if (flag) handlers.install()
|
|
else handlers.uninstall()
|
|
})
|
|
|
|
/**
|
|
* Auto start on login
|
|
*/
|
|
|
|
ipc.on('setStartup', (e, flag) => {
|
|
const startup = require('./startup')
|
|
|
|
if (flag) startup.install()
|
|
else startup.uninstall()
|
|
})
|
|
|
|
/**
|
|
* Windows: Main
|
|
*/
|
|
|
|
const 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))
|
|
ipc.on('setAllowNav', (e, ...args) => menu.setAllowNav(...args))
|
|
|
|
/**
|
|
* External Media Player
|
|
*/
|
|
|
|
ipc.on('checkForExternalPlayer', function (e, path) {
|
|
const externalPlayer = require('./external-player')
|
|
|
|
externalPlayer.checkInstall(path, function (err) {
|
|
windows.main.send('checkForExternalPlayer', !err)
|
|
})
|
|
})
|
|
|
|
ipc.on('openExternalPlayer', (e, ...args) => {
|
|
const externalPlayer = require('./external-player')
|
|
const thumbar = require('./thumbar')
|
|
|
|
menu.togglePlaybackControls(false)
|
|
thumbar.disable()
|
|
externalPlayer.spawn(...args)
|
|
})
|
|
|
|
ipc.on('quitExternalPlayer', () => {
|
|
const externalPlayer = require('./external-player')
|
|
externalPlayer.kill()
|
|
})
|
|
|
|
/**
|
|
* Message passing
|
|
*/
|
|
|
|
const 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') {
|
|
// Send message to main window
|
|
windows.main.send(name, ...args)
|
|
log('webtorrent: got %s', name)
|
|
} else if (app.ipcReadyWebTorrent) {
|
|
// Send message to webtorrent window
|
|
windows.webtorrent.send(name, ...args)
|
|
log('webtorrent: sent %s', name)
|
|
} else {
|
|
// Queue message for webtorrent window, it hasn't finished loading yet
|
|
messageQueueMainToWebTorrent.push({
|
|
name,
|
|
args
|
|
})
|
|
log('webtorrent: queueing %s', name)
|
|
}
|
|
return
|
|
}
|
|
|
|
// Emit all other events normally
|
|
oldEmit.call(ipc, name, e, ...args)
|
|
}
|
|
}
|