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