diff --git a/Example/update.json b/Example/update.json new file mode 100644 index 0000000..509a406 --- /dev/null +++ b/Example/update.json @@ -0,0 +1,6 @@ +{ + "android": { + "appId": 28605, + "appKey": "5gbQes9blswLW_jv8dnp8QBz" + } +} \ No newline at end of file diff --git a/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java b/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java index bee09fa..d37eb56 100644 --- a/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java +++ b/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java @@ -430,6 +430,9 @@ class DownloadTask extends AsyncTask { if (sub.getName().charAt(0) == '.') { continue; } + if (isFileUpdatedWithinDays(sub, 7)) { + continue; + } if (sub.isFile()) { sub.delete(); } else { @@ -441,6 +444,13 @@ class DownloadTask extends AsyncTask { } } + private boolean isFileUpdatedWithinDays(File file, int days) { + long currentTime = System.currentTimeMillis(); + long lastModified = file.lastModified(); + long daysInMillis = days * 24 * 60 * 60 * 1000L; + return (currentTime - lastModified) < daysInMillis; + } + @Override protected Void doInBackground(DownloadTaskParams... params) { int taskType = params[0].type; diff --git a/ios/RCTPushy/RCTPushy.mm b/ios/RCTPushy/RCTPushy.mm index d02a5cb..18a2156 100644 --- a/ios/RCTPushy/RCTPushy.mm +++ b/ios/RCTPushy/RCTPushy.mm @@ -536,7 +536,15 @@ RCT_EXPORT_METHOD(markSuccess:(RCTPromiseResolveBlock)resolve for(NSString *fileName in list) { if (![fileName isEqualToString:curVersion]) { - [_fileManager removeFile:[downloadDir stringByAppendingPathComponent:fileName] completionHandler:nil]; + NSString *filePath = [downloadDir stringByAppendingPathComponent:fileName]; + NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:&error]; + if (error) { + continue; + } + NSDate *modificationDate = [attributes fileModificationDate]; + if ([[NSDate date] timeIntervalSinceDate:modificationDate] > 7 * 24 * 60 * 60) { + [_fileManager removeFile:filePath completionHandler:nil]; + } } } } diff --git a/src/core.ts b/src/core.ts index 53e4d6c..0ab65df 100644 --- a/src/core.ts +++ b/src/core.ts @@ -21,14 +21,14 @@ const PushyConstants = isTurboModuleEnabled ? PushyModule.getConstants() : PushyModule; -export const downloadRootDir = PushyConstants.downloadRootDir; -export const packageVersion = PushyConstants.packageVersion; -export const currentVersion = PushyConstants.currentVersion; -export const isFirstTime = PushyConstants.isFirstTime; -export const rolledBackVersion = PushyConstants.rolledBackVersion; -export const isRolledBack = typeof rolledBackVersion === 'string'; +export const downloadRootDir: string = PushyConstants.downloadRootDir; +export const packageVersion: string = PushyConstants.packageVersion; +export const currentVersion: string = PushyConstants.currentVersion; +export const isFirstTime: boolean = PushyConstants.isFirstTime; +export const rolledBackVersion: string = PushyConstants.rolledBackVersion; +export const isRolledBack: boolean = typeof rolledBackVersion === 'string'; -export const buildTime = PushyConstants.buildTime; +export const buildTime: string = PushyConstants.buildTime; let uuid = PushyConstants.uuid; if (Platform.OS === 'android' && !PushyConstants.isUsingBundleUrl) { diff --git a/src/provider.tsx b/src/provider.tsx index 15d373d..6432354 100644 --- a/src/provider.tsx +++ b/src/provider.tsx @@ -166,7 +166,7 @@ export const PushyProvider = ({ if (!info) { return; } - const rollout = info.config?.rollout; + const rollout = info.config?.rollout?.[packageVersion]; if (rollout) { if (!isInRollout(rollout)) { log(`not in ${rollout}% rollout, ignored`); diff --git a/src/type.ts b/src/type.ts index eb03107..39b761f 100644 --- a/src/type.ts +++ b/src/type.ts @@ -8,7 +8,9 @@ export interface CheckResult { description?: string; metaInfo?: string; config?: { - rollout?: number; + rollout?: { + [packageVersion: string]: number; + }; [key: string]: any; }; pdiff?: string;