Skip to content

Commit 5df9866

Browse files
author
Fatme
authored
Merge pull request #4131 from NativeScript/fatme/device-log-preview-api
feat(preview-api): expose api for getting logs from preview app
2 parents bc32b6b + bf262d5 commit 5df9866

File tree

8 files changed

+43
-6
lines changed

8 files changed

+43
-6
lines changed

lib/bootstrap.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ $injector.require("androidLiveSyncService", "./services/livesync/android-livesyn
132132
$injector.require("iOSLiveSyncService", "./services/livesync/ios-livesync-service");
133133
$injector.require("usbLiveSyncService", "./services/livesync/livesync-service"); // The name is used in https://github.com/NativeScript/nativescript-dev-typescript
134134
$injector.require("previewAppLiveSyncService", "./services/livesync/playground/preview-app-livesync-service");
135+
$injector.require("previewAppLogProvider", "./services/livesync/playground/preview-app-log-provider");
135136
$injector.require("previewAppPluginsService", "./services/livesync/playground/preview-app-plugins-service");
136137
$injector.require("previewSdkService", "./services/livesync/playground/preview-sdk-service");
137138
$injector.requirePublicClass("previewDevicesService", "./services/livesync/playground/devices/preview-devices-service");

lib/commands/preview.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
1+
import { DEVICE_LOG_EVENT_NAME } from "../common/constants";
2+
13
export class PreviewCommand implements ICommand {
24
public allowedParameters: ICommandParameter[] = [];
35
private static MIN_SUPPORTED_WEBPACK_VERSION = "0.17.0";
46

57
constructor(private $bundleValidatorHelper: IBundleValidatorHelper,
68
private $errors: IErrors,
79
private $liveSyncService: ILiveSyncService,
10+
private $logger: ILogger,
811
private $networkConnectivityValidator: INetworkConnectivityValidator,
912
private $projectData: IProjectData,
1013
private $options: IOptions,
14+
private $previewAppLogProvider: IPreviewAppLogProvider,
1115
private $previewQrCodeService: IPreviewQrCodeService) { }
1216

1317
public async execute(): Promise<void> {
18+
this.$previewAppLogProvider.on(DEVICE_LOG_EVENT_NAME, (deviceId: string, message: string) => {
19+
this.$logger.info(message);
20+
});
21+
1422
await this.$liveSyncService.liveSync([], {
1523
syncToPreviewApp: true,
1624
projectDir: this.$projectData.projectDir,

lib/definitions/preview-app-livesync.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ declare global {
2222
getExternalPlugins(device: Device): string[];
2323
}
2424

25+
interface IPreviewAppLogProvider extends EventEmitter {
26+
logData(log: string, deviceName: string, deviceId: string): void;
27+
}
28+
2529
interface IPreviewQrCodeService {
2630
getPlaygroundAppQrCode(options?: IPlaygroundAppQrCodeOptions): Promise<IDictionary<IQrCodeImageData>>;
2731
getLiveSyncQrCode(url: string): Promise<IQrCodeImageData>;

lib/services/livesync/playground/devices/preview-devices-service.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
import { Device } from "nativescript-preview-sdk";
22
import { EventEmitter } from "events";
3-
import { DeviceDiscoveryEventNames } from "../../../../common/constants";
3+
import { DeviceDiscoveryEventNames, DEVICE_LOG_EVENT_NAME } from "../../../../common/constants";
44

55
export class PreviewDevicesService extends EventEmitter implements IPreviewDevicesService {
66
private connectedDevices: Device[] = [];
77

8+
constructor(private $previewAppLogProvider: IPreviewAppLogProvider) {
9+
super();
10+
11+
this.initialize();
12+
}
13+
814
public getConnectedDevices(): Device[] {
915
return this.connectedDevices;
1016
}
@@ -27,6 +33,12 @@ export class PreviewDevicesService extends EventEmitter implements IPreviewDevic
2733
return _.filter(this.connectedDevices, { platform: platform.toLowerCase() });
2834
}
2935

36+
private initialize(): void {
37+
this.$previewAppLogProvider.on(DEVICE_LOG_EVENT_NAME, (deviceId: string, message: string) => {
38+
this.emit(DEVICE_LOG_EVENT_NAME, deviceId, message);
39+
});
40+
}
41+
3042
private raiseDeviceFound(device: Device) {
3143
this.emit(DeviceDiscoveryEventNames.DEVICE_FOUND, device);
3244
this.connectedDevices.push(device);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { EventEmitter } from "events";
2+
import { DEVICE_LOG_EVENT_NAME } from "../../../common/constants";
3+
4+
export class PreviewAppLogProvider extends EventEmitter implements IPreviewAppLogProvider {
5+
public logData(log: string, deviceName: string, deviceId: string): void {
6+
const message = `LOG from device ${deviceName}: ${log}`;
7+
this.emit(DEVICE_LOG_EVENT_NAME, deviceId, message);
8+
}
9+
}
10+
$injector.register("previewAppLogProvider", PreviewAppLogProvider);

lib/services/livesync/playground/preview-sdk-service.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { MessagingService, Config, Device, DeviceConnectedMessage, SdkCallbacks, ConnectedDevices, FilesPayload } from "nativescript-preview-sdk";
22
import { PubnubKeys } from "./preview-app-constants";
33
import { EventEmitter } from "events";
4-
import { DEVICE_LOG_EVENT_NAME } from "../../../common/constants";
54
const pako = require("pako");
65

76
export class PreviewSdkService extends EventEmitter implements IPreviewSdkService {
@@ -12,7 +11,8 @@ export class PreviewSdkService extends EventEmitter implements IPreviewSdkServic
1211
constructor(private $config: IConfiguration,
1312
private $httpClient: Server.IHttpClient,
1413
private $logger: ILogger,
15-
private $previewDevicesService: IPreviewDevicesService) {
14+
private $previewDevicesService: IPreviewDevicesService,
15+
private $previewAppLogProvider: IPreviewAppLogProvider) {
1616
super();
1717
}
1818

@@ -61,9 +61,7 @@ export class PreviewSdkService extends EventEmitter implements IPreviewSdkServic
6161
this.$logger.trace("Received onLogSdkMessage message: ", log);
6262
},
6363
onLogMessage: (log: string, deviceName: string, deviceId: string) => {
64-
const device = this.$previewDevicesService.getDeviceById(deviceId);
65-
this.emit(DEVICE_LOG_EVENT_NAME, log, deviceId, device ? device.platform : "");
66-
this.$logger.info(`LOG from device ${deviceName}: ${log}`);
64+
this.$previewAppLogProvider.logData(log, deviceName, deviceId);
6765
},
6866
onRestartMessage: () => {
6967
this.$logger.trace("Received onRestartMessage event.");

test/services/preview-devices-service.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ let lostDevices: Device[] = [];
1111
function createTestInjector(): IInjector {
1212
const injector = new Yok();
1313
injector.register("previewDevicesService", PreviewDevicesService);
14+
injector.register("previewAppLogProvider", {
15+
on: () => ({})
16+
});
1417
injector.register("logger", LoggerStub);
1518
return injector;
1619
}

test/services/preview-sdk-service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const getPreviewSdkService = (): IPreviewSdkService => {
99
testInjector.register("config", {});
1010
testInjector.register("previewSdkService", PreviewSdkService);
1111
testInjector.register("previewDevicesService", {});
12+
testInjector.register("previewAppLogProvider", {});
1213
testInjector.register("httpClient", {
1314
httpRequest: async (options: any, proxySettings?: IProxySettings): Promise<Server.IResponse> => undefined
1415
});

0 commit comments

Comments
 (0)