From 8d80a759f599de40d1ae021ff1d8fcfd76908ef5 Mon Sep 17 00:00:00 2001 From: fatme Date: Tue, 13 Nov 2018 09:50:16 +0200 Subject: [PATCH 1/2] feat(preview-api): Add api for getting logs from preview app --- lib/bootstrap.ts | 1 + lib/commands/preview.ts | 8 ++++++++ lib/definitions/preview-app-livesync.d.ts | 4 ++++ .../playground/devices/preview-devices-service.ts | 14 +++++++++++++- .../playground/preview-app-log-provider.ts | 10 ++++++++++ .../livesync/playground/preview-sdk-service.ts | 8 +++----- 6 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 lib/services/livesync/playground/preview-app-log-provider.ts diff --git a/lib/bootstrap.ts b/lib/bootstrap.ts index b6283ba8f9..45a92f38d3 100644 --- a/lib/bootstrap.ts +++ b/lib/bootstrap.ts @@ -132,6 +132,7 @@ $injector.require("androidLiveSyncService", "./services/livesync/android-livesyn $injector.require("iOSLiveSyncService", "./services/livesync/ios-livesync-service"); $injector.require("usbLiveSyncService", "./services/livesync/livesync-service"); // The name is used in https://github.com/NativeScript/nativescript-dev-typescript $injector.require("previewAppLiveSyncService", "./services/livesync/playground/preview-app-livesync-service"); +$injector.require("previewAppLogProvider", "./services/livesync/playground/preview-app-log-provider"); $injector.require("previewAppPluginsService", "./services/livesync/playground/preview-app-plugins-service"); $injector.require("previewSdkService", "./services/livesync/playground/preview-sdk-service"); $injector.requirePublicClass("previewDevicesService", "./services/livesync/playground/devices/preview-devices-service"); diff --git a/lib/commands/preview.ts b/lib/commands/preview.ts index bc42413b3f..f3bf388a30 100644 --- a/lib/commands/preview.ts +++ b/lib/commands/preview.ts @@ -1,3 +1,5 @@ +import { DEVICE_LOG_EVENT_NAME } from "../common/constants"; + export class PreviewCommand implements ICommand { public allowedParameters: ICommandParameter[] = []; private static MIN_SUPPORTED_WEBPACK_VERSION = "0.17.0"; @@ -5,12 +7,18 @@ export class PreviewCommand implements ICommand { constructor(private $bundleValidatorHelper: IBundleValidatorHelper, private $errors: IErrors, private $liveSyncService: ILiveSyncService, + private $logger: ILogger, private $networkConnectivityValidator: INetworkConnectivityValidator, private $projectData: IProjectData, private $options: IOptions, + private $previewAppLogProvider: IPreviewAppLogProvider, private $previewQrCodeService: IPreviewQrCodeService) { } public async execute(): Promise { + this.$previewAppLogProvider.on(DEVICE_LOG_EVENT_NAME, (deviceId: string, message: string) => { + this.$logger.info(message); + }); + await this.$liveSyncService.liveSync([], { syncToPreviewApp: true, projectDir: this.$projectData.projectDir, diff --git a/lib/definitions/preview-app-livesync.d.ts b/lib/definitions/preview-app-livesync.d.ts index 01faa8bda3..dd446cc747 100644 --- a/lib/definitions/preview-app-livesync.d.ts +++ b/lib/definitions/preview-app-livesync.d.ts @@ -22,6 +22,10 @@ declare global { getExternalPlugins(device: Device): string[]; } + interface IPreviewAppLogProvider extends EventEmitter { + logData(log: string, deviceName: string, deviceId: string): void; + } + interface IPreviewQrCodeService { getPlaygroundAppQrCode(options?: IPlaygroundAppQrCodeOptions): Promise>; getLiveSyncQrCode(url: string): Promise; diff --git a/lib/services/livesync/playground/devices/preview-devices-service.ts b/lib/services/livesync/playground/devices/preview-devices-service.ts index 09e18f275a..c52ec67229 100644 --- a/lib/services/livesync/playground/devices/preview-devices-service.ts +++ b/lib/services/livesync/playground/devices/preview-devices-service.ts @@ -1,10 +1,16 @@ import { Device } from "nativescript-preview-sdk"; import { EventEmitter } from "events"; -import { DeviceDiscoveryEventNames } from "../../../../common/constants"; +import { DeviceDiscoveryEventNames, DEVICE_LOG_EVENT_NAME } from "../../../../common/constants"; export class PreviewDevicesService extends EventEmitter implements IPreviewDevicesService { private connectedDevices: Device[] = []; + constructor(private $previewAppLogProvider: IPreviewAppLogProvider) { + super(); + + this.initialize(); + } + public getConnectedDevices(): Device[] { return this.connectedDevices; } @@ -27,6 +33,12 @@ export class PreviewDevicesService extends EventEmitter implements IPreviewDevic return _.filter(this.connectedDevices, { platform: platform.toLowerCase() }); } + private initialize(): void { + this.$previewAppLogProvider.on(DEVICE_LOG_EVENT_NAME, (deviceId: string, message: string) => { + this.emit(DEVICE_LOG_EVENT_NAME, deviceId, message); + }); + } + private raiseDeviceFound(device: Device) { this.emit(DeviceDiscoveryEventNames.DEVICE_FOUND, device); this.connectedDevices.push(device); diff --git a/lib/services/livesync/playground/preview-app-log-provider.ts b/lib/services/livesync/playground/preview-app-log-provider.ts new file mode 100644 index 0000000000..3e0c900f86 --- /dev/null +++ b/lib/services/livesync/playground/preview-app-log-provider.ts @@ -0,0 +1,10 @@ +import { EventEmitter } from "events"; +import { DEVICE_LOG_EVENT_NAME } from "../../../common/constants"; + +export class PreviewAppLogProvider extends EventEmitter implements IPreviewAppLogProvider { + public logData(log: string, deviceName: string, deviceId: string): void { + const message = `LOG from device ${deviceName}: ${log}`; + this.emit(DEVICE_LOG_EVENT_NAME, deviceId, message); + } +} +$injector.register("previewAppLogProvider", PreviewAppLogProvider); diff --git a/lib/services/livesync/playground/preview-sdk-service.ts b/lib/services/livesync/playground/preview-sdk-service.ts index 603f1bbae5..5947e11632 100644 --- a/lib/services/livesync/playground/preview-sdk-service.ts +++ b/lib/services/livesync/playground/preview-sdk-service.ts @@ -1,7 +1,6 @@ import { MessagingService, Config, Device, DeviceConnectedMessage, SdkCallbacks, ConnectedDevices, FilesPayload } from "nativescript-preview-sdk"; import { PubnubKeys } from "./preview-app-constants"; import { EventEmitter } from "events"; -import { DEVICE_LOG_EVENT_NAME } from "../../../common/constants"; const pako = require("pako"); export class PreviewSdkService extends EventEmitter implements IPreviewSdkService { @@ -12,7 +11,8 @@ export class PreviewSdkService extends EventEmitter implements IPreviewSdkServic constructor(private $config: IConfiguration, private $httpClient: Server.IHttpClient, private $logger: ILogger, - private $previewDevicesService: IPreviewDevicesService) { + private $previewDevicesService: IPreviewDevicesService, + private $previewAppLogProvider: IPreviewAppLogProvider) { super(); } @@ -61,9 +61,7 @@ export class PreviewSdkService extends EventEmitter implements IPreviewSdkServic this.$logger.trace("Received onLogSdkMessage message: ", log); }, onLogMessage: (log: string, deviceName: string, deviceId: string) => { - const device = this.$previewDevicesService.getDeviceById(deviceId); - this.emit(DEVICE_LOG_EVENT_NAME, log, deviceId, device ? device.platform : ""); - this.$logger.info(`LOG from device ${deviceName}: ${log}`); + this.$previewAppLogProvider.logData(log, deviceName, deviceId); }, onRestartMessage: () => { this.$logger.trace("Received onRestartMessage event."); From bf262d5f46daa5241958083f6f94012c44bdb986 Mon Sep 17 00:00:00 2001 From: fatme Date: Wed, 14 Nov 2018 08:49:44 +0200 Subject: [PATCH 2/2] chore: fix unit tests --- test/services/preview-devices-service.ts | 3 +++ test/services/preview-sdk-service.ts | 1 + 2 files changed, 4 insertions(+) diff --git a/test/services/preview-devices-service.ts b/test/services/preview-devices-service.ts index 7fc2305115..0f71e273be 100644 --- a/test/services/preview-devices-service.ts +++ b/test/services/preview-devices-service.ts @@ -11,6 +11,9 @@ let lostDevices: Device[] = []; function createTestInjector(): IInjector { const injector = new Yok(); injector.register("previewDevicesService", PreviewDevicesService); + injector.register("previewAppLogProvider", { + on: () => ({}) + }); injector.register("logger", LoggerStub); return injector; } diff --git a/test/services/preview-sdk-service.ts b/test/services/preview-sdk-service.ts index e4698c03e4..3385173648 100644 --- a/test/services/preview-sdk-service.ts +++ b/test/services/preview-sdk-service.ts @@ -9,6 +9,7 @@ const getPreviewSdkService = (): IPreviewSdkService => { testInjector.register("config", {}); testInjector.register("previewSdkService", PreviewSdkService); testInjector.register("previewDevicesService", {}); + testInjector.register("previewAppLogProvider", {}); testInjector.register("httpClient", { httpRequest: async (options: any, proxySettings?: IProxySettings): Promise => undefined });