| (function() { |
| var Command, Parser, Protocol, StartActivityCommand, |
| __hasProp = {}.hasOwnProperty, |
| __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; |
| |
| Command = require('../../command'); |
| |
| Protocol = require('../../protocol'); |
| |
| Parser = require('../../parser'); |
| |
| StartActivityCommand = (function(_super) { |
| var EXTRA_TYPES, RE_ERROR; |
| |
| __extends(StartActivityCommand, _super); |
| |
| function StartActivityCommand() { |
| return StartActivityCommand.__super__.constructor.apply(this, arguments); |
| } |
| |
| RE_ERROR = /^Error: (.*)$/; |
| |
| EXTRA_TYPES = { |
| string: 's', |
| "null": 'sn', |
| bool: 'z', |
| int: 'i', |
| long: 'l', |
| float: 'l', |
| uri: 'u', |
| component: 'cn' |
| }; |
| |
| StartActivityCommand.prototype.execute = function(options) { |
| var args; |
| args = this._intentArgs(options); |
| if (options.debug) { |
| args.push('-D'); |
| } |
| if (options.wait) { |
| args.push('-W'); |
| } |
| if (options.user || options.user === 0) { |
| args.push('--user', this._escape(options.user)); |
| } |
| return this._run('start', args); |
| }; |
| |
| StartActivityCommand.prototype._run = function(command, args) { |
| this._send("shell:am " + command + " " + (args.join(' '))); |
| return this.parser.readAscii(4).then((function(_this) { |
| return function(reply) { |
| switch (reply) { |
| case Protocol.OKAY: |
| return _this.parser.searchLine(RE_ERROR)["finally"](function() { |
| return _this.connection.end(); |
| }).then(function(match) { |
| throw new Error(match[1]); |
| })["catch"](Parser.PrematureEOFError, function(err) { |
| return true; |
| }); |
| case Protocol.FAIL: |
| return _this.parser.readError(); |
| default: |
| return _this.parser.unexpected(reply, 'OKAY or FAIL'); |
| } |
| }; |
| })(this)); |
| }; |
| |
| StartActivityCommand.prototype._intentArgs = function(options) { |
| var args; |
| args = []; |
| if (options.extras) { |
| args.push.apply(args, this._formatExtras(options.extras)); |
| } |
| if (options.action) { |
| args.push('-a', this._escape(options.action)); |
| } |
| if (options.data) { |
| args.push('-d', this._escape(options.data)); |
| } |
| if (options.mimeType) { |
| args.push('-t', this._escape(options.mimeType)); |
| } |
| if (options.category) { |
| if (Array.isArray(options.category)) { |
| options.category.forEach((function(_this) { |
| return function(category) { |
| return args.push('-c', _this._escape(category)); |
| }; |
| })(this)); |
| } else { |
| args.push('-c', this._escape(options.category)); |
| } |
| } |
| if (options.component) { |
| args.push('-n', this._escape(options.component)); |
| } |
| if (options.flags) { |
| args.push('-f', this._escape(options.flags)); |
| } |
| return args; |
| }; |
| |
| StartActivityCommand.prototype._formatExtras = function(extras) { |
| if (!extras) { |
| return []; |
| } |
| if (Array.isArray(extras)) { |
| return extras.reduce((function(_this) { |
| return function(all, extra) { |
| return all.concat(_this._formatLongExtra(extra)); |
| }; |
| })(this), []); |
| } else { |
| return Object.keys(extras).reduce((function(_this) { |
| return function(all, key) { |
| return all.concat(_this._formatShortExtra(key, extras[key])); |
| }; |
| })(this), []); |
| } |
| }; |
| |
| StartActivityCommand.prototype._formatShortExtra = function(key, value) { |
| var sugared; |
| sugared = { |
| key: key |
| }; |
| if (value === null) { |
| sugared.type = 'null'; |
| } else if (Array.isArray(value)) { |
| throw new Error("Refusing to format array value '" + key + "' using short syntax; empty array would cause unpredictable results due to unknown type. Please use long syntax instead."); |
| } else { |
| switch (typeof value) { |
| case 'string': |
| sugared.type = 'string'; |
| sugared.value = value; |
| break; |
| case 'boolean': |
| sugared.type = 'bool'; |
| sugared.value = value; |
| break; |
| case 'number': |
| sugared.type = 'int'; |
| sugared.value = value; |
| break; |
| case 'object': |
| sugared = value; |
| sugared.key = key; |
| } |
| } |
| return this._formatLongExtra(sugared); |
| }; |
| |
| StartActivityCommand.prototype._formatLongExtra = function(extra) { |
| var args, type; |
| args = []; |
| if (!extra.type) { |
| extra.type = 'string'; |
| } |
| type = EXTRA_TYPES[extra.type]; |
| if (!type) { |
| throw new Error("Unsupported type '" + extra.type + "' for extra '" + extra.key + "'"); |
| } |
| if (extra.type === 'null') { |
| args.push("--e" + type); |
| args.push(this._escape(extra.key)); |
| } else if (Array.isArray(extra.value)) { |
| args.push("--e" + type + "a"); |
| args.push(this._escape(extra.key)); |
| args.push(this._escape(extra.value.join(','))); |
| } else { |
| args.push("--e" + type); |
| args.push(this._escape(extra.key)); |
| args.push(this._escape(extra.value)); |
| } |
| return args; |
| }; |
| |
| return StartActivityCommand; |
| |
| })(Command); |
| |
| module.exports = StartActivityCommand; |
| |
| }).call(this); |