From 10d31d44b3df6684d5fc17ceb0c2e062c6d65cfd Mon Sep 17 00:00:00 2001 From: fatme Date: Wed, 28 Nov 2018 12:33:45 +0200 Subject: [PATCH 1/3] fix: exclude platform specific files that are not appropriate for the provided platform --- .../playground/preview-app-files-service.ts | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/services/livesync/playground/preview-app-files-service.ts b/lib/services/livesync/playground/preview-app-files-service.ts index 5822eb1b00..1c39d4acfe 100644 --- a/lib/services/livesync/playground/preview-app-files-service.ts +++ b/lib/services/livesync/playground/preview-app-files-service.ts @@ -13,7 +13,8 @@ export class PreviewAppFilesService implements IPreviewAppFilesService { private $logger: ILogger, private $platformsData: IPlatformsData, private $projectDataService: IProjectDataService, - private $projectFilesManager: IProjectFilesManager + private $projectFilesManager: IProjectFilesManager, + private $projectFilesProvider: IProjectFilesProvider ) { } public getInitialFilesPayload(data: IPreviewAppLiveSyncData, platform: string, deviceId?: string): FilesPayload { @@ -34,20 +35,29 @@ export class PreviewAppFilesService implements IPreviewAppFilesService { this.$logger.trace(`Sending ${filesToTransfer.join("\n")}.`); - const rootFilesDir = this.getRootFilesDir(data, platform); - const payloadsToSync = _.map(filesToTransfer, file => this.createFilePayload(file, rootFilesDir, PreviewSdkEventNames.CHANGE_EVENT_NAME)); - const payloadsToRemove = _.map(filesToRemove, file => this.createFilePayload(file, rootFilesDir, PreviewSdkEventNames.UNLINK_EVENT_NAME)); - const payloads = payloadsToSync.concat(payloadsToRemove); + const files = this.createFilePayloads(data, platform, filesToTransfer, filesToRemove); return { - files: payloads, - platform: platform, + files, + platform, hmrMode: data.useHotModuleReload ? 1 : 0, deviceId }; } - private createFilePayload(file: string, rootFilesDir: string, event: string): FilePayload { + private createFilePayloads(data: IPreviewAppLiveSyncData, platform: string, filesToTransfer: string[], filesToRemove: string[]): FilePayload[] { + const rootFilesDir = this.getRootFilesDir(data, platform); + const payloadsToSync = _.filter(filesToTransfer, file => { + const fileInfo = this.$projectFilesProvider.getProjectFileInfo(file, platform, {}); + return fileInfo && fileInfo.shouldIncludeFile; + }) + .map(file => this.createFilePayload(file, platform, rootFilesDir, PreviewSdkEventNames.CHANGE_EVENT_NAME)); + const payloadsToRemove = _.map(filesToRemove, file => this.createFilePayload(file, platform, rootFilesDir, PreviewSdkEventNames.UNLINK_EVENT_NAME)); + const payloads = payloadsToSync.concat(payloadsToRemove); + return payloads; + } + + private createFilePayload(file: string, platform: string, rootFilesDir: string, event: string): FilePayload { let fileContents = ""; let binary = false; From d57b574e531bdfdf8f911758ef32ebd402065523 Mon Sep 17 00:00:00 2001 From: fatme Date: Wed, 28 Nov 2018 12:36:39 +0200 Subject: [PATCH 2/3] fix: don't send a message to pubnub when there aren't files to sync In case when some platform specific file is changed, "applyChanges" message should be send only for the file's platform. --- .../livesync/playground/preview-app-livesync-service.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/services/livesync/playground/preview-app-livesync-service.ts b/lib/services/livesync/playground/preview-app-livesync-service.ts index bed0faac20..d13b5a926c 100644 --- a/lib/services/livesync/playground/preview-app-livesync-service.ts +++ b/lib/services/livesync/playground/preview-app-livesync-service.ts @@ -108,12 +108,13 @@ export class PreviewAppLiveSyncService implements IPreviewAppLiveSyncService { } private async syncFilesForPlatformSafe(data: IPreviewAppLiveSyncData, filesData: IPreviewAppFilesData, platform: string, deviceId?: string): Promise { - this.$logger.info(`Start syncing changes for platform ${platform}.`); - try { const payloads = this.$previewAppFilesService.getFilesPayload(data, filesData, platform); - await this.$previewSdkService.applyChanges(payloads); - this.$logger.info(`Successfully synced ${payloads.files.map(filePayload => filePayload.file.yellow)} for platform ${platform}.`); + if (payloads && payloads.files && payloads.files.length) { + this.$logger.info(`Start syncing changes for platform ${platform}.`); + await this.$previewSdkService.applyChanges(payloads); + this.$logger.info(`Successfully synced ${payloads.files.map(filePayload => filePayload.file.yellow)} for platform ${platform}.`); + } } catch (err) { this.$logger.warn(`Unable to apply changes for platform ${platform}. Error is: ${err}, ${stringify(err)}.`); } From 7236efa6f2943fe0630e79822629497a88866969 Mon Sep 17 00:00:00 2001 From: fatme Date: Wed, 28 Nov 2018 12:52:55 +0200 Subject: [PATCH 3/3] chore: fix unit tests --- test/services/playground/preview-app-files-service.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/services/playground/preview-app-files-service.ts b/test/services/playground/preview-app-files-service.ts index 0eb7319f08..c58dd13702 100644 --- a/test/services/playground/preview-app-files-service.ts +++ b/test/services/playground/preview-app-files-service.ts @@ -36,6 +36,14 @@ function createTestInjector(data?: { files: string[] }) { injector.register("projectFilesManager", { getProjectFiles: () => data ? data.files : [] }); + injector.register("projectFilesProvider", { + getProjectFileInfo: (filePath: string, platform: string) => { + return { + filePath, + shouldIncludeFile: true + }; + } + }); return injector; }