feat(mailto): Allow N1 to be default client on windows

This commit is contained in:
Ben Gotow 2016-05-03 14:47:21 -07:00
parent dc30187d30
commit fad7c1ae86
4 changed files with 25 additions and 53 deletions

View file

@ -9,9 +9,6 @@ module.exports =
activate: (@state) -> activate: (@state) ->
@services = new LaunchServices() @services = new LaunchServices()
# We can't do anything unless they're on Mac OS X
return unless @services.available()
# We shouldn't ask if they've already said No # We shouldn't ask if they've already said No
return if NylasEnv.config.get(NOTIF_SETTINGS_KEY) is true return if NylasEnv.config.get(NOTIF_SETTINGS_KEY) is true

View file

@ -8,11 +8,9 @@ class DefaultMailClientItem extends React.Component {
super(); super();
this.state = {defaultClient: false}; this.state = {defaultClient: false};
this._services = new LaunchServices(); this._services = new LaunchServices();
if (this._services.available()) { this._services.isRegisteredForURLScheme('mailto', (registered) => {
this._services.isRegisteredForURLScheme('mailto', (registered) => { if (this._mounted) this.setState({defaultClient: registered});
if (this._mounted) this.setState({defaultClient: registered}); });
});
}
} }
componentDidMount() { componentDidMount() {

View file

@ -125,10 +125,6 @@ describe "LaunchServices", ->
execHitory = [] execHitory = []
@services = new LaunchServices.LaunchServicesMac() @services = new LaunchServices.LaunchServicesMac()
describe "available", ->
it "should return true", ->
expect(@services.available()).toEqual(true)
describe "readDefaults", -> describe "readDefaults", ->
describe "writeDefaults", -> describe "writeDefaults", ->
@ -213,19 +209,3 @@ describe "LaunchServices", ->
spyOn(@services, 'writeDefaults') spyOn(@services, 'writeDefaults')
@services.registerForURLScheme('mailto') @services.registerForURLScheme('mailto')
expect(@services.writeDefaults).toHaveBeenCalled() expect(@services.writeDefaults).toHaveBeenCalled()
describe "LaunchServicesLinux", ->
describe "available", ->
beforeEach ->
@services = new LaunchServices.LaunchServicesLinux()
it "should return true", ->
expect(@services.available()).toEqual(true)
describe "LaunchServicesUnavailable", ->
describe "available", ->
beforeEach ->
@services = new LaunchServices.LaunchServicesUnavailable()
it "should return false", ->
expect(@services.available()).toEqual(false)

View file

@ -1,26 +1,9 @@
exec = require('child_process').exec exec = require('child_process').exec
app = require('electron').remote.app
fs = require('fs') fs = require('fs')
bundleIdentifier = 'com.nylas.nylas-mail' bundleIdentifier = 'com.nylas.nylas-mail'
class LaunchServicesUnavailable
available: ->
false
isRegisteredForURLScheme: (scheme, callback) ->
throw new Error "isRegisteredForURLScheme is not available"
resetURLScheme: (scheme, callback) ->
throw new Error "resetURLScheme is not available"
registerForURLScheme: (scheme, callback) ->
throw new Error "registerForURLScheme is not available"
class LaunchServicesLinux class LaunchServicesLinux
available: ->
true
isRegisteredForURLScheme: (scheme, callback) -> isRegisteredForURLScheme: (scheme, callback) ->
throw new Error "isRegisteredForURLScheme is async, provide a callback" unless callback throw new Error "isRegisteredForURLScheme is async, provide a callback" unless callback
exec "xdg-mime query default x-scheme-handler/#{scheme}", (err, stdout, stderr) -> exec "xdg-mime query default x-scheme-handler/#{scheme}", (err, stdout, stderr) ->
@ -30,20 +13,17 @@ class LaunchServicesLinux
resetURLScheme: (scheme, callback) -> resetURLScheme: (scheme, callback) ->
exec "xdg-mime default thunderbird.desktop x-scheme-handler/#{scheme}", (err, stdout, stderr) -> exec "xdg-mime default thunderbird.desktop x-scheme-handler/#{scheme}", (err, stdout, stderr) ->
return callback(err) if callback and err return callback(err) if callback and err
callback(null, null) callback(null, null) if callback
registerForURLScheme: (scheme, callback) -> registerForURLScheme: (scheme, callback) ->
exec "xdg-mime default nylas.desktop x-scheme-handler/#{scheme}", (err, stdout, stderr) -> exec "xdg-mime default nylas.desktop x-scheme-handler/#{scheme}", (err, stdout, stderr) ->
return callback(err) if callback and err return callback(err) if callback and err
callback(null, null) callback(null, null) if callback
class LaunchServicesMac class LaunchServicesMac
constructor: -> constructor: ->
@secure = false @secure = false
available: ->
true
getLaunchServicesPlistPath: (callback) -> getLaunchServicesPlistPath: (callback) ->
secure = "#{process.env.HOME}/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist" secure = "#{process.env.HOME}/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist"
insecure = "#{process.env.HOME}/Library/Preferences/com.apple.LaunchServices.plist" insecure = "#{process.env.HOME}/Library/Preferences/com.apple.LaunchServices.plist"
@ -118,7 +98,24 @@ class LaunchServicesMac
@writeDefaults(defaults, callback) @writeDefaults(defaults, callback)
module.exports = LaunchServicesUnavailable class LaunchServicesElectron
constructor: ->
isRegisteredForURLScheme: (scheme, callback) ->
process.nextTick =>
callback(app.isDefaultProtocolClient(scheme))
resetURLScheme: (scheme, callback) ->
process.nextTick =>
app.removeAsDefaultProtocolClient(scheme)
callback(null, null) if callback
registerForURLScheme: (scheme, callback) ->
process.nextTick =>
app.setAsDefaultProtocolClient(scheme)
callback(null, null) if callback
module.exports = LaunchServicesElectron
if process.platform is 'darwin' if process.platform is 'darwin'
module.exports = LaunchServicesMac module.exports = LaunchServicesMac
else if process.platform is 'linux' else if process.platform is 'linux'
@ -126,4 +123,4 @@ else if process.platform is 'linux'
module.exports.LaunchServicesMac = LaunchServicesMac module.exports.LaunchServicesMac = LaunchServicesMac
module.exports.LaunchServicesLinux = LaunchServicesLinux module.exports.LaunchServicesLinux = LaunchServicesLinux
module.exports.LaunchServicesUnavailable = LaunchServicesUnavailable module.exports.LaunchServicesElectron = LaunchServicesElectron