react-native-stallion 2.0.0-alpha.1 → 2.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/com/stallion/Stallion.java +143 -83
- package/android/src/main/java/com/stallion/StallionModule.java +101 -88
- package/android/src/main/java/com/stallion/events/StallionEventConstants.java +22 -0
- package/android/src/main/java/com/stallion/events/StallionEventManager.java +160 -0
- package/android/src/main/java/com/stallion/networkmanager/StallionApiConstants.java +28 -0
- package/android/src/main/java/com/stallion/networkmanager/StallionApiManager.java +96 -0
- package/android/src/main/java/com/stallion/{StallionDownloadCallback.java → networkmanager/StallionDownloadCallback.java} +1 -1
- package/android/src/main/java/com/stallion/networkmanager/StallionFileDownloader.java +224 -0
- package/android/src/main/java/com/stallion/networkmanager/StallionStageManager.java +77 -0
- package/android/src/main/java/com/stallion/networkmanager/StallionSyncHandler.java +183 -0
- package/android/src/main/java/com/stallion/storage/StallionConfig.java +120 -0
- package/android/src/main/java/com/stallion/storage/StallionConfigConstants.java +24 -0
- package/android/src/main/java/com/stallion/storage/StallionMeta.java +206 -0
- package/android/src/main/java/com/stallion/storage/StallionMetaConstants.java +30 -0
- package/android/src/main/java/com/stallion/storage/StallionStateManager.java +113 -0
- package/android/src/main/java/com/stallion/{StallionDefaultErrorActivity.java → utils/StallionErrorActivity.java} +11 -10
- package/android/src/main/java/com/stallion/utils/StallionExceptionHandler.java +96 -0
- package/android/src/main/java/com/stallion/utils/StallionFileManager.java +205 -0
- package/android/src/main/java/com/stallion/utils/StallionSlotManager.java +110 -0
- package/ios/main/Stallion-Bridging-Header.h +5 -4
- package/ios/main/Stallion.m +26 -9
- package/ios/main/Stallion.swift +124 -83
- package/ios/main/StallionConfig.h +24 -0
- package/ios/main/StallionConfig.m +62 -0
- package/ios/main/StallionConfigConstants.h +32 -0
- package/ios/main/StallionConfigConstants.m +32 -0
- package/ios/main/StallionConstants.swift +2 -1
- package/ios/main/StallionEventHandler.h +23 -0
- package/ios/main/StallionEventHandler.m +138 -0
- package/ios/main/StallionExceptionHandler.h +18 -0
- package/ios/main/StallionExceptionHandler.m +94 -0
- package/ios/main/StallionFileDownloader.swift +147 -0
- package/ios/main/StallionFileManager.h +20 -0
- package/ios/main/StallionFileManager.m +126 -0
- package/ios/main/StallionMeta.h +29 -0
- package/ios/main/StallionMeta.m +98 -0
- package/ios/main/StallionMetaConstants.h +28 -0
- package/ios/main/StallionMetaConstants.m +42 -0
- package/ios/main/StallionModule.m +134 -101
- package/ios/main/StallionObjConstants.h +1 -0
- package/ios/main/StallionObjConstants.m +4 -0
- package/ios/main/StallionSlotManager.h +21 -0
- package/ios/main/StallionSlotManager.m +114 -0
- package/ios/main/StallionStageManager.swift +84 -0
- package/ios/main/StallionStateManager.h +31 -0
- package/ios/main/StallionStateManager.m +87 -0
- package/ios/main/StallionSyncHandler.swift +212 -0
- package/package.json +1 -1
- package/src/index.js +1 -1
- package/src/index.js.map +1 -1
- package/src/main/components/common/Header/index.js +2 -9
- package/src/main/components/common/Header/index.js.map +1 -1
- package/src/main/components/modules/listing/components/BundleCard.js +4 -4
- package/src/main/components/modules/listing/components/BundleCard.js.map +1 -1
- package/src/main/components/modules/listing/components/BundleCardInfoSection.js +1 -0
- package/src/main/components/modules/listing/components/BundleCardInfoSection.js.map +1 -1
- package/src/main/components/modules/listing/components/ConfigView.js +19 -0
- package/src/main/components/modules/listing/components/ConfigView.js.map +1 -0
- package/src/main/components/modules/listing/components/SlotView.js +15 -13
- package/src/main/components/modules/listing/components/SlotView.js.map +1 -1
- package/src/main/components/modules/listing/components/styles/index.js +3 -1
- package/src/main/components/modules/listing/components/styles/index.js.map +1 -1
- package/src/main/components/modules/listing/hooks/useListing.js +1 -7
- package/src/main/components/modules/listing/hooks/useListing.js.map +1 -1
- package/src/main/components/modules/login/index.js +41 -37
- package/src/main/components/modules/login/index.js.map +1 -1
- package/src/main/components/modules/login/styles/index.js +14 -1
- package/src/main/components/modules/login/styles/index.js.map +1 -1
- package/src/main/components/modules/modal/StallionModal.js +22 -27
- package/src/main/components/modules/modal/StallionModal.js.map +1 -1
- package/src/main/components/modules/modal/hooks/useStallionModal.js +6 -105
- package/src/main/components/modules/modal/hooks/useStallionModal.js.map +1 -1
- package/src/main/components/modules/prod/prod.js +15 -15
- package/src/main/components/modules/prod/prod.js.map +1 -1
- package/src/main/components/modules/prod/styles/index.js +5 -2
- package/src/main/components/modules/prod/styles/index.js.map +1 -1
- package/src/main/constants/apiConstants.js +2 -2
- package/src/main/constants/appConstants.js +3 -3
- package/src/main/constants/appConstants.js.map +1 -1
- package/src/main/state/actionCreators/useBucketActions.js +10 -13
- package/src/main/state/actionCreators/useBucketActions.js.map +1 -1
- package/src/main/state/actionCreators/useBundleActions.js +14 -17
- package/src/main/state/actionCreators/useBundleActions.js.map +1 -1
- package/src/main/state/actionCreators/useConfigActions.js +20 -0
- package/src/main/state/actionCreators/useConfigActions.js.map +1 -0
- package/src/main/state/actionCreators/useDownloadActions.js +3 -5
- package/src/main/state/actionCreators/useDownloadActions.js.map +1 -1
- package/src/main/state/actionCreators/useMetaActions.js +4 -2
- package/src/main/state/actionCreators/useMetaActions.js.map +1 -1
- package/src/main/state/actionCreators/useUpdateMetaActions.js +25 -48
- package/src/main/state/actionCreators/useUpdateMetaActions.js.map +1 -1
- package/src/main/state/actionCreators/useUserActions.js +25 -85
- package/src/main/state/actionCreators/useUserActions.js.map +1 -1
- package/src/main/state/actions/configActions.js +8 -0
- package/src/main/state/actions/configActions.js.map +1 -0
- package/src/main/state/actions/userActions.js +3 -15
- package/src/main/state/actions/userActions.js.map +1 -1
- package/src/main/state/index.js +19 -15
- package/src/main/state/index.js.map +1 -1
- package/src/main/state/reducers/configReducer.js +19 -0
- package/src/main/state/reducers/configReducer.js.map +1 -0
- package/src/main/state/reducers/updateMetaReducer.js +3 -3
- package/src/main/state/reducers/updateMetaReducer.js.map +1 -1
- package/src/main/state/reducers/userReducer.js +3 -37
- package/src/main/state/reducers/userReducer.js.map +1 -1
- package/src/main/state/useStallionEvents.js +102 -0
- package/src/main/state/useStallionEvents.js.map +1 -0
- package/src/main/utils/ErrorBoundary.js +4 -2
- package/src/main/utils/ErrorBoundary.js.map +1 -1
- package/src/main/utils/StallionEventEmitter.js.map +1 -1
- package/src/main/utils/StallionNativeUtils.js +27 -52
- package/src/main/utils/StallionNativeUtils.js.map +1 -1
- package/src/main/utils/debounce.js +16 -0
- package/src/main/utils/debounce.js.map +1 -0
- package/src/main/utils/useApiClient.js +28 -0
- package/src/main/utils/useApiClient.js.map +1 -0
- package/src/main/utils/useStallionUpdate.js +4 -3
- package/src/main/utils/useStallionUpdate.js.map +1 -1
- package/src/types/config.types.js +5 -0
- package/src/types/config.types.js.map +1 -0
- package/src/types/meta.types.js +4 -6
- package/src/types/meta.types.js.map +1 -1
- package/src/types/updateMeta.types.js +1 -1
- package/src/types/updateMeta.types.js.map +1 -1
- package/src/types/user.types.js +1 -2
- package/src/types/user.types.js.map +1 -1
- package/types/index.d.ts +1 -1
- package/types/index.d.ts.map +1 -1
- package/types/main/components/common/Header/index.d.ts +0 -2
- package/types/main/components/common/Header/index.d.ts.map +1 -1
- package/types/main/components/modules/listing/components/BundleCardInfoSection.d.ts.map +1 -1
- package/types/main/components/modules/listing/components/ConfigView.d.ts +8 -0
- package/types/main/components/modules/listing/components/ConfigView.d.ts.map +1 -0
- package/types/main/components/modules/listing/components/SlotView.d.ts.map +1 -1
- package/types/main/components/modules/listing/components/styles/index.d.ts +2 -0
- package/types/main/components/modules/listing/components/styles/index.d.ts.map +1 -1
- package/types/main/components/modules/listing/hooks/useListing.d.ts.map +1 -1
- package/types/main/components/modules/login/index.d.ts.map +1 -1
- package/types/main/components/modules/login/styles/index.d.ts +13 -0
- package/types/main/components/modules/login/styles/index.d.ts.map +1 -1
- package/types/main/components/modules/modal/StallionModal.d.ts.map +1 -1
- package/types/main/components/modules/modal/hooks/useStallionModal.d.ts +1 -7
- package/types/main/components/modules/modal/hooks/useStallionModal.d.ts.map +1 -1
- package/types/main/components/modules/prod/prod.d.ts.map +1 -1
- package/types/main/components/modules/prod/styles/index.d.ts +4 -1
- package/types/main/components/modules/prod/styles/index.d.ts.map +1 -1
- package/types/main/constants/apiConstants.d.ts +2 -2
- package/types/main/constants/apiConstants.d.ts.map +1 -1
- package/types/main/constants/appConstants.d.ts +3 -3
- package/types/main/state/actionCreators/useBucketActions.d.ts +2 -1
- package/types/main/state/actionCreators/useBucketActions.d.ts.map +1 -1
- package/types/main/state/actionCreators/useBundleActions.d.ts +2 -1
- package/types/main/state/actionCreators/useBundleActions.d.ts.map +1 -1
- package/types/main/state/actionCreators/useConfigActions.d.ts +7 -0
- package/types/main/state/actionCreators/useConfigActions.d.ts.map +1 -0
- package/types/main/state/actionCreators/useDownloadActions.d.ts +2 -1
- package/types/main/state/actionCreators/useDownloadActions.d.ts.map +1 -1
- package/types/main/state/actionCreators/useMetaActions.d.ts.map +1 -1
- package/types/main/state/actionCreators/useUpdateMetaActions.d.ts +2 -1
- package/types/main/state/actionCreators/useUpdateMetaActions.d.ts.map +1 -1
- package/types/main/state/actionCreators/useUserActions.d.ts +5 -7
- package/types/main/state/actionCreators/useUserActions.d.ts.map +1 -1
- package/types/main/state/actions/configActions.d.ts +3 -0
- package/types/main/state/actions/configActions.d.ts.map +1 -0
- package/types/main/state/actions/userActions.d.ts +2 -4
- package/types/main/state/actions/userActions.d.ts.map +1 -1
- package/types/main/state/index.d.ts.map +1 -1
- package/types/main/state/reducers/configReducer.d.ts +4 -0
- package/types/main/state/reducers/configReducer.d.ts.map +1 -0
- package/types/main/state/reducers/updateMetaReducer.d.ts +2 -1
- package/types/main/state/reducers/updateMetaReducer.d.ts.map +1 -1
- package/types/main/state/reducers/userReducer.d.ts.map +1 -1
- package/types/main/state/useStallionEvents.d.ts +12 -0
- package/types/main/state/useStallionEvents.d.ts.map +1 -0
- package/types/main/utils/ErrorBoundary.d.ts.map +1 -1
- package/types/main/utils/StallionEventEmitter.d.ts +3 -6
- package/types/main/utils/StallionEventEmitter.d.ts.map +1 -1
- package/types/main/utils/StallionNativeUtils.d.ts +6 -10
- package/types/main/utils/StallionNativeUtils.d.ts.map +1 -1
- package/types/main/utils/debounce.d.ts +3 -0
- package/types/main/utils/debounce.d.ts.map +1 -0
- package/types/main/utils/useApiClient.d.ts +8 -0
- package/types/main/utils/useApiClient.d.ts.map +1 -0
- package/types/types/config.types.d.ts +16 -0
- package/types/types/config.types.d.ts.map +1 -0
- package/types/types/globalProvider.types.d.ts +5 -9
- package/types/types/globalProvider.types.d.ts.map +1 -1
- package/types/types/meta.types.d.ts +6 -7
- package/types/types/meta.types.d.ts.map +1 -1
- package/types/types/updateMeta.types.d.ts +7 -5
- package/types/types/updateMeta.types.d.ts.map +1 -1
- package/types/types/user.types.d.ts +5 -20
- package/types/types/user.types.d.ts.map +1 -1
- package/types/types/utils.types.d.ts +7 -5
- package/types/types/utils.types.d.ts.map +1 -1
- package/android/src/main/java/com/stallion/StallionApiUtil.java +0 -58
- package/android/src/main/java/com/stallion/StallionCommonUtil.java +0 -25
- package/android/src/main/java/com/stallion/StallionConstants.java +0 -73
- package/android/src/main/java/com/stallion/StallionDownloadManager.java +0 -121
- package/android/src/main/java/com/stallion/StallionErrorBoundary.java +0 -73
- package/android/src/main/java/com/stallion/StallionEventEmitter.java +0 -144
- package/android/src/main/java/com/stallion/StallionFileUtil.java +0 -129
- package/android/src/main/java/com/stallion/StallionRollbackManager.java +0 -82
- package/android/src/main/java/com/stallion/StallionStorage.java +0 -64
- package/android/src/main/java/com/stallion/StallionSynManager.java +0 -142
- package/ios/main/StallionDownloader.swift +0 -111
- package/ios/main/StallionErrorBoundary.h +0 -17
- package/ios/main/StallionErrorBoundary.m +0 -79
- package/ios/main/StallionEventEmitter.swift +0 -20
- package/ios/main/StallionEventManager.h +0 -21
- package/ios/main/StallionEventManager.m +0 -57
- package/ios/main/StallionObjUtil.h +0 -14
- package/ios/main/StallionObjUtil.m +0 -22
- package/ios/main/StallionRollbackHandler.h +0 -22
- package/ios/main/StallionRollbackHandler.m +0 -128
- package/ios/main/StallionSyncManager.swift +0 -149
- package/ios/main/StallionUtil.swift +0 -19
- package/src/main/components/common/ProfileOverlay/index.js +0 -50
- package/src/main/components/common/ProfileOverlay/index.js.map +0 -1
- package/src/main/components/common/ProfileOverlay/styles.js +0 -72
- package/src/main/components/common/ProfileOverlay/styles.js.map +0 -1
- package/src/main/components/modules/login/components/Email.js +0 -41
- package/src/main/components/modules/login/components/Email.js.map +0 -1
- package/src/main/components/modules/login/components/Otp.js +0 -45
- package/src/main/components/modules/login/components/Otp.js.map +0 -1
- package/src/main/components/modules/login/components/styles/index.js +0 -28
- package/src/main/components/modules/login/components/styles/index.js.map +0 -1
- package/src/main/components/modules/login/hooks/useLoginFlow.js +0 -60
- package/src/main/components/modules/login/hooks/useLoginFlow.js.map +0 -1
- package/src/main/utils/EventUtil.js +0 -28
- package/src/main/utils/EventUtil.js.map +0 -1
- package/src/main/utils/SharedDataManager.js +0 -37
- package/src/main/utils/SharedDataManager.js.map +0 -1
- package/src/main/utils/apiUtils.js +0 -24
- package/src/main/utils/apiUtils.js.map +0 -1
- package/types/main/components/common/ProfileOverlay/index.d.ts +0 -10
- package/types/main/components/common/ProfileOverlay/index.d.ts.map +0 -1
- package/types/main/components/common/ProfileOverlay/styles.d.ts +0 -69
- package/types/main/components/common/ProfileOverlay/styles.d.ts.map +0 -1
- package/types/main/components/modules/login/components/Email.d.ts +0 -13
- package/types/main/components/modules/login/components/Email.d.ts.map +0 -1
- package/types/main/components/modules/login/components/Otp.d.ts +0 -12
- package/types/main/components/modules/login/components/Otp.d.ts.map +0 -1
- package/types/main/components/modules/login/components/styles/index.d.ts +0 -25
- package/types/main/components/modules/login/components/styles/index.d.ts.map +0 -1
- package/types/main/components/modules/login/hooks/useLoginFlow.d.ts +0 -18
- package/types/main/components/modules/login/hooks/useLoginFlow.d.ts.map +0 -1
- package/types/main/utils/EventUtil.d.ts +0 -9
- package/types/main/utils/EventUtil.d.ts.map +0 -1
- package/types/main/utils/SharedDataManager.d.ts +0 -20
- package/types/main/utils/SharedDataManager.d.ts.map +0 -1
- package/types/main/utils/apiUtils.d.ts +0 -12
- package/types/main/utils/apiUtils.d.ts.map +0 -1
|
@@ -1,110 +1,170 @@
|
|
|
1
1
|
package com.stallion;
|
|
2
2
|
|
|
3
3
|
import android.content.Context;
|
|
4
|
-
import android.content.pm.PackageInfo;
|
|
5
|
-
import android.content.pm.PackageManager;
|
|
6
4
|
|
|
7
|
-
import com.
|
|
8
|
-
import com.
|
|
5
|
+
import com.stallion.events.StallionEventConstants;
|
|
6
|
+
import com.stallion.events.StallionEventManager;
|
|
7
|
+
import com.stallion.storage.StallionConfigConstants;
|
|
8
|
+
import com.stallion.storage.StallionStateManager;
|
|
9
|
+
import com.stallion.storage.StallionMeta;
|
|
10
|
+
import com.stallion.storage.StallionMetaConstants;
|
|
11
|
+
import com.stallion.utils.StallionFileManager;
|
|
12
|
+
import com.stallion.utils.StallionSlotManager;
|
|
13
|
+
|
|
14
|
+
import org.json.JSONObject;
|
|
9
15
|
|
|
10
16
|
import java.io.File;
|
|
11
17
|
|
|
12
18
|
public class Stallion {
|
|
13
19
|
|
|
20
|
+
private static StallionStateManager stateManager;
|
|
21
|
+
|
|
14
22
|
public static String getJSBundleFile(Context applicationContext) {
|
|
15
23
|
return getJSBundleFile(applicationContext, null);
|
|
16
24
|
}
|
|
17
25
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
26
|
+
public static String getJSBundleFile(Context applicationContext, String defaultBundlePath) {
|
|
27
|
+
StallionStateManager.init(applicationContext);
|
|
28
|
+
stateManager = StallionStateManager.getInstance();
|
|
29
|
+
|
|
30
|
+
validateAppVersion(stateManager.getStallionConfig().getAppVersion());
|
|
31
|
+
|
|
32
|
+
StallionEventManager.init(stateManager);
|
|
33
|
+
|
|
34
|
+
String baseFolderPath = stateManager.getStallionConfig().getFilesDirectory();
|
|
35
|
+
StallionMeta stallionMeta = stateManager.stallionMeta;
|
|
36
|
+
StallionMetaConstants.SwitchState switchState = stallionMeta.getSwitchState();
|
|
37
|
+
|
|
38
|
+
if (switchState == StallionMetaConstants.SwitchState.PROD) {
|
|
39
|
+
return getProdBundlePath(baseFolderPath, defaultBundlePath);
|
|
40
|
+
} else if (switchState == StallionMetaConstants.SwitchState.STAGE) {
|
|
41
|
+
return getStageBundlePath(baseFolderPath, defaultBundlePath);
|
|
42
|
+
}
|
|
43
|
+
return getDefaultBundle(defaultBundlePath);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
private static void validateAppVersion(String currentAppVersion) {
|
|
47
|
+
StallionStateManager stallionStateManager = StallionStateManager.getInstance();
|
|
48
|
+
String cachedAppVersion = stallionStateManager.getString(StallionConfigConstants.STALLION_APP_VERSION_IDENTIFIER, "");;
|
|
49
|
+
if (
|
|
50
|
+
currentAppVersion != null
|
|
51
|
+
&& !currentAppVersion.isEmpty()
|
|
52
|
+
&& !cachedAppVersion.equals(currentAppVersion)
|
|
53
|
+
) {
|
|
54
|
+
stallionStateManager.setString(StallionConfigConstants.STALLION_APP_VERSION_IDENTIFIER, currentAppVersion);
|
|
55
|
+
StallionSlotManager.fallbackProd();
|
|
23
56
|
}
|
|
24
57
|
}
|
|
25
58
|
|
|
26
|
-
private static String
|
|
27
|
-
|
|
28
|
-
String
|
|
29
|
-
|
|
30
|
-
|
|
59
|
+
private static void mountNewProdBundle(String baseFolderPath) {
|
|
60
|
+
StallionMeta stallionMeta = stateManager.stallionMeta;
|
|
61
|
+
String prodTempHash = stallionMeta.getProdTempHash();
|
|
62
|
+
if(prodTempHash != null && !prodTempHash.isEmpty()) {
|
|
63
|
+
try {
|
|
64
|
+
StallionFileManager.moveFile(
|
|
65
|
+
new File(baseFolderPath, StallionConfigConstants.PROD_DIRECTORY + StallionConfigConstants.TEMP_FOLDER_SLOT),
|
|
66
|
+
new File(baseFolderPath, StallionConfigConstants.PROD_DIRECTORY + StallionConfigConstants.NEW_FOLDER_SLOT)
|
|
67
|
+
);
|
|
68
|
+
stallionMeta.setProdNewHash(prodTempHash);
|
|
69
|
+
stallionMeta.setProdTempHash("");
|
|
70
|
+
stateManager.syncStallionMeta();
|
|
71
|
+
sendInstallEvent(prodTempHash);
|
|
72
|
+
} catch (Exception ignored) {}
|
|
73
|
+
}
|
|
31
74
|
}
|
|
32
75
|
|
|
33
|
-
private static void
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
76
|
+
private static void mountNewStageBundle(String baseFolderPath) {
|
|
77
|
+
StallionMeta stallionMeta = stateManager.stallionMeta;
|
|
78
|
+
String stageTempHash = stallionMeta.getStageTempHash();
|
|
79
|
+
if(stageTempHash != null && !stageTempHash.isEmpty()) {
|
|
80
|
+
try {
|
|
81
|
+
StallionFileManager.moveFile(
|
|
82
|
+
new File(baseFolderPath, StallionConfigConstants.STAGE_DIRECTORY + StallionConfigConstants.TEMP_FOLDER_SLOT),
|
|
83
|
+
new File(baseFolderPath, StallionConfigConstants.STAGE_DIRECTORY + StallionConfigConstants.NEW_FOLDER_SLOT)
|
|
84
|
+
);
|
|
85
|
+
stallionMeta.setStageNewHash(stageTempHash);
|
|
86
|
+
stallionMeta.setStageTempHash("");
|
|
87
|
+
stateManager.syncStallionMeta();
|
|
88
|
+
} catch (Exception ignored) {}
|
|
89
|
+
}
|
|
42
90
|
}
|
|
43
91
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
92
|
+
private static String getProdBundlePath(String baseFolderPath, String defaultBundlePath) {
|
|
93
|
+
StallionMeta stallionMeta = stateManager.stallionMeta;
|
|
94
|
+
|
|
95
|
+
mountNewProdBundle(baseFolderPath);
|
|
96
|
+
|
|
97
|
+
switch (stallionMeta.getCurrentProdSlot()) {
|
|
98
|
+
case NEW_SLOT:
|
|
99
|
+
return resolveBundlePath(baseFolderPath + StallionConfigConstants.PROD_DIRECTORY + StallionConfigConstants.NEW_FOLDER_SLOT, defaultBundlePath, stallionMeta.getProdNewHash(), true);
|
|
100
|
+
case STABLE_SLOT:
|
|
101
|
+
return resolveBundlePath(baseFolderPath + StallionConfigConstants.PROD_DIRECTORY + StallionConfigConstants.STABLE_FOLDER_SLOT, defaultBundlePath, stallionMeta.getProdStableHash(), true);
|
|
102
|
+
default:
|
|
103
|
+
return getDefaultBundle(defaultBundlePath);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
private static String getStageBundlePath(String baseFolderPath, String defaultBundlePath) {
|
|
108
|
+
StallionMeta stallionMeta = stateManager.stallionMeta;
|
|
109
|
+
|
|
110
|
+
mountNewStageBundle(baseFolderPath);
|
|
111
|
+
|
|
112
|
+
switch (stallionMeta.getCurrentStageSlot()) {
|
|
113
|
+
case NEW_SLOT:
|
|
114
|
+
return resolveBundlePath(baseFolderPath + StallionConfigConstants.STAGE_DIRECTORY + StallionConfigConstants.NEW_FOLDER_SLOT, defaultBundlePath, stallionMeta.getStageNewHash(), false);
|
|
115
|
+
default:
|
|
116
|
+
return getDefaultBundle(defaultBundlePath);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
private static void sendInstallEvent(String releaseHash) {
|
|
50
121
|
try {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
stallionStorageInstance.set(StallionConstants.STALLION_SWITCH_STATE_IDENTIFIER, StallionConstants.SwitchState.PROD.toString());
|
|
61
|
-
switchState = StallionConstants.SwitchState.PROD.toString();
|
|
122
|
+
JSONObject eventPayload = new JSONObject();
|
|
123
|
+
eventPayload.put("releaseHash", releaseHash);
|
|
124
|
+
|
|
125
|
+
StallionEventManager.getInstance().sendEvent(
|
|
126
|
+
StallionEventConstants.NativeProdEventTypes.INSTALLED_PROD.toString(),
|
|
127
|
+
eventPayload
|
|
128
|
+
);
|
|
129
|
+
} catch (Exception e) {
|
|
130
|
+
e.printStackTrace();
|
|
62
131
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
stallionStorageInstance.set(StallionConstants.CURRENT_PROD_SLOT_KEY, StallionConstants.NEW_FOLDER_SLOT);
|
|
78
|
-
stallionStorageInstance.set(StallionConstants.PROD_DIRECTORY + StallionConstants.TEMP_FOLDER_SLOT, "");
|
|
79
|
-
sendInstallEvent(tempReleaseHash);
|
|
80
|
-
return baseFolderPath + StallionConstants.PROD_DIRECTORY + StallionConstants.NEW_FOLDER_SLOT + StallionConstants.UNZIP_FOLDER_NAME + StallionConstants.ANDROID_BUNDLE_FILE_NAME;
|
|
81
|
-
case StallionConstants.NEW_FOLDER_SLOT:
|
|
82
|
-
return baseFolderPath + StallionConstants.PROD_DIRECTORY + StallionConstants.NEW_FOLDER_SLOT + StallionConstants.UNZIP_FOLDER_NAME + StallionConstants.ANDROID_BUNDLE_FILE_NAME;
|
|
83
|
-
case StallionConstants.STABLE_FOLDER_SLOT:
|
|
84
|
-
return baseFolderPath + StallionConstants.PROD_DIRECTORY + StallionConstants.STABLE_FOLDER_SLOT + StallionConstants.UNZIP_FOLDER_NAME + StallionConstants.ANDROID_BUNDLE_FILE_NAME;
|
|
85
|
-
default:
|
|
86
|
-
return getDefaultBundle(defaultBundlePath);
|
|
87
|
-
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
private static void sendCorruptionEvent(String releaseHash, String folderPath) {
|
|
135
|
+
try {
|
|
136
|
+
JSONObject eventPayload = new JSONObject();
|
|
137
|
+
eventPayload.put("releaseHash", releaseHash);
|
|
138
|
+
eventPayload.put("meta", folderPath);
|
|
139
|
+
|
|
140
|
+
StallionEventManager.getInstance().sendEvent(
|
|
141
|
+
StallionEventConstants.NativeProdEventTypes.CORRUPTED_FILE_ERROR.toString(),
|
|
142
|
+
eventPayload
|
|
143
|
+
);
|
|
144
|
+
} catch (Exception e) {
|
|
145
|
+
e.printStackTrace();
|
|
88
146
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
return baseFolderPath + StallionConstants.STAGE_DIRECTORY + StallionConstants.NEW_FOLDER_SLOT + StallionConstants.UNZIP_FOLDER_NAME + StallionConstants.ANDROID_BUNDLE_FILE_NAME;
|
|
102
|
-
case StallionConstants.NEW_FOLDER_SLOT:
|
|
103
|
-
return baseFolderPath + StallionConstants.STAGE_DIRECTORY + StallionConstants.NEW_FOLDER_SLOT + StallionConstants.UNZIP_FOLDER_NAME + StallionConstants.ANDROID_BUNDLE_FILE_NAME;
|
|
104
|
-
default:
|
|
105
|
-
return getDefaultBundle(defaultBundlePath);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
private static String resolveBundlePath(String folderPath, String defaultBundlePath, String releaseHash, Boolean isProd) {
|
|
150
|
+
String bundlePath = folderPath + StallionConfigConstants.UNZIP_FOLDER_NAME + StallionConfigConstants.ANDROID_BUNDLE_FILE_NAME;
|
|
151
|
+
if (new File(bundlePath).exists()) {
|
|
152
|
+
return bundlePath;
|
|
153
|
+
} else {
|
|
154
|
+
if(isProd) {
|
|
155
|
+
StallionSlotManager.rollbackProd(true, "Corruped file not found" + folderPath);
|
|
156
|
+
sendCorruptionEvent(releaseHash, folderPath);
|
|
157
|
+
} else {
|
|
158
|
+
StallionSlotManager.rollbackStage();
|
|
106
159
|
}
|
|
160
|
+
return getDefaultBundle(defaultBundlePath);
|
|
107
161
|
}
|
|
108
|
-
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
private static String getDefaultBundle(String defaultBundlePath) {
|
|
165
|
+
return defaultBundlePath != null && !defaultBundlePath.isEmpty()
|
|
166
|
+
? defaultBundlePath
|
|
167
|
+
: StallionConfigConstants.DEFAULT_JS_BUNDLE_LOCATION_BASE + StallionConfigConstants.ANDROID_BUNDLE_FILE_NAME;
|
|
109
168
|
}
|
|
110
169
|
}
|
|
170
|
+
|
|
@@ -1,40 +1,46 @@
|
|
|
1
1
|
package com.stallion;
|
|
2
2
|
|
|
3
|
-
import android.content.res.Resources;
|
|
4
|
-
|
|
5
3
|
import androidx.annotation.NonNull;
|
|
6
4
|
|
|
7
|
-
import com.facebook.react.bridge.Arguments;
|
|
8
|
-
import com.facebook.react.bridge.Callback;
|
|
9
5
|
import com.facebook.react.bridge.LifecycleEventListener;
|
|
10
6
|
import com.facebook.react.bridge.Promise;
|
|
11
7
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
12
8
|
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
13
9
|
import com.facebook.react.bridge.ReactMethod;
|
|
14
10
|
import com.facebook.react.bridge.ReadableMap;
|
|
15
|
-
import com.facebook.react.bridge.WritableMap;
|
|
16
11
|
import com.facebook.react.module.annotations.ReactModule;
|
|
17
12
|
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
13
|
+
import com.stallion.events.StallionEventManager;
|
|
14
|
+
import com.stallion.networkmanager.StallionStageManager;
|
|
15
|
+
import com.stallion.networkmanager.StallionSyncHandler;
|
|
16
|
+
import com.stallion.storage.StallionConfigConstants;
|
|
17
|
+
|
|
18
|
+
import com.stallion.storage.StallionMetaConstants;
|
|
19
|
+
import com.stallion.storage.StallionStateManager;
|
|
20
|
+
|
|
21
|
+
import org.json.JSONArray;
|
|
22
|
+
import org.json.JSONException;
|
|
23
|
+
|
|
24
|
+
import java.util.ArrayList;
|
|
25
|
+
import java.util.List;
|
|
26
|
+
|
|
18
27
|
|
|
19
|
-
@ReactModule(name =
|
|
28
|
+
@ReactModule(name = StallionConfigConstants.MODULE_NAME)
|
|
20
29
|
public class StallionModule extends ReactContextBaseJavaModule implements LifecycleEventListener {
|
|
21
30
|
private final ReactApplicationContext currentReactContext;
|
|
22
|
-
private final
|
|
23
|
-
private DeviceEventManagerModule.RCTDeviceEventEmitter eventEmitter;
|
|
31
|
+
private final StallionStateManager stallionStateManager;
|
|
24
32
|
|
|
25
33
|
public StallionModule(ReactApplicationContext reactContext) {
|
|
26
34
|
super(reactContext);
|
|
35
|
+
StallionStateManager.init(reactContext);
|
|
36
|
+
this.stallionStateManager = StallionStateManager.getInstance();
|
|
27
37
|
this.currentReactContext = reactContext;
|
|
28
|
-
StallionStorage.getInstance().Initialize(reactContext);
|
|
29
|
-
this.stallionStorage = StallionStorage.getInstance();
|
|
30
|
-
StallionErrorBoundary.initErrorBoundary(reactContext);
|
|
31
|
-
StallionErrorBoundary.toggleExceptionHandler(true);
|
|
32
38
|
reactContext.addLifecycleEventListener(this);
|
|
33
39
|
}
|
|
34
40
|
|
|
35
41
|
@Override
|
|
36
42
|
public void onHostResume() {
|
|
37
|
-
|
|
43
|
+
StallionSyncHandler.sync();
|
|
38
44
|
}
|
|
39
45
|
|
|
40
46
|
@Override
|
|
@@ -52,106 +58,113 @@ public class StallionModule extends ReactContextBaseJavaModule implements Lifecy
|
|
|
52
58
|
@Override
|
|
53
59
|
@NonNull
|
|
54
60
|
public String getName() {
|
|
55
|
-
return
|
|
61
|
+
return StallionConfigConstants.MODULE_NAME;
|
|
56
62
|
}
|
|
57
63
|
|
|
58
64
|
@ReactMethod
|
|
59
|
-
public void
|
|
60
|
-
|
|
65
|
+
public void onLaunch(String launchData) {
|
|
66
|
+
stallionStateManager.setIsMounted(true);
|
|
67
|
+
|
|
68
|
+
DeviceEventManagerModule.RCTDeviceEventEmitter eventEmitter = this.currentReactContext.getJSModule(
|
|
69
|
+
DeviceEventManagerModule.RCTDeviceEventEmitter.class
|
|
70
|
+
);
|
|
71
|
+
StallionEventManager.getInstance().setEmitter(eventEmitter);
|
|
72
|
+
|
|
73
|
+
checkPendingDownloads();
|
|
61
74
|
}
|
|
62
75
|
|
|
76
|
+
private void checkPendingDownloads() {
|
|
77
|
+
String pendingReleaseUrl = stallionStateManager.getPendingReleaseUrl();
|
|
78
|
+
String pendingReleaseHash = stallionStateManager.getPendingReleaseHash();
|
|
79
|
+
if(!pendingReleaseUrl.isEmpty() && !pendingReleaseHash.isEmpty()) {
|
|
80
|
+
StallionSyncHandler.downloadNewRelease(pendingReleaseHash, pendingReleaseUrl);
|
|
81
|
+
stallionStateManager.setPendingRelease("", "");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
63
84
|
|
|
64
85
|
@ReactMethod
|
|
65
|
-
public void
|
|
66
|
-
|
|
86
|
+
public void getStallionConfig(Promise promise) {
|
|
87
|
+
try {
|
|
88
|
+
String stallionConfigJsonString = stallionStateManager.getStallionConfig().toJSON().toString();
|
|
89
|
+
promise.resolve(stallionConfigJsonString);
|
|
90
|
+
} catch (Exception e) {
|
|
91
|
+
promise.reject("getStallionConfig error:", e.toString());
|
|
92
|
+
}
|
|
67
93
|
}
|
|
68
94
|
|
|
69
95
|
@ReactMethod
|
|
70
|
-
public void
|
|
71
|
-
|
|
72
|
-
|
|
96
|
+
public void getStallionMeta(Promise promise) {
|
|
97
|
+
try {
|
|
98
|
+
String stallionMetaJsonString = stallionStateManager.stallionMeta.toJSON().toString();
|
|
99
|
+
promise.resolve(stallionMetaJsonString);
|
|
100
|
+
} catch (Exception e) {
|
|
101
|
+
promise.reject("getStallionMeta error:", e.toString());
|
|
102
|
+
}
|
|
73
103
|
}
|
|
74
104
|
|
|
75
105
|
@ReactMethod
|
|
76
|
-
public
|
|
77
|
-
|
|
106
|
+
public void toggleStallionSwitch(String switchState, Promise promise) {
|
|
107
|
+
try {
|
|
108
|
+
stallionStateManager.stallionMeta.setSwitchState(StallionMetaConstants.SwitchState.fromString(switchState));
|
|
109
|
+
stallionStateManager.syncStallionMeta();
|
|
110
|
+
promise.resolve("Success");
|
|
111
|
+
} catch (Exception e) {
|
|
112
|
+
promise.reject("toggleStallionSwitch error:", e.toString());
|
|
113
|
+
}
|
|
78
114
|
}
|
|
79
115
|
|
|
80
116
|
@ReactMethod
|
|
81
|
-
public void
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
117
|
+
public void updateSdkToken(String newSdkToken, Promise promise) {
|
|
118
|
+
try {
|
|
119
|
+
stallionStateManager.getStallionConfig().updateSdkToken(newSdkToken);
|
|
120
|
+
promise.resolve("updateSdkToken success");
|
|
121
|
+
} catch (Exception e) {
|
|
122
|
+
promise.reject("updateSdkToken error:", e.toString());
|
|
123
|
+
}
|
|
87
124
|
}
|
|
88
125
|
|
|
89
126
|
@ReactMethod
|
|
90
|
-
public
|
|
91
|
-
|
|
92
|
-
String parentPackageName= currentReactContext.getPackageName();
|
|
93
|
-
int stallionAppTokenRes = res.getIdentifier(StallionConstants.STALLION_APP_TOKEN_IDENTIFIER, "string", parentPackageName);
|
|
94
|
-
String appToken = currentReactContext.getString(stallionAppTokenRes);
|
|
95
|
-
callback.invoke(appToken);
|
|
127
|
+
public void sync() {
|
|
128
|
+
StallionSyncHandler.sync();
|
|
96
129
|
}
|
|
97
130
|
|
|
98
131
|
@ReactMethod
|
|
99
|
-
public
|
|
100
|
-
|
|
132
|
+
public void downloadStageBundle(ReadableMap bundleInfo, Promise promise) {
|
|
133
|
+
StallionStageManager.downloadStageBundle(bundleInfo, promise);
|
|
101
134
|
}
|
|
102
135
|
|
|
103
136
|
@ReactMethod
|
|
104
|
-
public void
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
errorEventPayload
|
|
122
|
-
)
|
|
123
|
-
);
|
|
124
|
-
promise.reject(prefix, error);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
@Override
|
|
128
|
-
public void onSuccess(String successPayload) {
|
|
129
|
-
stallionStorage.set(StallionConstants.CURRENT_STAGE_SLOT_KEY, StallionConstants.TEMP_FOLDER_SLOT);
|
|
130
|
-
stallionStorage.set(StallionConstants.STAGE_DIRECTORY + StallionConstants.TEMP_FOLDER_SLOT, receivedHash);
|
|
131
|
-
WritableMap successEventPayload = Arguments.createMap();
|
|
132
|
-
successEventPayload.putString("releaseHash", receivedHash);
|
|
133
|
-
StallionEventEmitter.sendEvent(
|
|
134
|
-
StallionEventEmitter.getEventPayload(
|
|
135
|
-
StallionConstants.NativeEventTypesStage.DOWNLOAD_COMPLETE_STAGE.toString(),
|
|
136
|
-
successEventPayload
|
|
137
|
-
)
|
|
138
|
-
);
|
|
139
|
-
promise.resolve(StallionConstants.DOWNLOAD_SUCCESS_MESSAGE);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
@Override
|
|
143
|
-
public void onProgress(double downloadFraction) {
|
|
144
|
-
WritableMap progressEventPayload = Arguments.createMap();
|
|
145
|
-
progressEventPayload.putString("releaseHash", receivedHash);
|
|
146
|
-
progressEventPayload.putDouble("progress", downloadFraction);
|
|
147
|
-
StallionEventEmitter.sendEvent(
|
|
148
|
-
StallionEventEmitter.getEventPayload(
|
|
149
|
-
StallionConstants.NativeEventTypesStage.DOWNLOAD_PROGRESS_STAGE.toString(),
|
|
150
|
-
progressEventPayload
|
|
151
|
-
)
|
|
152
|
-
);
|
|
153
|
-
}
|
|
137
|
+
public void popEvents(Promise promise) {
|
|
138
|
+
try {
|
|
139
|
+
promise.resolve(StallionEventManager.getInstance().popEvents());
|
|
140
|
+
} catch (Exception e) {
|
|
141
|
+
promise.reject("popEvents error: ", e.toString());
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@ReactMethod
|
|
146
|
+
public void acknowledgeEvents(String eventIdsJson, Promise promise) {
|
|
147
|
+
try {
|
|
148
|
+
// Parse the stringified JSON array into a Java List
|
|
149
|
+
JSONArray jsonArray = new JSONArray(eventIdsJson);
|
|
150
|
+
List<String> eventIds = new ArrayList<>();
|
|
151
|
+
|
|
152
|
+
for (int i = 0; i < jsonArray.length(); i++) {
|
|
153
|
+
eventIds.add(jsonArray.getString(i));
|
|
154
154
|
}
|
|
155
|
-
|
|
155
|
+
|
|
156
|
+
// Use StallionEventManager to acknowledge the events
|
|
157
|
+
StallionEventManager eventManager = StallionEventManager.getInstance();
|
|
158
|
+
eventManager.acknowledgeEvents(eventIds);
|
|
159
|
+
|
|
160
|
+
// Resolve the promise indicating success
|
|
161
|
+
promise.resolve("Events acknowledged successfully.");
|
|
162
|
+
} catch (JSONException e) {
|
|
163
|
+
// Reject the promise if JSON parsing fails
|
|
164
|
+
promise.reject("ACKNOWLEDGE_EVENTS_JSON_ERROR", "Invalid JSON format for event IDs: " + e.getMessage(), e);
|
|
165
|
+
} catch (Exception e) {
|
|
166
|
+
// Reject the promise for other errors
|
|
167
|
+
promise.reject("ACKNOWLEDGE_EVENTS_ERROR", "Failed to acknowledge events: " + e.getMessage(), e);
|
|
168
|
+
}
|
|
156
169
|
}
|
|
157
170
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
package com.stallion.events;
|
|
2
|
+
|
|
3
|
+
public class StallionEventConstants {
|
|
4
|
+
public enum NativeProdEventTypes {
|
|
5
|
+
DOWNLOAD_STARTED_PROD,
|
|
6
|
+
DOWNLOAD_ERROR_PROD,
|
|
7
|
+
DOWNLOAD_COMPLETE_PROD,
|
|
8
|
+
SYNC_ERROR_PROD,
|
|
9
|
+
ROLLED_BACK_PROD,
|
|
10
|
+
INSTALLED_PROD,
|
|
11
|
+
STABILIZED_PROD,
|
|
12
|
+
EXCEPTION_PROD,
|
|
13
|
+
AUTO_ROLLED_BACK_PROD,
|
|
14
|
+
CORRUPTED_FILE_ERROR
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public enum NativeStageEventTypes {
|
|
18
|
+
DOWNLOAD_PROGRESS_STAGE,
|
|
19
|
+
DOWNLOAD_COMPLETE_STAGE,
|
|
20
|
+
EXCEPTION_STAGE
|
|
21
|
+
}
|
|
22
|
+
}
|