UNPKG

mobile-cli-lib

Version:
112 lines (111 loc) 4.79 kB
"use strict"; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var device_discovery_1 = require("./device-discovery"); var helpers = require("../../helpers"); var android_device_1 = require("../android/android-device"); var os_1 = require("os"); var Future = require("fibers/future"); var fiberBootstrap = require("../../fiber-bootstrap"); var AndroidDeviceDiscovery = (function (_super) { __extends(AndroidDeviceDiscovery, _super); function AndroidDeviceDiscovery($childProcess, $injector, $adb) { _super.call(this); this.$childProcess = $childProcess; this.$injector = $injector; this.$adb = $adb; this._devices = []; } AndroidDeviceDiscovery.prototype.createAndAddDevice = function (adbDeviceInfo) { this._devices.push(adbDeviceInfo); var device = this.$injector.resolve(android_device_1.AndroidDevice, { identifier: adbDeviceInfo.identifier, status: adbDeviceInfo.status }); this.addDevice(device); }; AndroidDeviceDiscovery.prototype.deleteAndRemoveDevice = function (deviceIdentifier) { _.remove(this._devices, function (d) { return d.identifier === deviceIdentifier; }); this.removeDevice(deviceIdentifier); }; AndroidDeviceDiscovery.prototype.startLookingForDevices = function () { var _this = this; return (function () { _this.ensureAdbServerStarted().wait(); var blockingFuture = new Future(); _this.checkForDevices(blockingFuture).wait(); }).future()(); }; AndroidDeviceDiscovery.prototype.checkForDevices = function (future) { var _this = this; var adbData = ""; var result = this.$adb.executeCommand(["devices"], { returnChildProcess: true }).wait(); result.stdout.on("data", function (data) { adbData += data.toString(); }); result.stderr.on("data", function (data) { var error = new Error(data.toString()); if (future && !future.isResolved()) { return future.throw(error); } else { throw (error); } }); result.on("error", function (err) { if (future && !future.isResolved()) { return future.throw(err); } else { throw (err); } }); result.on("close", function (exitCode) { fiberBootstrap.run(function () { _this.checkCurrentData(adbData).wait(); if (future && !future.isResolved()) { future.return(); } }); }); return future || Future.fromResult(); }; AndroidDeviceDiscovery.prototype.checkCurrentData = function (result) { var _this = this; return (function () { var currentDevices = result.toString().split(os_1.EOL).slice(1) .filter(function (element) { return !helpers.isNullOrWhitespace(element); }) .map(function (element) { var _a = element.split('\t'), identifier = _a[0], status = _a[1]; return { identifier: identifier, status: status }; }); _(_this._devices) .reject(function (d) { return _.find(currentDevices, function (device) { return device.identifier === d.identifier && device.status === d.status; }); }) .each(function (d) { return _this.deleteAndRemoveDevice(d.identifier); }); _(currentDevices) .reject(function (d) { return _.find(_this._devices, function (device) { return device.identifier === d.identifier && device.status === d.status; }); }) .each(function (d) { return _this.createAndAddDevice(d); }); }).future()(); }; AndroidDeviceDiscovery.prototype.ensureAdbServerStarted = function () { var _this = this; return (function () { if (!_this.isStarted) { _this.isStarted = true; try { return _this.$adb.executeCommand(["start-server"]).wait(); } catch (err) { _this.isStarted = false; throw err; } } }).future()(); }; return AndroidDeviceDiscovery; }(device_discovery_1.DeviceDiscovery)); exports.AndroidDeviceDiscovery = AndroidDeviceDiscovery; $injector.register("androidDeviceDiscovery", AndroidDeviceDiscovery);