Pref: default torrent file handler
Before, the app made itself the default torrent file handler automatically, pissing off some of our users. Now, it's not by default, and you can change it in the prefs.
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