From 8233faf5188e7b98d632306936c99c10e5326970 Mon Sep 17 00:00:00 2001 From: DC Date: Wed, 10 Aug 2016 02:21:10 -0700 Subject: [PATCH] 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. --- src/main/index.js | 2 - src/main/ipc.js | 9 +++ src/renderer/controllers/prefs-controller.js | 4 ++ src/renderer/lib/migrations.js | 11 +++ src/renderer/views/preferences.js | 73 ++++++++++++++------ 5 files changed, 77 insertions(+), 22 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index 63a67b95..b422a2dc 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -10,7 +10,6 @@ var config = require('../config') var crashReporter = require('../crash-reporter') var dialog = require('./dialog') var dock = require('./dock') -var handlers = require('./handlers') var ipc = require('./ipc') var log = require('./log') var menu = require('./menu') @@ -111,7 +110,6 @@ function init () { function delayedInit () { announcement.init() dock.init() - handlers.install() tray.init() updater.init() userTasks.init() diff --git a/src/main/ipc.js b/src/main/ipc.js index eb4ba876..84f6d61b 100644 --- a/src/main/ipc.js +++ b/src/main/ipc.js @@ -8,6 +8,7 @@ var app = electron.app var dialog = require('./dialog') var dock = require('./dock') +var handlers = require('./handlers') var log = require('./log') var menu = require('./menu') var powerSaveBlocker = require('./power-save-blocker') @@ -91,6 +92,14 @@ function init () { ipc.on('showItemInFolder', (e, ...args) => shell.showItemInFolder(...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 */ diff --git a/src/renderer/controllers/prefs-controller.js b/src/renderer/controllers/prefs-controller.js index 9ba400bf..0c19d2d1 100644 --- a/src/renderer/controllers/prefs-controller.js +++ b/src/renderer/controllers/prefs-controller.js @@ -1,5 +1,6 @@ const {dispatch} = require('../lib/dispatcher') const State = require('../lib/state') +const ipcRenderer = require('electron').ipcRenderer // Controls the Preferences screen module.exports = class PrefsController { @@ -41,6 +42,9 @@ module.exports = class PrefsController { // All unsaved prefs take effect atomically, and are saved to config.json save () { 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.save(state) } diff --git a/src/renderer/lib/migrations.js b/src/renderer/lib/migrations.js index 7c1aa8a6..b284f4c6 100644 --- a/src/renderer/lib/migrations.js +++ b/src/renderer/lib/migrations.js @@ -25,6 +25,10 @@ function run (state) { 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 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 + } +} diff --git a/src/renderer/views/preferences.js b/src/renderer/views/preferences.js index 3caaac93..1518514a 100644 --- a/src/renderer/views/preferences.js +++ b/src/renderer/views/preferences.js @@ -22,7 +22,8 @@ function renderGeneralSection (state) { description: '', 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 = [( + + )] + return renderControlGroup(definition, controls) + + function toggleFileHandlers () { + var isFileHandler = state.unsaved.prefs.isFileHandler + dispatch('updatePreferences', 'isFileHandler', !isFileHandler) + } +} + // Renders a prefs section. // - definition should be {icon, title, description} // - 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 // - callback takes a new file or folder path function renderFileSelector (definition, value, callback) { - return ( -
-
- -
- - -
-
-
- ) + var controls = [( + + ), ( + + )] + return renderControlGroup(definition, controls) + function handleClick () { dialog.showOpenDialog(remote.getCurrentWindow(), definition.options, function (filenames) { if (!Array.isArray(filenames)) return @@ -100,6 +117,22 @@ function renderFileSelector (definition, value, callback) { } } +function renderControlGroup (definition, controls) { + return ( +
+
+ +
+ {controls} +
+
+
+ ) +} + function setStateValue (property, value) { dispatch('updatePreferences', property, value) }