esm
This commit is contained in:
@@ -1,11 +1,6 @@
|
||||
module.exports = {
|
||||
init
|
||||
}
|
||||
|
||||
const { dialog } = require('electron')
|
||||
|
||||
const config = require('../config')
|
||||
const log = require('./log')
|
||||
import electron from '../../electron.cjs'
|
||||
import config from '../config.js'
|
||||
import log from './log.js'
|
||||
|
||||
const ANNOUNCEMENT_URL =
|
||||
`${config.ANNOUNCEMENT_URL}?version=${config.APP_VERSION}&platform=${process.platform}`
|
||||
@@ -24,8 +19,8 @@ const ANNOUNCEMENT_URL =
|
||||
* "detail": "Please update to v0.xx as soon as possible..."
|
||||
* }
|
||||
*/
|
||||
function init () {
|
||||
const get = require('simple-get')
|
||||
async function init () {
|
||||
const { default: get } = await import('simple-get')
|
||||
get.concat(ANNOUNCEMENT_URL, onResponse)
|
||||
}
|
||||
|
||||
@@ -44,7 +39,7 @@ function onResponse (err, res, data) {
|
||||
}
|
||||
}
|
||||
|
||||
dialog.showMessageBox({
|
||||
electron.dialog.showMessageBox({
|
||||
type: 'info',
|
||||
buttons: ['OK'],
|
||||
title: data.title,
|
||||
@@ -52,3 +47,5 @@ function onResponse (err, res, data) {
|
||||
detail: data.detail
|
||||
})
|
||||
}
|
||||
|
||||
export default { init }
|
||||
|
||||
@@ -1,20 +1,13 @@
|
||||
module.exports = {
|
||||
openSeedFile,
|
||||
openSeedDirectory,
|
||||
openTorrentFile,
|
||||
openTorrentAddress,
|
||||
openFiles
|
||||
}
|
||||
import electron from '../../electron.cjs'
|
||||
import log from './log.js'
|
||||
import * as windows from './windows/index.js'
|
||||
|
||||
const { dialog } = require('electron')
|
||||
|
||||
const log = require('./log')
|
||||
const windows = require('./windows')
|
||||
const { dialog } = electron
|
||||
|
||||
/**
|
||||
* Show open dialog to create a single-file torrent.
|
||||
*/
|
||||
function openSeedFile () {
|
||||
export function openSeedFile () {
|
||||
if (!windows.main.win) return
|
||||
log('openSeedFile')
|
||||
const opts = {
|
||||
@@ -29,7 +22,7 @@ function openSeedFile () {
|
||||
* Windows and Linux, open dialogs are for files *or* directories only, not both,
|
||||
* so this function shows a directory dialog on those platforms.
|
||||
*/
|
||||
function openSeedDirectory () {
|
||||
export function openSeedDirectory () {
|
||||
if (!windows.main.win) return
|
||||
log('openSeedDirectory')
|
||||
const opts = process.platform === 'darwin'
|
||||
@@ -48,7 +41,7 @@ function openSeedDirectory () {
|
||||
* Show flexible open dialog that supports selecting .torrent files to add, or
|
||||
* a file or folder to create a single-file or single-directory torrent.
|
||||
*/
|
||||
function openFiles () {
|
||||
export function openFiles () {
|
||||
if (!windows.main.win) return
|
||||
log('openFiles')
|
||||
const opts = process.platform === 'darwin'
|
||||
@@ -70,7 +63,7 @@ function openFiles () {
|
||||
/*
|
||||
* Show open dialog to open a .torrent file.
|
||||
*/
|
||||
function openTorrentFile () {
|
||||
export function openTorrentFile () {
|
||||
if (!windows.main.win) return
|
||||
log('openTorrentFile')
|
||||
const opts = {
|
||||
@@ -90,7 +83,7 @@ function openTorrentFile () {
|
||||
/*
|
||||
* Show modal dialog to open a torrent URL (magnet uri, http torrent link, etc.)
|
||||
*/
|
||||
function openTorrentAddress () {
|
||||
export function openTorrentAddress () {
|
||||
log('openTorrentAddress')
|
||||
windows.main.dispatch('openTorrentAddress')
|
||||
}
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
module.exports = {
|
||||
downloadFinished,
|
||||
init,
|
||||
setBadge
|
||||
}
|
||||
import electron from '../../electron.cjs'
|
||||
import * as dialog from './dialog.js'
|
||||
import log from './log.js'
|
||||
|
||||
const { app, Menu } = require('electron')
|
||||
|
||||
const dialog = require('./dialog')
|
||||
const log = require('./log')
|
||||
const { app, Menu } = electron
|
||||
|
||||
/**
|
||||
* Add a right-click menu to the dock icon. (Mac)
|
||||
@@ -57,3 +52,5 @@ function getMenuTemplate () {
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
export default { downloadFinished, init, setBadge }
|
||||
|
||||
@@ -1,27 +1,19 @@
|
||||
module.exports = {
|
||||
spawn,
|
||||
kill,
|
||||
checkInstall
|
||||
}
|
||||
|
||||
const cp = require('child_process')
|
||||
const path = require('path')
|
||||
const vlcCommand = require('vlc-command')
|
||||
|
||||
const log = require('./log')
|
||||
const windows = require('./windows')
|
||||
|
||||
import cp from 'child_process'
|
||||
import path from 'path'
|
||||
import vlcCommand from 'vlc-command'
|
||||
import log from './log.js'
|
||||
import * as windows from './windows'
|
||||
// holds a ChildProcess while we're playing a video in an external player, null otherwise
|
||||
let proc = null
|
||||
|
||||
function checkInstall (playerPath, cb) {
|
||||
export function checkInstall (playerPath, cb) {
|
||||
// check for VLC if external player has not been specified by the user
|
||||
// otherwise assume the player is installed
|
||||
if (!playerPath) return vlcCommand(cb)
|
||||
process.nextTick(() => cb(null))
|
||||
}
|
||||
|
||||
function spawn (playerPath, url, title) {
|
||||
export function spawn (playerPath, url, title) {
|
||||
if (playerPath) return spawnExternal(playerPath, [url])
|
||||
|
||||
// Try to find and use VLC if external player is not specified
|
||||
@@ -37,7 +29,7 @@ function spawn (playerPath, url, title) {
|
||||
})
|
||||
}
|
||||
|
||||
function kill () {
|
||||
export function kill () {
|
||||
if (!proc) return
|
||||
log(`Killing external player, pid ${proc.pid}`)
|
||||
proc.kill('SIGKILL') // kill -9
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const chokidar = require('chokidar')
|
||||
const log = require('./log')
|
||||
import * as chokidar from 'chokidar'
|
||||
import log from './log.js'
|
||||
|
||||
class FolderWatcher {
|
||||
export class FolderWatcher {
|
||||
constructor ({ window, state }) {
|
||||
this.window = window
|
||||
this.state = state
|
||||
@@ -46,5 +46,3 @@ class FolderWatcher {
|
||||
this.watching = false
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = FolderWatcher
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
module.exports = {
|
||||
install,
|
||||
uninstall
|
||||
}
|
||||
import config from '../config.js'
|
||||
import path from 'path'
|
||||
|
||||
const config = require('../config')
|
||||
const path = require('path')
|
||||
|
||||
function install () {
|
||||
export function install () {
|
||||
switch (process.platform) {
|
||||
case 'darwin': installDarwin()
|
||||
break
|
||||
@@ -15,7 +10,7 @@ function install () {
|
||||
}
|
||||
}
|
||||
|
||||
function uninstall () {
|
||||
export function uninstall () {
|
||||
switch (process.platform) {
|
||||
case 'darwin': uninstallDarwin()
|
||||
break
|
||||
@@ -24,9 +19,8 @@ function uninstall () {
|
||||
}
|
||||
}
|
||||
|
||||
function installDarwin () {
|
||||
const { app } = require('electron')
|
||||
|
||||
async function installDarwin () {
|
||||
const { app } = await import('electron')
|
||||
// On Mac, only protocols that are listed in `Info.plist` can be set as the
|
||||
// default handler at runtime.
|
||||
app.setAsDefaultProtocolClient('magnet')
|
||||
@@ -43,33 +37,14 @@ if (!config.IS_PRODUCTION) {
|
||||
EXEC_COMMAND.push(config.ROOT_PATH)
|
||||
}
|
||||
|
||||
function installWin32 () {
|
||||
const Registry = require('winreg')
|
||||
async function installWin32 () {
|
||||
const Registry = await import('wingreg')
|
||||
const log = await import('./log')
|
||||
|
||||
const log = require('./log')
|
||||
|
||||
const iconPath = path.join(
|
||||
process.resourcesPath, 'app.asar.unpacked', 'static', 'WebTorrentFile.ico'
|
||||
)
|
||||
registerProtocolHandlerWin32(
|
||||
'magnet',
|
||||
'URL:BitTorrent Magnet URL',
|
||||
iconPath,
|
||||
EXEC_COMMAND
|
||||
)
|
||||
registerProtocolHandlerWin32(
|
||||
'stream-magnet',
|
||||
'URL:BitTorrent Stream-Magnet URL',
|
||||
iconPath,
|
||||
EXEC_COMMAND
|
||||
)
|
||||
registerFileHandlerWin32(
|
||||
'.torrent',
|
||||
'io.webtorrent.torrent',
|
||||
'BitTorrent Document',
|
||||
iconPath,
|
||||
EXEC_COMMAND
|
||||
)
|
||||
const iconPath = path.join(process.resourcesPath, 'app.asar.unpacked', 'static', 'WebTorrentFile.ico')
|
||||
registerProtocolHandlerWin32('magnet', 'URL:BitTorrent Magnet URL', iconPath, EXEC_COMMAND)
|
||||
registerProtocolHandlerWin32('stream-magnet', 'URL:BitTorrent Stream-Magnet URL', iconPath, EXEC_COMMAND)
|
||||
registerFileHandlerWin32('.torrent', 'io.webtorrent.torrent', 'BitTorrent Document', iconPath, EXEC_COMMAND)
|
||||
|
||||
/**
|
||||
* To add a protocol handler, the following keys must be added to the Windows registry:
|
||||
@@ -197,9 +172,8 @@ function installWin32 () {
|
||||
}
|
||||
}
|
||||
|
||||
function uninstallWin32 () {
|
||||
const Registry = require('winreg')
|
||||
|
||||
async function uninstallWin32 () {
|
||||
const Registry = await import('winreg')
|
||||
unregisterProtocolHandlerWin32('magnet', EXEC_COMMAND)
|
||||
unregisterProtocolHandlerWin32('stream-magnet', EXEC_COMMAND)
|
||||
unregisterFileHandlerWin32('.torrent', 'io.webtorrent.torrent', EXEC_COMMAND)
|
||||
|
||||
@@ -1,22 +1,25 @@
|
||||
/* eslint-disable import/first */
|
||||
console.time('init')
|
||||
|
||||
require('@electron/remote/main').initialize()
|
||||
const { app, ipcMain } = require('electron')
|
||||
import * as RemoteMain from '@electron/remote/main/index.js'
|
||||
RemoteMain.initialize()
|
||||
import electron from '../../electron.cjs'
|
||||
const { app, ipcMain } = electron
|
||||
|
||||
// Start crash reporter early, so it takes effect for child processes
|
||||
const crashReporter = require('../crash-reporter')
|
||||
import crashReporter from '../crash-reporter.js'
|
||||
crashReporter.init()
|
||||
|
||||
const parallel = require('run-parallel')
|
||||
import fs from 'fs'
|
||||
import parallel from 'run-parallel'
|
||||
import config from '../config.js'
|
||||
import ipc from './ipc.js'
|
||||
import log from './log.js'
|
||||
import menu from './menu.js'
|
||||
import State from '../renderer/lib/state.js'
|
||||
import * as windows from './windows/index.js'
|
||||
|
||||
const config = require('../config')
|
||||
const ipc = require('./ipc')
|
||||
const log = require('./log')
|
||||
const menu = require('./menu')
|
||||
const State = require('../renderer/lib/state')
|
||||
const windows = require('./windows')
|
||||
|
||||
const WEBTORRENT_VERSION = require('webtorrent/package.json').version
|
||||
const WEBTORRENT_VERSION = JSON.parse(fs.readFileSync('node_modules/webtorrent/package.json').toString()).version
|
||||
|
||||
let shouldQuit = false
|
||||
let argv = sliceArgv(process.argv)
|
||||
@@ -54,13 +57,18 @@ if (!shouldQuit && !config.IS_PORTABLE) {
|
||||
if (shouldQuit) {
|
||||
app.quit()
|
||||
} else {
|
||||
init()
|
||||
init().catch(console.error)
|
||||
}
|
||||
|
||||
function init () {
|
||||
async function init () {
|
||||
console.log('index init')
|
||||
app.whenReady().then(() => {
|
||||
console.log('readyyyy')
|
||||
})
|
||||
app.on('second-instance', (event, commandLine, workingDirectory) => onAppOpen(commandLine))
|
||||
if (config.IS_PORTABLE) {
|
||||
const path = require('path')
|
||||
console.log('is portable')
|
||||
const path = await import('path')
|
||||
// Put all user data into the "Portable Settings" folder
|
||||
app.setPath('userData', config.CONFIG_PATH)
|
||||
// Put Electron crash files, etc. into the "Portable Settings\Temp" folder
|
||||
@@ -72,7 +80,7 @@ function init () {
|
||||
app.isQuitting = false
|
||||
|
||||
parallel({
|
||||
appReady: (cb) => app.on('ready', () => cb(null)),
|
||||
appReady: (cb) => app.whenReady().then(cb),
|
||||
state: (cb) => State.load(cb)
|
||||
}, onReady)
|
||||
|
||||
@@ -130,17 +138,18 @@ function init () {
|
||||
})
|
||||
|
||||
app.on('activate', () => {
|
||||
console.log('activate')
|
||||
if (isReady) windows.main.show()
|
||||
})
|
||||
}
|
||||
|
||||
function delayedInit (state) {
|
||||
async function delayedInit (state) {
|
||||
if (app.isQuitting) return
|
||||
|
||||
const announcement = require('./announcement')
|
||||
const dock = require('./dock')
|
||||
const updater = require('./updater')
|
||||
const FolderWatcher = require('./folder-watcher')
|
||||
const { default: announcement } = await import('./announcement.js')
|
||||
const { default: dock } = await import('./dock.js')
|
||||
const { default: updater } = await import('./updater.js')
|
||||
const { FolderWatcher } = await import('./folder-watcher.js')
|
||||
const folderWatcher = new FolderWatcher({ window: windows.main, state })
|
||||
|
||||
announcement.init()
|
||||
@@ -153,13 +162,13 @@ function delayedInit (state) {
|
||||
}
|
||||
|
||||
if (process.platform === 'win32') {
|
||||
const userTasks = require('./user-tasks')
|
||||
const userTasks = await import('./user-tasks.js')
|
||||
userTasks.init()
|
||||
}
|
||||
|
||||
if (process.platform !== 'darwin') {
|
||||
const tray = require('./tray')
|
||||
tray.init()
|
||||
const { init: trayInit } = await import('./tray.js')
|
||||
trayInit()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -205,12 +214,12 @@ function sliceArgv (argv) {
|
||||
)
|
||||
}
|
||||
|
||||
function processArgv (argv) {
|
||||
async function processArgv (argv) {
|
||||
const torrentIds = []
|
||||
argv.forEach(arg => {
|
||||
await Promise.all(argv.forEach(async arg => {
|
||||
if (arg === '-n' || arg === '-o' || arg === '-u') {
|
||||
// Critical path: Only load the 'dialog' package if it is needed
|
||||
const dialog = require('./dialog')
|
||||
const dialog = await import('./dialog')
|
||||
if (arg === '-n') {
|
||||
dialog.openSeedDirectory()
|
||||
} else if (arg === '-o') {
|
||||
@@ -233,7 +242,7 @@ function processArgv (argv) {
|
||||
// running.
|
||||
torrentIds.push(arg)
|
||||
}
|
||||
})
|
||||
}))
|
||||
if (torrentIds.length > 0) {
|
||||
windows.main.dispatch('onOpen', torrentIds)
|
||||
}
|
||||
|
||||
104
src/main/ipc.js
104
src/main/ipc.js
@@ -1,13 +1,10 @@
|
||||
module.exports = {
|
||||
init,
|
||||
setModule
|
||||
}
|
||||
import electron from '../../electron.cjs'
|
||||
|
||||
const { app, ipcMain } = require('electron')
|
||||
import log from './log.js'
|
||||
import menu from './menu.js'
|
||||
import * as windows from './windows/index.js'
|
||||
|
||||
const log = require('./log')
|
||||
const menu = require('./menu')
|
||||
const windows = require('./windows')
|
||||
const { app, ipcMain } = electron
|
||||
|
||||
// Messages from the main process, to be sent once the WebTorrent process starts
|
||||
const messageQueueMainToWebTorrent = []
|
||||
@@ -40,12 +37,12 @@ function init () {
|
||||
* Dialog
|
||||
*/
|
||||
|
||||
ipcMain.on('openTorrentFile', () => {
|
||||
const dialog = require('./dialog')
|
||||
ipcMain.on('openTorrentFile', async () => {
|
||||
const dialog = await import('./dialog')
|
||||
dialog.openTorrentFile()
|
||||
})
|
||||
ipcMain.on('openFiles', () => {
|
||||
const dialog = require('./dialog')
|
||||
ipcMain.on('openFiles', async () => {
|
||||
const dialog = await import('./dialog')
|
||||
dialog.openFiles()
|
||||
})
|
||||
|
||||
@@ -53,12 +50,12 @@ function init () {
|
||||
* Dock
|
||||
*/
|
||||
|
||||
ipcMain.on('setBadge', (e, ...args) => {
|
||||
const dock = require('./dock')
|
||||
ipcMain.on('setBadge', async (e, ...args) => {
|
||||
const dock = await import('./dock')
|
||||
dock.setBadge(...args)
|
||||
})
|
||||
ipcMain.on('downloadFinished', (e, ...args) => {
|
||||
const dock = require('./dock')
|
||||
ipcMain.on('downloadFinished', async (e, ...args) => {
|
||||
const dock = await import('./dock')
|
||||
dock.downloadFinished(...args)
|
||||
})
|
||||
|
||||
@@ -66,10 +63,10 @@ function init () {
|
||||
* Player Events
|
||||
*/
|
||||
|
||||
ipcMain.on('onPlayerOpen', () => {
|
||||
const powerSaveBlocker = require('./power-save-blocker')
|
||||
const shortcuts = require('./shortcuts')
|
||||
const thumbar = require('./thumbar')
|
||||
ipcMain.on('onPlayerOpen', async () => {
|
||||
const powerSaveBlocker = await import('./power-save-blocker')
|
||||
const shortcuts = await import('./shortcuts')
|
||||
const thumbar = await import('./thumbar')
|
||||
|
||||
menu.togglePlaybackControls(true)
|
||||
powerSaveBlocker.enable()
|
||||
@@ -77,17 +74,17 @@ function init () {
|
||||
thumbar.enable()
|
||||
})
|
||||
|
||||
ipcMain.on('onPlayerUpdate', (e, ...args) => {
|
||||
const thumbar = require('./thumbar')
|
||||
ipcMain.on('onPlayerUpdate', async (e, ...args) => {
|
||||
const thumbar = await import('./thumbar')
|
||||
|
||||
menu.onPlayerUpdate(...args)
|
||||
thumbar.onPlayerUpdate(...args)
|
||||
})
|
||||
|
||||
ipcMain.on('onPlayerClose', () => {
|
||||
const powerSaveBlocker = require('./power-save-blocker')
|
||||
const shortcuts = require('./shortcuts')
|
||||
const thumbar = require('./thumbar')
|
||||
ipcMain.on('onPlayerClose', async () => {
|
||||
const powerSaveBlocker = await import('./power-save-blocker')
|
||||
const shortcuts = await import('./shortcuts')
|
||||
const thumbar = await import('./thumbar')
|
||||
|
||||
menu.togglePlaybackControls(false)
|
||||
powerSaveBlocker.disable()
|
||||
@@ -95,17 +92,17 @@ function init () {
|
||||
thumbar.disable()
|
||||
})
|
||||
|
||||
ipcMain.on('onPlayerPlay', () => {
|
||||
const powerSaveBlocker = require('./power-save-blocker')
|
||||
const thumbar = require('./thumbar')
|
||||
ipcMain.on('onPlayerPlay', async () => {
|
||||
const powerSaveBlocker = await import('./power-save-blocker')
|
||||
const thumbar = await import('./thumbar')
|
||||
|
||||
powerSaveBlocker.enable()
|
||||
thumbar.onPlayerPlay()
|
||||
})
|
||||
|
||||
ipcMain.on('onPlayerPause', () => {
|
||||
const powerSaveBlocker = require('./power-save-blocker')
|
||||
const thumbar = require('./thumbar')
|
||||
ipcMain.on('onPlayerPause', async () => {
|
||||
const powerSaveBlocker = await import('./power-save-blocker')
|
||||
const thumbar = await import('./thumbar')
|
||||
|
||||
powerSaveBlocker.disable()
|
||||
thumbar.onPlayerPause()
|
||||
@@ -137,16 +134,16 @@ function init () {
|
||||
* Shell
|
||||
*/
|
||||
|
||||
ipcMain.on('openPath', (e, ...args) => {
|
||||
const shell = require('./shell')
|
||||
ipcMain.on('openPath', async (e, ...args) => {
|
||||
const shell = await import('./shell')
|
||||
shell.openPath(...args)
|
||||
})
|
||||
ipcMain.on('showItemInFolder', (e, ...args) => {
|
||||
const shell = require('./shell')
|
||||
ipcMain.on('showItemInFolder', async (e, ...args) => {
|
||||
const shell = await import('./shell')
|
||||
shell.showItemInFolder(...args)
|
||||
})
|
||||
ipcMain.on('moveItemToTrash', (e, ...args) => {
|
||||
const shell = require('./shell')
|
||||
ipcMain.on('moveItemToTrash', async (e, ...args) => {
|
||||
const shell = await import('./shell')
|
||||
shell.moveItemToTrash(...args)
|
||||
})
|
||||
|
||||
@@ -154,8 +151,8 @@ function init () {
|
||||
* File handlers
|
||||
*/
|
||||
|
||||
ipcMain.on('setDefaultFileHandler', (e, flag) => {
|
||||
const handlers = require('./handlers')
|
||||
ipcMain.on('setDefaultFileHandler', async (e, flag) => {
|
||||
const handlers = await import('./handlers')
|
||||
|
||||
if (flag) handlers.install()
|
||||
else handlers.uninstall()
|
||||
@@ -165,8 +162,8 @@ function init () {
|
||||
* Auto start on login
|
||||
*/
|
||||
|
||||
ipcMain.on('setStartup', (e, flag) => {
|
||||
const startup = require('./startup')
|
||||
ipcMain.on('setStartup', async (e, flag) => {
|
||||
const startup = await import('./startup')
|
||||
|
||||
if (flag) startup.install()
|
||||
else startup.uninstall()
|
||||
@@ -190,18 +187,18 @@ function init () {
|
||||
* External Media Player
|
||||
*/
|
||||
|
||||
ipcMain.on('checkForExternalPlayer', (e, path) => {
|
||||
const externalPlayer = require('./external-player')
|
||||
ipcMain.on('checkForExternalPlayer', async (e, path) => {
|
||||
const externalPlayer = await import('./external-player')
|
||||
|
||||
externalPlayer.checkInstall(path, err => {
|
||||
windows.main.send('checkForExternalPlayer', !err)
|
||||
})
|
||||
})
|
||||
|
||||
ipcMain.on('openExternalPlayer', (e, ...args) => {
|
||||
const externalPlayer = require('./external-player')
|
||||
const shortcuts = require('./shortcuts')
|
||||
const thumbar = require('./thumbar')
|
||||
ipcMain.on('openExternalPlayer', async (e, ...args) => {
|
||||
const externalPlayer = await import('./external-player')
|
||||
const shortcuts = await import('./shortcuts')
|
||||
const thumbar = await import('./thumbar')
|
||||
|
||||
menu.togglePlaybackControls(false)
|
||||
shortcuts.disable()
|
||||
@@ -209,8 +206,8 @@ function init () {
|
||||
externalPlayer.spawn(...args)
|
||||
})
|
||||
|
||||
ipcMain.on('quitExternalPlayer', () => {
|
||||
const externalPlayer = require('./external-player')
|
||||
ipcMain.on('quitExternalPlayer', async () => {
|
||||
const externalPlayer = await import('./external-player')
|
||||
externalPlayer.kill()
|
||||
})
|
||||
|
||||
@@ -246,3 +243,10 @@ function init () {
|
||||
oldEmit.call(ipcMain, name, e, ...args)
|
||||
}
|
||||
}
|
||||
|
||||
export { init }
|
||||
export { setModule }
|
||||
export default {
|
||||
init,
|
||||
setModule
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
module.exports = log
|
||||
module.exports.error = error
|
||||
import electron from '../../electron.cjs'
|
||||
import * as windows from './windows/index.js'
|
||||
|
||||
const { app } = electron
|
||||
|
||||
/**
|
||||
* In the main electron process, we do not use console.log() statements because they do
|
||||
@@ -7,11 +9,7 @@ module.exports.error = error
|
||||
* version of the app. Instead use this module, which sends the logs to the main window
|
||||
* where they can be viewed in Developer Tools.
|
||||
*/
|
||||
|
||||
const { app } = require('electron')
|
||||
const windows = require('./windows')
|
||||
|
||||
function log (...args) {
|
||||
export default function log (...args) {
|
||||
if (app.ipcReady) {
|
||||
windows.main.send('log', ...args)
|
||||
} else {
|
||||
@@ -19,7 +17,7 @@ function log (...args) {
|
||||
}
|
||||
}
|
||||
|
||||
function error (...args) {
|
||||
export function error (...args) {
|
||||
if (app.ipcReady) {
|
||||
windows.main.send('error', ...args)
|
||||
} else {
|
||||
|
||||
@@ -1,23 +1,14 @@
|
||||
module.exports = {
|
||||
init,
|
||||
togglePlaybackControls,
|
||||
setWindowFocus,
|
||||
setAllowNav,
|
||||
onPlayerUpdate,
|
||||
onToggleAlwaysOnTop,
|
||||
onToggleFullScreen
|
||||
}
|
||||
|
||||
const { app, Menu } = require('electron')
|
||||
|
||||
const config = require('../config')
|
||||
const windows = require('./windows')
|
||||
import electron from '../../electron.cjs'
|
||||
import config from '../config.js'
|
||||
import * as windows from './windows/index.js'
|
||||
import shell from './shell.js'
|
||||
|
||||
let menu = null
|
||||
|
||||
function init () {
|
||||
menu = Menu.buildFromTemplate(getMenuTemplate())
|
||||
Menu.setApplicationMenu(menu)
|
||||
console.log('menu init')
|
||||
menu = electron.Menu.buildFromTemplate(getMenuTemplate())
|
||||
electron.Menu.setApplicationMenu(menu)
|
||||
}
|
||||
|
||||
function togglePlaybackControls (flag) {
|
||||
@@ -85,24 +76,24 @@ function getMenuTemplate () {
|
||||
? 'Create New Torrent...'
|
||||
: 'Create New Torrent from Folder...',
|
||||
accelerator: 'CmdOrCtrl+N',
|
||||
click: () => {
|
||||
const dialog = require('./dialog')
|
||||
click: async () => {
|
||||
const dialog = await import('./dialog')
|
||||
dialog.openSeedDirectory()
|
||||
}
|
||||
},
|
||||
{
|
||||
label: 'Open Torrent File...',
|
||||
accelerator: 'CmdOrCtrl+O',
|
||||
click: () => {
|
||||
const dialog = require('./dialog')
|
||||
click: async () => {
|
||||
const dialog = await import('./dialog')
|
||||
dialog.openTorrentFile()
|
||||
}
|
||||
},
|
||||
{
|
||||
label: 'Open Torrent Address...',
|
||||
accelerator: 'CmdOrCtrl+U',
|
||||
click: () => {
|
||||
const dialog = require('./dialog')
|
||||
click: async () => {
|
||||
const dialog = await import('./dialog')
|
||||
dialog.openTorrentAddress()
|
||||
}
|
||||
},
|
||||
@@ -303,21 +294,18 @@ function getMenuTemplate () {
|
||||
{
|
||||
label: 'Learn more about ' + config.APP_NAME,
|
||||
click: () => {
|
||||
const shell = require('./shell')
|
||||
shell.openExternal(config.HOME_PAGE_URL)
|
||||
}
|
||||
},
|
||||
{
|
||||
label: 'Release Notes',
|
||||
click: () => {
|
||||
const shell = require('./shell')
|
||||
shell.openExternal(config.GITHUB_URL_RELEASES)
|
||||
}
|
||||
},
|
||||
{
|
||||
label: 'Contribute on GitHub',
|
||||
click: () => {
|
||||
const shell = require('./shell')
|
||||
shell.openExternal(config.GITHUB_URL)
|
||||
}
|
||||
},
|
||||
@@ -327,21 +315,18 @@ function getMenuTemplate () {
|
||||
{
|
||||
label: 'Report an Issue...',
|
||||
click: () => {
|
||||
const shell = require('./shell')
|
||||
shell.openExternal(config.GITHUB_URL_ISSUES)
|
||||
}
|
||||
},
|
||||
{
|
||||
label: 'Follow us on Twitter',
|
||||
click: () => {
|
||||
const shell = require('./shell')
|
||||
shell.openExternal(config.TWITTER_PAGE_URL)
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
if (process.platform === 'darwin') {
|
||||
// WebTorrent menu (Mac)
|
||||
template.unshift({
|
||||
@@ -426,8 +411,8 @@ function getMenuTemplate () {
|
||||
// File menu (Windows, Linux)
|
||||
template[0].submenu.unshift({
|
||||
label: 'Create New Torrent from File...',
|
||||
click: () => {
|
||||
const dialog = require('./dialog')
|
||||
click: async () => {
|
||||
const dialog = await import('./dialog')
|
||||
dialog.openSeedFile()
|
||||
}
|
||||
})
|
||||
@@ -460,9 +445,26 @@ function getMenuTemplate () {
|
||||
// File menu (Linux)
|
||||
template[0].submenu.push({
|
||||
label: 'Quit',
|
||||
click: () => app.quit()
|
||||
click: () => electron.app.quit()
|
||||
})
|
||||
}
|
||||
|
||||
return template
|
||||
}
|
||||
|
||||
export { init }
|
||||
export { togglePlaybackControls }
|
||||
export { setWindowFocus }
|
||||
export { setAllowNav }
|
||||
export { onPlayerUpdate }
|
||||
export { onToggleAlwaysOnTop }
|
||||
export { onToggleFullScreen }
|
||||
export default {
|
||||
init,
|
||||
togglePlaybackControls,
|
||||
setWindowFocus,
|
||||
setAllowNav,
|
||||
onPlayerUpdate,
|
||||
onToggleAlwaysOnTop,
|
||||
onToggleFullScreen
|
||||
}
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
module.exports = {
|
||||
enable,
|
||||
disable
|
||||
}
|
||||
|
||||
const { powerSaveBlocker } = require('electron')
|
||||
const log = require('./log')
|
||||
import { powerSaveBlocker } from 'electron'
|
||||
import log from './log.js'
|
||||
|
||||
let blockId = 0
|
||||
|
||||
@@ -12,7 +7,7 @@ let blockId = 0
|
||||
* Block the system from entering low-power (sleep) mode or turning off the
|
||||
* display.
|
||||
*/
|
||||
function enable () {
|
||||
export function enable () {
|
||||
if (powerSaveBlocker.isStarted(blockId)) {
|
||||
// If a power saver block already exists, do nothing.
|
||||
return
|
||||
@@ -24,7 +19,7 @@ function enable () {
|
||||
/**
|
||||
* Stop blocking the system from entering low-power mode.
|
||||
*/
|
||||
function disable () {
|
||||
export function disable () {
|
||||
if (!powerSaveBlocker.isStarted(blockId)) {
|
||||
// If a power saver block does not exist, do nothing.
|
||||
return
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
module.exports = {
|
||||
openExternal,
|
||||
openPath,
|
||||
showItemInFolder,
|
||||
moveItemToTrash
|
||||
}
|
||||
import electron from '../../electron.cjs'
|
||||
import log from './log.js'
|
||||
|
||||
const { shell } = require('electron')
|
||||
const log = require('./log')
|
||||
const { shell } = electron
|
||||
|
||||
/**
|
||||
* Open the given external protocol URL in the desktop’s default manner.
|
||||
@@ -19,7 +14,6 @@ function openExternal (url) {
|
||||
/**
|
||||
* Open the given file in the desktop’s default manner.
|
||||
*/
|
||||
|
||||
function openPath (path) {
|
||||
log(`openPath: ${path}`)
|
||||
shell.openPath(path)
|
||||
@@ -40,3 +34,10 @@ function moveItemToTrash (path) {
|
||||
log(`moveItemToTrash: ${path}`)
|
||||
shell.trashItem(path)
|
||||
}
|
||||
|
||||
export default {
|
||||
openExternal,
|
||||
openPath,
|
||||
showItemInFolder,
|
||||
moveItemToTrash
|
||||
}
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
module.exports = {
|
||||
disable,
|
||||
enable
|
||||
}
|
||||
import { globalShortcut } from 'electron'
|
||||
import * as windows from './windows'
|
||||
|
||||
const { globalShortcut } = require('electron')
|
||||
const windows = require('./windows')
|
||||
|
||||
function enable () {
|
||||
export function enable () {
|
||||
// Register play/pause media key, available on some keyboards.
|
||||
globalShortcut.register(
|
||||
'MediaPlayPause',
|
||||
@@ -22,7 +17,7 @@ function enable () {
|
||||
)
|
||||
}
|
||||
|
||||
function disable () {
|
||||
export function disable () {
|
||||
// Return the media key to the OS, so other apps can use it.
|
||||
globalShortcut.unregister('MediaPlayPause')
|
||||
globalShortcut.unregister('MediaNextTrack')
|
||||
|
||||
@@ -1,23 +1,16 @@
|
||||
module.exports = {
|
||||
handleEvent
|
||||
}
|
||||
|
||||
const { app } = require('electron')
|
||||
|
||||
const path = require('path')
|
||||
const spawn = require('child_process').spawn
|
||||
|
||||
const handlers = require('./handlers')
|
||||
import { app } from 'electron'
|
||||
import path from 'path'
|
||||
import { spawn } from 'child_process'
|
||||
import handlers from './handlers.js'
|
||||
|
||||
const EXE_NAME = path.basename(process.execPath)
|
||||
const UPDATE_EXE = path.join(process.execPath, '..', '..', 'Update.exe')
|
||||
|
||||
const run = (args, done) => {
|
||||
spawn(UPDATE_EXE, args, { detached: true })
|
||||
.on('close', done)
|
||||
spawn(UPDATE_EXE, args, { detached: true }).on('close', done)
|
||||
}
|
||||
|
||||
function handleEvent (cmd) {
|
||||
export function handleEvent (cmd) {
|
||||
if (cmd === '--squirrel-install' || cmd === '--squirrel-updated') {
|
||||
run([`--createShortcut=${EXE_NAME}`], app.quit)
|
||||
return true
|
||||
|
||||
@@ -1,17 +1,12 @@
|
||||
module.exports = {
|
||||
install,
|
||||
uninstall
|
||||
}
|
||||
|
||||
const { APP_NAME } = require('../config')
|
||||
const AutoLaunch = require('auto-launch')
|
||||
import { APP_NAME } from '../config.js'
|
||||
import AutoLaunch from 'auto-launch'
|
||||
|
||||
const appLauncher = new AutoLaunch({
|
||||
name: APP_NAME,
|
||||
isHidden: true
|
||||
})
|
||||
|
||||
function install () {
|
||||
export function install () {
|
||||
return appLauncher
|
||||
.isEnabled()
|
||||
.then(enabled => {
|
||||
@@ -19,7 +14,7 @@ function install () {
|
||||
})
|
||||
}
|
||||
|
||||
function uninstall () {
|
||||
export function uninstall () {
|
||||
return appLauncher
|
||||
.isEnabled()
|
||||
.then(enabled => {
|
||||
|
||||
@@ -1,21 +1,6 @@
|
||||
module.exports = {
|
||||
disable,
|
||||
enable,
|
||||
onPlayerPause,
|
||||
onPlayerPlay,
|
||||
onPlayerUpdate
|
||||
}
|
||||
|
||||
/**
|
||||
* On Windows, add a "thumbnail toolbar" with a play/pause button in the taskbar.
|
||||
* This provides users a way to access play/pause functionality without restoring
|
||||
* or activating the window.
|
||||
*/
|
||||
|
||||
const path = require('path')
|
||||
const config = require('../config')
|
||||
|
||||
const windows = require('./windows')
|
||||
import path from 'path'
|
||||
import config from '../config.js'
|
||||
import * as windows from './windows'
|
||||
|
||||
const PREV_ICON = path.join(config.STATIC_PATH, 'PreviousTrackThumbnailBarButton.png')
|
||||
const PLAY_ICON = path.join(config.STATIC_PATH, 'PlayThumbnailBarButton.png')
|
||||
@@ -32,7 +17,7 @@ let buttons = []
|
||||
/**
|
||||
* Show the Windows thumbnail toolbar buttons.
|
||||
*/
|
||||
function enable () {
|
||||
export function enable () {
|
||||
buttons = [
|
||||
{
|
||||
tooltip: 'Previous Track',
|
||||
@@ -56,26 +41,26 @@ function enable () {
|
||||
/**
|
||||
* Hide the Windows thumbnail toolbar buttons.
|
||||
*/
|
||||
function disable () {
|
||||
export function disable () {
|
||||
buttons = []
|
||||
update()
|
||||
}
|
||||
|
||||
function onPlayerPause () {
|
||||
export function onPlayerPause () {
|
||||
if (!isEnabled()) return
|
||||
buttons[PLAY_PAUSE].tooltip = 'Play'
|
||||
buttons[PLAY_PAUSE].icon = PLAY_ICON
|
||||
update()
|
||||
}
|
||||
|
||||
function onPlayerPlay () {
|
||||
export function onPlayerPlay () {
|
||||
if (!isEnabled()) return
|
||||
buttons[PLAY_PAUSE].tooltip = 'Pause'
|
||||
buttons[PLAY_PAUSE].icon = PAUSE_ICON
|
||||
update()
|
||||
}
|
||||
|
||||
function onPlayerUpdate (state) {
|
||||
export function onPlayerUpdate (state) {
|
||||
if (!isEnabled()) return
|
||||
buttons[PREV].flags = [state.hasPrevious ? 'enabled' : 'disabled']
|
||||
buttons[NEXT].flags = [state.hasNext ? 'enabled' : 'disabled']
|
||||
|
||||
@@ -1,17 +1,10 @@
|
||||
module.exports = {
|
||||
hasTray,
|
||||
init,
|
||||
setWindowFocus
|
||||
}
|
||||
|
||||
const { app, Tray, Menu } = require('electron')
|
||||
|
||||
const config = require('../config')
|
||||
const windows = require('./windows')
|
||||
import { app, Tray, Menu } from 'electron'
|
||||
import config from '../config.js'
|
||||
import * as windows from './windows'
|
||||
|
||||
let tray
|
||||
|
||||
function init () {
|
||||
export function init () {
|
||||
if (process.platform === 'linux') {
|
||||
initLinux()
|
||||
}
|
||||
@@ -24,11 +17,11 @@ function init () {
|
||||
/**
|
||||
* Returns true if there a tray icon is active.
|
||||
*/
|
||||
function hasTray () {
|
||||
export function hasTray () {
|
||||
return !!tray
|
||||
}
|
||||
|
||||
function setWindowFocus (flag) {
|
||||
export function setWindowFocus (flag) {
|
||||
if (!tray) return
|
||||
updateTrayMenu()
|
||||
}
|
||||
@@ -46,8 +39,8 @@ function initWin32 () {
|
||||
/**
|
||||
* Check for libappindicator support before creating tray icon.
|
||||
*/
|
||||
function checkLinuxTraySupport (cb) {
|
||||
const cp = require('child_process')
|
||||
async function checkLinuxTraySupport (cb) {
|
||||
const cp = await import('child_process')
|
||||
|
||||
// Check that libappindicator libraries are installed in system.
|
||||
cp.exec('ldconfig -p | grep libappindicator', (err, stdout) => {
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
module.exports = {
|
||||
init
|
||||
}
|
||||
import electron from '../../electron.cjs'
|
||||
import get from 'simple-get'
|
||||
import config from '../config.js'
|
||||
import log from './log.js'
|
||||
import * as windows from './windows/index.js'
|
||||
|
||||
const { autoUpdater } = require('electron')
|
||||
const get = require('simple-get')
|
||||
|
||||
const config = require('../config')
|
||||
const log = require('./log')
|
||||
const windows = require('./windows')
|
||||
const { autoUpdater } = electron
|
||||
|
||||
const AUTO_UPDATE_URL = config.AUTO_UPDATE_URL +
|
||||
'?version=' + config.APP_VERSION +
|
||||
@@ -22,6 +19,8 @@ function init () {
|
||||
}
|
||||
}
|
||||
|
||||
export default { init }
|
||||
|
||||
// The Electron auto-updater does not support Linux yet, so manually check for
|
||||
// updates and show the user a modal notification.
|
||||
function initLinux () {
|
||||
@@ -49,7 +48,7 @@ function onResponse (err, res, data) {
|
||||
function initDarwinWin32 () {
|
||||
autoUpdater.on(
|
||||
'error',
|
||||
(err) => log.error(`Update error: ${err.message}`)
|
||||
(err) => log(`Update error: ${err.message}`)
|
||||
)
|
||||
|
||||
autoUpdater.on(
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
module.exports = {
|
||||
init
|
||||
}
|
||||
|
||||
const { app } = require('electron')
|
||||
import { app } from 'electron'
|
||||
|
||||
/**
|
||||
* Add a user task menu to the app icon on right-click. (Windows)
|
||||
*/
|
||||
function init () {
|
||||
export function init () {
|
||||
if (process.platform !== 'win32') return
|
||||
app.setUserTasks(getUserTasks())
|
||||
}
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
const about = module.exports = {
|
||||
import config from '../../config.js'
|
||||
import electron from '../../../electron.cjs'
|
||||
import * as RemoteMain from '@electron/remote/main/index.js'
|
||||
|
||||
export const about = {
|
||||
init,
|
||||
win: null
|
||||
}
|
||||
|
||||
const config = require('../../config')
|
||||
const { BrowserWindow } = require('electron')
|
||||
|
||||
function init () {
|
||||
if (about.win) {
|
||||
return about.win.show()
|
||||
}
|
||||
|
||||
const win = about.win = new BrowserWindow({
|
||||
const win = about.win = new electron.BrowserWindow({
|
||||
backgroundColor: '#ECECEC',
|
||||
center: true,
|
||||
fullscreen: false,
|
||||
@@ -33,8 +34,7 @@ function init () {
|
||||
},
|
||||
width: 300
|
||||
})
|
||||
require('@electron/remote/main').enable(win.webContents)
|
||||
|
||||
RemoteMain.enable(win.webContents)
|
||||
win.loadURL(config.WINDOW_ABOUT)
|
||||
|
||||
win.once('ready-to-show', () => {
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
exports.about = require('./about')
|
||||
exports.main = require('./main')
|
||||
exports.webtorrent = require('./webtorrent')
|
||||
export * from './about.js'
|
||||
export * from './main.js'
|
||||
export * from './webtorrent.js'
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
const main = module.exports = {
|
||||
import debounce from 'debounce'
|
||||
import electron from '../../../electron.cjs'
|
||||
import config from '../../config.js'
|
||||
import log from '../log.js'
|
||||
import menu from '../menu.js'
|
||||
import * as RemoteMain from '@electron/remote/main/index.js'
|
||||
|
||||
const { app, BrowserWindow, screen } = electron
|
||||
|
||||
export const main = {
|
||||
dispatch,
|
||||
hide,
|
||||
init,
|
||||
@@ -14,13 +23,6 @@ const main = module.exports = {
|
||||
win: null
|
||||
}
|
||||
|
||||
const { app, BrowserWindow, screen } = require('electron')
|
||||
const debounce = require('debounce')
|
||||
|
||||
const config = require('../../config')
|
||||
const log = require('../log')
|
||||
const menu = require('../menu')
|
||||
|
||||
function init (state, options) {
|
||||
if (main.win) {
|
||||
return main.win.show()
|
||||
@@ -50,8 +52,8 @@ function init (state, options) {
|
||||
x: initialBounds.x,
|
||||
y: initialBounds.y
|
||||
})
|
||||
require('@electron/remote/main').enable(win.webContents)
|
||||
|
||||
RemoteMain.enable(win.webContents)
|
||||
console.log(config.WINDOW_MAIN)
|
||||
win.loadURL(config.WINDOW_MAIN)
|
||||
|
||||
win.once('ready-to-show', () => {
|
||||
@@ -98,10 +100,10 @@ function init (state, options) {
|
||||
send('windowBoundsChanged', e.sender.getBounds())
|
||||
}, 1000))
|
||||
|
||||
win.on('close', e => {
|
||||
win.on('close', async e => {
|
||||
if (process.platform !== 'darwin') {
|
||||
const tray = require('../tray')
|
||||
if (!tray.hasTray()) {
|
||||
const { hasTray } = await import('../tray.js')
|
||||
if (!hasTray()) {
|
||||
app.quit()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
const webtorrent = module.exports = {
|
||||
import electron from '../../../electron.cjs'
|
||||
import config from '../../config.js'
|
||||
import * as RemoteMain from '@electron/remote/main/index.js'
|
||||
|
||||
export const webtorrent = {
|
||||
init,
|
||||
send,
|
||||
show,
|
||||
@@ -6,12 +10,8 @@ const webtorrent = module.exports = {
|
||||
win: null
|
||||
}
|
||||
|
||||
const { app, BrowserWindow } = require('electron')
|
||||
|
||||
const config = require('../../config')
|
||||
|
||||
function init () {
|
||||
const win = webtorrent.win = new BrowserWindow({
|
||||
const win = webtorrent.win = new electron.BrowserWindow({
|
||||
backgroundColor: '#1E1E1E',
|
||||
center: true,
|
||||
fullscreen: false,
|
||||
@@ -33,13 +33,11 @@ function init () {
|
||||
},
|
||||
width: 150
|
||||
})
|
||||
require('@electron/remote/main').enable(win.webContents)
|
||||
|
||||
RemoteMain.enable(win.webContents)
|
||||
win.loadURL(config.WINDOW_WEBTORRENT)
|
||||
|
||||
// Prevent killing the WebTorrent process
|
||||
win.on('close', e => {
|
||||
if (app.isQuitting) {
|
||||
if (electron.app.isQuitting) {
|
||||
return
|
||||
}
|
||||
e.preventDefault()
|
||||
|
||||
Reference in New Issue
Block a user