122 lines
3.1 KiB
JavaScript
122 lines
3.1 KiB
JavaScript
module.exports = {
|
|
openSeedFile,
|
|
openSeedDirectory,
|
|
openTorrentFile,
|
|
openTorrentAddress,
|
|
openFiles
|
|
}
|
|
|
|
const { dialog } = require('electron')
|
|
|
|
const log = require('./log')
|
|
const windows = require('./windows')
|
|
|
|
/**
|
|
* Show open dialog to create a single-file torrent.
|
|
*/
|
|
function openSeedFile () {
|
|
if (!windows.main.win) return
|
|
log('openSeedFile')
|
|
const opts = {
|
|
title: 'Select a file for the torrent.',
|
|
properties: ['openFile']
|
|
}
|
|
showOpenSeed(opts)
|
|
}
|
|
|
|
/*
|
|
* Show open dialog to create a single-file or single-directory torrent. On
|
|
* 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 () {
|
|
if (!windows.main.win) return
|
|
log('openSeedDirectory')
|
|
const opts = process.platform === 'darwin'
|
|
? {
|
|
title: 'Select a file or folder for the torrent.',
|
|
properties: ['openFile', 'openDirectory']
|
|
}
|
|
: {
|
|
title: 'Select a folder for the torrent.',
|
|
properties: ['openDirectory']
|
|
}
|
|
showOpenSeed(opts)
|
|
}
|
|
|
|
/*
|
|
* 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 () {
|
|
if (!windows.main.win) return
|
|
log('openFiles')
|
|
const opts = process.platform === 'darwin'
|
|
? {
|
|
title: 'Select a file or folder to add.',
|
|
properties: ['openFile', 'openDirectory']
|
|
}
|
|
: {
|
|
title: 'Select a file to add.',
|
|
properties: ['openFile']
|
|
}
|
|
setTitle(opts.title)
|
|
const selectedPaths = dialog.showOpenDialogSync(windows.main.win, opts)
|
|
resetTitle()
|
|
if (!Array.isArray(selectedPaths)) return
|
|
windows.main.dispatch('onOpen', selectedPaths)
|
|
}
|
|
|
|
/*
|
|
* Show open dialog to open a .torrent file.
|
|
*/
|
|
function openTorrentFile () {
|
|
if (!windows.main.win) return
|
|
log('openTorrentFile')
|
|
const opts = {
|
|
title: 'Select a .torrent file.',
|
|
filters: [{ name: 'Torrent Files', extensions: ['torrent'] }],
|
|
properties: ['openFile', 'multiSelections']
|
|
}
|
|
setTitle(opts.title)
|
|
const selectedPaths = dialog.showOpenDialogSync(windows.main.win, opts)
|
|
resetTitle()
|
|
if (!Array.isArray(selectedPaths)) return
|
|
selectedPaths.forEach(selectedPath => {
|
|
windows.main.dispatch('addTorrent', selectedPath)
|
|
})
|
|
}
|
|
|
|
/*
|
|
* Show modal dialog to open a torrent URL (magnet uri, http torrent link, etc.)
|
|
*/
|
|
function openTorrentAddress () {
|
|
log('openTorrentAddress')
|
|
windows.main.dispatch('openTorrentAddress')
|
|
}
|
|
|
|
/**
|
|
* Dialogs on do not show a title on Mac, so the window title is used instead.
|
|
*/
|
|
function setTitle (title) {
|
|
if (process.platform === 'darwin') {
|
|
windows.main.dispatch('setTitle', title)
|
|
}
|
|
}
|
|
|
|
function resetTitle () {
|
|
windows.main.dispatch('resetTitle')
|
|
}
|
|
|
|
/**
|
|
* Pops up an Open File dialog with the given options.
|
|
* After the user selects files / folders, shows the Create Torrent page.
|
|
*/
|
|
function showOpenSeed (opts) {
|
|
setTitle(opts.title)
|
|
const selectedPaths = dialog.showOpenDialogSync(windows.main.win, opts)
|
|
resetTitle()
|
|
if (!Array.isArray(selectedPaths)) return
|
|
windows.main.dispatch('showCreateTorrent', selectedPaths)
|
|
}
|