diff --git a/lib/cli.js b/lib/cli.js index e4ee9b21..3ed125f4 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -64,6 +64,10 @@ program , 'screen WebSocket URL pattern' , String , 'ws://${publicIp}:${publicPort}') + .option('--connect-url-pattern ' + , 'adb connect URL pattern' + , String + , '${publicIp}:${publicPort}') .action(function() { var serials = cliutil.allUnknownArgs(arguments) , options = cliutil.lastArg(arguments) @@ -101,6 +105,7 @@ program , '--adb-host', options.adbHost , '--adb-port', options.adbPort , '--screen-ws-url-pattern', options.screenWsUrlPattern + , '--connect-url-pattern', options.connectUrlPattern , '--heartbeat-interval', options.heartbeatInterval ]) } @@ -131,6 +136,10 @@ program .option('--connect-port ' , 'port allocated to adb connect' , Number) + .option('--connect-url-pattern ' + , 'adb connect URL pattern' + , String + , '${publicIp}:${publicPort}') .option('--public-ip ' , 'public ip for global access' , String @@ -192,6 +201,7 @@ program , adbPort: options.adbPort , screenWsUrlPattern: options.screenWsUrlPattern , screenPort: options.screenPort + , connectUrlPattern: options.connectUrlPattern , connectPort: options.connectPort , heartbeatInterval: options.heartbeatInterval }) diff --git a/lib/units/device/plugins/connect.js b/lib/units/device/plugins/connect.js index 0142ccf6..7dd06965 100644 --- a/lib/units/device/plugins/connect.js +++ b/lib/units/device/plugins/connect.js @@ -15,13 +15,14 @@ module.exports = syrup.serial() .dependency(require('../support/push')) .dependency(require('./group')) .dependency(require('./solo')) - .define(function(options, adb, router, push, group, solo) { + .dependency(require('./util/urlformat')) + .define(function(options, adb, router, push, group, solo, urlformat) { var log = logger.createLogger('device:plugins:connect') , plugin = Object.create(null) , activeServer = null plugin.port = options.connectPort - plugin.url = util.format('%s:%s', options.publicIp, plugin.port) + plugin.url = urlformat(options.connectUrlPattern, plugin.port) plugin.start = function() { return new Promise(function(resolve, reject) { diff --git a/lib/units/device/plugins/util/urlformat.js b/lib/units/device/plugins/util/urlformat.js new file mode 100644 index 00000000..bd23ea75 --- /dev/null +++ b/lib/units/device/plugins/util/urlformat.js @@ -0,0 +1,33 @@ +var syrup = require('stf-syrup') +var _ = require('lodash') +var tr = require('transliteration') + +module.exports = syrup.serial() + .dependency(require('../identity')) + .dependency(require('../data')) + .define(function(options, identity, data) { + function createSlug() { + var model = identity.model + , name = data ? data.name.id : '' + + return (name === '' || model.toLowerCase() === name.toLowerCase()) + ? tr.slugify(model) + : tr.slugify(name + ' ' + model) + } + + var defaults = { + publicIp: options.publicIp + , serial: options.serial + , model: identity.model + , name: data ? data.name.id : '' + , slug: createSlug() + } + + return function(template, port) { + return _.template(template, { + imports: { + slugify: tr.slugify + } + })(_.defaults({publicPort: port}, defaults)) + } + }) diff --git a/package.json b/package.json index 36e2a588..6e6063b7 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ "stf-syrup": "^1.0.0", "stf-wiki": "^1.0.0", "temp": "^0.8.1", + "transliteration": "^0.1.1", "ws": "^0.7.2", "zmq": "^2.12.0" },