electron/atom/browser/lib/init.coffee

98 lines
3.2 KiB
CoffeeScript
Raw Normal View History

2014-06-22 06:56:00 +00:00
fs = require 'fs'
path = require 'path'
module = require 'module'
util = require 'util'
2013-04-15 07:39:54 +00:00
# Expose information of current process.
process.type = 'browser'
2014-03-16 05:24:25 +00:00
process.resourcesPath = path.resolve process.argv[1], '..', '..', '..', '..'
# We modified the original process.argv to let node.js load the atom.js,
# we need to restore it here.
process.argv.splice 1, 1
# Pick out switches appended by atom-shell.
startMark = process.argv.indexOf '--atom-shell-switches-start'
endMark = process.argv.indexOf '--atom-shell-switches-end'
# And --force-device-scale-factor on Linux.
endMark++ if process.platform is 'linux'
process.argv.splice startMark, endMark - startMark + 1
# Add browser/api/lib to require's search paths,
2013-09-27 03:02:08 +00:00
# which contains javascript part of Atom's built-in libraries.
2014-06-22 06:56:00 +00:00
globalPaths = module.globalPaths
2014-03-16 05:24:25 +00:00
globalPaths.push path.join process.resourcesPath, 'atom', 'browser', 'api', 'lib'
2014-10-25 15:21:17 +00:00
# Following operations need extra bindings by AtomBindings.
process.once 'BIND_DONE', ->
# Import common settings.
require path.resolve(__dirname, '..', '..', 'common', 'lib', 'init.js')
if process.platform is 'win32'
# Redirect node's console to use our own implementations, since node can not
# handle console output when running as GUI program.
print = (args...) ->
process.log util.format(args...)
console.log = console.error = console.warn = print
process.stdout.write = process.stderr.write = print
# Always returns EOF for stdin stream.
Readable = require('stream').Readable
stdin = new Readable
stdin.push null
process.__defineGetter__ 'stdin', -> stdin
# Don't quit on fatal error.
process.on 'uncaughtException', (error) ->
# Show error in GUI.
stack = error.stack ? "#{error.name}: #{error.message}"
message = "Uncaught Exception:\n#{stack}"
require('dialog').showErrorBox 'A JavaScript error occured in the browser process', message
2013-04-15 07:39:54 +00:00
# Emit 'exit' event on quit.
require('app').on 'quit', ->
process.emit 'exit'
# Load the RPC server.
require './rpc-server'
# Load the guest view manager.
require './guest-view-manager'
require './guest-window-manager'
# Now we try to load app's package.json.
packageJson = null
2013-04-15 07:39:54 +00:00
searchPaths = [ 'app', 'app.asar', 'default_app' ]
for packagePath in searchPaths
try
packagePath = path.join process.resourcesPath, packagePath
packageJson = JSON.parse(fs.readFileSync(path.join(packagePath, 'package.json')))
2014-10-01 12:40:52 +00:00
break
catch e
continue
throw new Error("Unable to find a valid app") unless packageJson?
2013-04-15 07:39:54 +00:00
# Set application's version.
app = require 'app'
app.setVersion packageJson.version if packageJson.version?
# Set application's name.
if packageJson.productName?
app.setName packageJson.productName
else if packageJson.name?
app.setName packageJson.name
2014-09-18 11:12:24 +00:00
# Set application's desktop name.
if packageJson.desktopName?
app.setDesktopName packageJson.desktopName
2014-09-24 07:06:36 +00:00
else
app.setDesktopName '#{app.getName()}.desktop'
2014-09-18 11:12:24 +00:00
2014-08-28 06:58:15 +00:00
# Load the chrome extension support.
require './chrome-extension.js'
# Finally load app's main.js and transfer control to C++.
2014-06-22 06:56:00 +00:00
module._load path.join(packagePath, packageJson.main), module, true