This commit is contained in:
Diego Rodríguez Baquero
2021-10-11 18:27:41 -05:00
parent e42a515199
commit 7e8078ed92
70 changed files with 862 additions and 1136 deletions

View File

@@ -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 }

View File

@@ -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')
}

View File

@@ -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 }

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -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 {

View File

@@ -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
}

View File

@@ -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

View File

@@ -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 desktops default manner.
@@ -19,7 +14,6 @@ function openExternal (url) {
/**
* Open the given file in the desktops 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
}

View File

@@ -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')

View File

@@ -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

View File

@@ -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 => {

View File

@@ -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']

View File

@@ -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) => {

View File

@@ -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(

View File

@@ -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())
}

View File

@@ -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', () => {

View File

@@ -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'

View File

@@ -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
}

View File

@@ -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()