Merge pull request #771 from feross/dc/file-handler
Pref: default torrent file handler
This commit is contained in:
@@ -10,7 +10,6 @@ var config = require('../config')
|
|||||||
var crashReporter = require('../crash-reporter')
|
var crashReporter = require('../crash-reporter')
|
||||||
var dialog = require('./dialog')
|
var dialog = require('./dialog')
|
||||||
var dock = require('./dock')
|
var dock = require('./dock')
|
||||||
var handlers = require('./handlers')
|
|
||||||
var ipc = require('./ipc')
|
var ipc = require('./ipc')
|
||||||
var log = require('./log')
|
var log = require('./log')
|
||||||
var menu = require('./menu')
|
var menu = require('./menu')
|
||||||
@@ -111,7 +110,6 @@ function init () {
|
|||||||
function delayedInit () {
|
function delayedInit () {
|
||||||
announcement.init()
|
announcement.init()
|
||||||
dock.init()
|
dock.init()
|
||||||
handlers.install()
|
|
||||||
tray.init()
|
tray.init()
|
||||||
updater.init()
|
updater.init()
|
||||||
userTasks.init()
|
userTasks.init()
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ var app = electron.app
|
|||||||
|
|
||||||
var dialog = require('./dialog')
|
var dialog = require('./dialog')
|
||||||
var dock = require('./dock')
|
var dock = require('./dock')
|
||||||
|
var handlers = require('./handlers')
|
||||||
var log = require('./log')
|
var log = require('./log')
|
||||||
var menu = require('./menu')
|
var menu = require('./menu')
|
||||||
var powerSaveBlocker = require('./power-save-blocker')
|
var powerSaveBlocker = require('./power-save-blocker')
|
||||||
@@ -91,6 +92,14 @@ function init () {
|
|||||||
ipc.on('showItemInFolder', (e, ...args) => shell.showItemInFolder(...args))
|
ipc.on('showItemInFolder', (e, ...args) => shell.showItemInFolder(...args))
|
||||||
ipc.on('moveItemToTrash', (e, ...args) => shell.moveItemToTrash(...args))
|
ipc.on('moveItemToTrash', (e, ...args) => shell.moveItemToTrash(...args))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* File handlers
|
||||||
|
*/
|
||||||
|
ipc.on('setDefaultFileHandler', (e, flag) => {
|
||||||
|
if (flag) handlers.install()
|
||||||
|
else handlers.uninstall()
|
||||||
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Windows: Main
|
* Windows: Main
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
const {dispatch} = require('../lib/dispatcher')
|
const {dispatch} = require('../lib/dispatcher')
|
||||||
const State = require('../lib/state')
|
const State = require('../lib/state')
|
||||||
|
const ipcRenderer = require('electron').ipcRenderer
|
||||||
|
|
||||||
// Controls the Preferences screen
|
// Controls the Preferences screen
|
||||||
module.exports = class PrefsController {
|
module.exports = class PrefsController {
|
||||||
@@ -41,6 +42,9 @@ module.exports = class PrefsController {
|
|||||||
// All unsaved prefs take effect atomically, and are saved to config.json
|
// All unsaved prefs take effect atomically, and are saved to config.json
|
||||||
save () {
|
save () {
|
||||||
var state = this.state
|
var state = this.state
|
||||||
|
if (state.unsaved.prefs.isFileHandler !== state.saved.prefs.isFileHandler) {
|
||||||
|
ipcRenderer.send('setDefaultFileHandler', state.unsaved.prefs.isFileHandler)
|
||||||
|
}
|
||||||
state.saved.prefs = Object.assign(state.saved.prefs || {}, state.unsaved.prefs)
|
state.saved.prefs = Object.assign(state.saved.prefs || {}, state.unsaved.prefs)
|
||||||
State.save(state)
|
State.save(state)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,10 @@ function run (state) {
|
|||||||
migrate_0_7_2(state.saved)
|
migrate_0_7_2(state.saved)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (semver.lt(version, '0.11.0')) {
|
||||||
|
migrate_0_11_0(state.saved)
|
||||||
|
}
|
||||||
|
|
||||||
// Config is now on the new version
|
// Config is now on the new version
|
||||||
state.saved.version = config.APP_VERSION
|
state.saved.version = config.APP_VERSION
|
||||||
}
|
}
|
||||||
@@ -93,3 +97,10 @@ function migrate_0_7_2 (saved) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function migrate_0_11_0 (saved) {
|
||||||
|
if (saved.prefs.isFileHandler === undefined) {
|
||||||
|
// The app used to make itself the default torrent file handler automatically
|
||||||
|
saved.prefs.isFileHandler = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ function renderGeneralSection (state) {
|
|||||||
description: '',
|
description: '',
|
||||||
icon: 'settings'
|
icon: 'settings'
|
||||||
}, [
|
}, [
|
||||||
renderDownloadDirSelector(state)
|
renderDownloadDirSelector(state),
|
||||||
|
renderFileHandlers(state)
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,6 +44,29 @@ function renderDownloadDirSelector (state) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function renderFileHandlers (state) {
|
||||||
|
var definition = {
|
||||||
|
key: 'file-handlers',
|
||||||
|
label: 'Handle Torrent Files'
|
||||||
|
}
|
||||||
|
var buttonText = state.unsaved.prefs.isFileHandler
|
||||||
|
? 'Remove default app for torrent files'
|
||||||
|
: 'Make WebTorrent the default app for torrent files'
|
||||||
|
var controls = [(
|
||||||
|
<button key='toggle-handlers'
|
||||||
|
className='btn'
|
||||||
|
onClick={toggleFileHandlers}>
|
||||||
|
{buttonText}
|
||||||
|
</button>
|
||||||
|
)]
|
||||||
|
return renderControlGroup(definition, controls)
|
||||||
|
|
||||||
|
function toggleFileHandlers () {
|
||||||
|
var isFileHandler = state.unsaved.prefs.isFileHandler
|
||||||
|
dispatch('updatePreferences', 'isFileHandler', !isFileHandler)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Renders a prefs section.
|
// Renders a prefs section.
|
||||||
// - definition should be {icon, title, description}
|
// - definition should be {icon, title, description}
|
||||||
// - controls should be an array of vdom elements
|
// - controls should be an array of vdom elements
|
||||||
@@ -73,25 +97,18 @@ function renderSection (definition, controls) {
|
|||||||
// - value should be the current pref, a file or folder path
|
// - value should be the current pref, a file or folder path
|
||||||
// - callback takes a new file or folder path
|
// - callback takes a new file or folder path
|
||||||
function renderFileSelector (definition, value, callback) {
|
function renderFileSelector (definition, value, callback) {
|
||||||
return (
|
var controls = [(
|
||||||
<div key={definition.key} className='control-group'>
|
<input type='text' className='file-picker-text'
|
||||||
<div className='controls'>
|
id={definition.property}
|
||||||
<label className='control-label'>
|
disabled='disabled'
|
||||||
<div className='preference-title'>{definition.label}</div>
|
value={value} />
|
||||||
<div className='preference-description'>{definition.description}</div>
|
), (
|
||||||
</label>
|
<button className='btn' onClick={handleClick}>
|
||||||
<div className='controls'>
|
<i className='icon'>folder_open</i>
|
||||||
<input type='text' className='file-picker-text'
|
</button>
|
||||||
id={definition.property}
|
)]
|
||||||
disabled='disabled'
|
return renderControlGroup(definition, controls)
|
||||||
value={value} />
|
|
||||||
<button className='btn' onClick={handleClick}>
|
|
||||||
<i className='icon'>folder_open</i>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
function handleClick () {
|
function handleClick () {
|
||||||
dialog.showOpenDialog(remote.getCurrentWindow(), definition.options, function (filenames) {
|
dialog.showOpenDialog(remote.getCurrentWindow(), definition.options, function (filenames) {
|
||||||
if (!Array.isArray(filenames)) return
|
if (!Array.isArray(filenames)) return
|
||||||
@@ -100,6 +117,22 @@ function renderFileSelector (definition, value, callback) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function renderControlGroup (definition, controls) {
|
||||||
|
return (
|
||||||
|
<div key={definition.key} className='control-group'>
|
||||||
|
<div className='controls'>
|
||||||
|
<label className='control-label'>
|
||||||
|
<div className='preference-title'>{definition.label}</div>
|
||||||
|
<div className='preference-description'>{definition.description}</div>
|
||||||
|
</label>
|
||||||
|
<div className='controls'>
|
||||||
|
{controls}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
function setStateValue (property, value) {
|
function setStateValue (property, value) {
|
||||||
dispatch('updatePreferences', property, value)
|
dispatch('updatePreferences', property, value)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user