module.exports = Preferences var h = require('virtual-dom/h') var hyperx = require('hyperx') var hx = hyperx(h) var {dispatch} = require('../lib/dispatcher') var remote = require('electron').remote var dialog = remote.dialog function Preferences (state) { return hx`
${renderGeneralSection(state)}
` } function renderGeneralSection (state) { return renderSection({ title: 'General', description: '', icon: 'settings' }, [ renderDownloadDirSelector(state) ]) } function renderDownloadDirSelector (state) { return renderFileSelector({ label: 'Download Path', description: 'Data from torrents will be saved here', property: 'downloadPath', options: { title: 'Select download directory', properties: [ 'openDirectory' ] } }, state.unsaved.prefs.downloadPath, function (filePath) { setStateValue('downloadPath', filePath) }) } // Renders a prefs section. // - definition should be {icon, title, description} // - controls should be an array of vdom elements function renderSection (definition, controls) { var helpElem = !definition.description ? null : hx`
help_outline${definition.description}
` return hx`
${definition.icon}${definition.title}
${helpElem}
${controls}
` } // Creates a file chooser // - defition should be {label, description, options} // options are passed to dialog.showOpenDialog // - value should be the current pref, a file or folder path // - callback takes a new file or folder path function renderFileSelector (definition, value, callback) { return hx`
` function handleClick () { dialog.showOpenDialog(remote.getCurrentWindow(), definition.options, function (filenames) { if (!Array.isArray(filenames)) return callback(filenames[0]) }) } } function setStateValue (property, value) { dispatch('updatePreferences', property, value) }