Skip to content

Commit f464c6c

Browse files
committed
fix(AppResources): try recover if resources update fails
1 parent 4948f83 commit f464c6c

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

lib/services/android-resources-migration-service.ts

+29-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as path from "path";
2-
import * as shell from "shelljs";
32
import * as constants from "../constants";
3+
import { EOL } from "os";
44

55
export class AndroidResourcesMigrationService implements IAndroidResourcesMigrationService {
66
private static ANDROID_DIR = "Android";
@@ -22,6 +22,22 @@ export class AndroidResourcesMigrationService implements IAndroidResourcesMigrat
2222
public async migrate(appResourcesDir: string): Promise<void> {
2323
const originalAppResources = path.join(appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR);
2424
const appResourcesDestination = path.join(appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR_TEMP);
25+
const appResourcesBackup = path.join(appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR_OLD);
26+
27+
try {
28+
await this.tryMigrate(originalAppResources, appResourcesDestination, appResourcesBackup);
29+
this.$logger.out(`Successfully updated your project's application resources '/Android' directory structure.${EOL}The previous version of your Android application resources has been renamed to '/${AndroidResourcesMigrationService.ANDROID_DIR_OLD}'`);
30+
} catch (error) {
31+
try {
32+
this.recover(originalAppResources, appResourcesDestination, appResourcesBackup);
33+
this.$logger.out("Failed to update resources. They should be in their initial state.");
34+
} catch (error) {
35+
this.$logger.out(`Failed to update resources.${EOL} Backup of original content is inside "${appResourcesBackup}".${EOL}If "${originalAppResources} if missing copy from backup folder."`);
36+
}
37+
}
38+
}
39+
40+
private async tryMigrate(originalAppResources: string, appResourcesDestination: string, appResourcesBackup: string): Promise<void> {
2541
const appMainSourceSet = path.join(appResourcesDestination, constants.SRC_DIR, constants.MAIN_DIR);
2642
const appResourcesMainSourceSetResourcesDestination = path.join(appMainSourceSet, constants.RESOURCES_DIR);
2743

@@ -64,11 +80,20 @@ export class AndroidResourcesMigrationService implements IAndroidResourcesMigrat
6480
this.$fs.copyFile(path.join(originalAppResources, constants.MANIFEST_FILE_NAME), path.join(appMainSourceSet, constants.MANIFEST_FILE_NAME));
6581

6682
// rename the legacy app_resources to ANDROID_DIR_OLD
67-
shell.mv(originalAppResources, path.join(appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR_OLD));
83+
this.$fs.rename(originalAppResources, appResourcesBackup);
84+
6885
// move the new, updated app_resources to App_Resources/Android, as the de facto resources
69-
shell.mv(appResourcesDestination, originalAppResources);
86+
this.$fs.rename(appResourcesDestination, originalAppResources);
87+
}
88+
89+
private recover(originalAppResources: string, appResourcesDestination: string, appResourcesBackup: string): void {
90+
if (!this.$fs.exists(originalAppResources)) {
91+
this.$fs.rename(appResourcesBackup, originalAppResources);
92+
}
7093

71-
this.$logger.out(`Successfully updated your project's application resources '/Android' directory structure.\nThe previous version of your Android application resources has been renamed to '/${AndroidResourcesMigrationService.ANDROID_DIR_OLD}'`);
94+
if (this.$fs.exists(appResourcesDestination)) {
95+
this.$fs.deleteDirectory(appResourcesDestination);
96+
}
7297
}
7398
}
7499

0 commit comments

Comments
 (0)