mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-12-27 02:23:28 +08:00
9378f4480c
Conflicts: internal_packages/inbox-activity-bar/lib/activity-bar-long-poll-item.cjsx
81 lines
2.8 KiB
CoffeeScript
81 lines
2.8 KiB
CoffeeScript
exec = require('child_process').exec
|
|
fs = require('fs')
|
|
|
|
bundleIdentifier = 'com.nylas.nylas-mail'
|
|
|
|
module.exports =
|
|
class LaunchServices
|
|
|
|
constructor: ->
|
|
@secure = false
|
|
|
|
getPlatform: ->
|
|
process.platform
|
|
|
|
available: ->
|
|
@getPlatform() is 'darwin'
|
|
|
|
getLaunchServicesPlistPath: (callback) ->
|
|
secure = "#{process.env.HOME}/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist"
|
|
insecure = "#{process.env.HOME}/Library/Preferences/com.apple.LaunchServices.plist"
|
|
|
|
fs.exists secure, (exists) ->
|
|
if exists
|
|
callback(secure)
|
|
else
|
|
callback(insecure)
|
|
|
|
readDefaults: (callback) ->
|
|
@getLaunchServicesPlistPath (plistPath) ->
|
|
tmpPath = "#{plistPath}.#{Math.random()}"
|
|
exec "plutil -convert json \"#{plistPath}\" -o \"#{tmpPath}\"", (err, stdout, stderr) ->
|
|
return callback(err) if callback and err
|
|
fs.readFile tmpPath, (err, data) ->
|
|
return callback(err) if callback and err
|
|
try
|
|
data = JSON.parse(data)
|
|
callback(data['LSHandlers'], data)
|
|
fs.unlink(tmpPath)
|
|
catch e
|
|
callback(e) if callback and err
|
|
|
|
writeDefaults: (defaults, callback) ->
|
|
@getLaunchServicesPlistPath (plistPath) ->
|
|
tmpPath = "#{plistPath}.#{Math.random()}"
|
|
exec "plutil -convert json \"#{plistPath}\" -o \"#{tmpPath}\"", (err, stdout, stderr) ->
|
|
return callback(err) if callback and err
|
|
try
|
|
data = fs.readFileSync(tmpPath)
|
|
data = JSON.parse(data)
|
|
data['LSHandlers'] = defaults
|
|
data = JSON.stringify(data)
|
|
fs.writeFileSync(tmpPath, data)
|
|
catch error
|
|
return callback(error) if callback and error
|
|
|
|
exec "plutil -convert binary1 \"#{tmpPath}\" -o \"#{plistPath}\"", ->
|
|
fs.unlink(tmpPath)
|
|
exec "/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user", (err, stdout, stderr) ->
|
|
callback(err) if callback
|
|
|
|
isRegisteredForURLScheme: (scheme, callback) ->
|
|
throw new Error "isRegisteredForURLScheme is async, provide a callback" unless callback
|
|
@readDefaults (defaults) ->
|
|
for def in defaults
|
|
if def.LSHandlerURLScheme is scheme
|
|
return callback(def.LSHandlerRoleAll is bundleIdentifier)
|
|
callback(false)
|
|
|
|
registerForURLScheme: (scheme, callback) ->
|
|
@readDefaults (defaults) =>
|
|
# Remove anything already registered for the scheme
|
|
for ii in [defaults.length-1..0] by -1
|
|
if defaults[ii].LSHandlerURLScheme is scheme
|
|
defaults.splice(ii, 1)
|
|
|
|
# Add our scheme default
|
|
defaults.push
|
|
LSHandlerURLScheme: scheme
|
|
LSHandlerRoleAll: bundleIdentifier
|
|
|
|
@writeDefaults(defaults, callback)
|