diff --git a/android/src/main/java/cn/reactnative/modules/update/UpdateModule.java b/android/src/main/java/cn/reactnative/modules/update/UpdateModule.java index 11598fe..f863fcc 100644 --- a/android/src/main/java/cn/reactnative/modules/update/UpdateModule.java +++ b/android/src/main/java/cn/reactnative/modules/update/UpdateModule.java @@ -70,7 +70,7 @@ public class UpdateModule extends ReactContextBaseJavaModule { } @ReactMethod - public void downloadUpdate(ReadableMap options, final Promise promise) { + public void downloadFullUpdate(ReadableMap options, final Promise promise) { String url = options.getString("updateUrl"); String hash = options.getString("hash"); updateContext.downloadFullUpdate(url, hash, new UpdateContext.DownloadFileListener() { diff --git a/ios/RCTPushy/RCTPushy.m b/ios/RCTPushy/RCTPushy.m index 2df9c93..a20693d 100644 --- a/ios/RCTPushy/RCTPushy.m +++ b/ios/RCTPushy/RCTPushy.m @@ -224,7 +224,7 @@ RCT_EXPORT_METHOD(getLocalHashInfo:(NSString *)hash resolve([defaults stringForKey:[keyHashInfo stringByAppendingString:hash]]); } -RCT_EXPORT_METHOD(downloadUpdate:(NSDictionary *)options +RCT_EXPORT_METHOD(downloadFullUpdate:(NSDictionary *)options resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { diff --git a/lib/main.js b/lib/main.js index ec91b6b..9af16a8 100644 --- a/lib/main.js +++ b/lib/main.js @@ -95,7 +95,7 @@ export const cInfo = { function assertRelease() { if (__DEV__) { - throw new Error('react-native-update can only run on RELEASE version.'); + throw new Error('react-native-update 只能在 RELEASE 版本中运行.'); } } @@ -138,7 +138,7 @@ export async function checkUpdate(APPKEY, isRetry) { }); } catch (e) { if (isRetry) { - throw new Error('Could not connect to pushy server'); + throw new Error('无法连接更新服务器,请检查网络连接后重试'); } await tryBackupEndpoints(APPKEY); return checkUpdate(APPKEY, true); @@ -209,6 +209,7 @@ export async function downloadUpdate(options, eventListeners) { ); } } + let succeeded = false; if (options.diffUrl) { logger('downloading diff'); try { @@ -217,38 +218,45 @@ export async function downloadUpdate(options, eventListeners) { hash: options.hash, originHash: currentVersion, }); + succeeded = true; } catch (e) { logger(`diff error: ${e.message}, try pdiff`); - try { - await Pushy.downloadPatchFromPackage({ - updateUrl: options.pdiffUrl, - hash: options.hash, - }); - } catch (e) { - progressHandler && progressHandler.remove(); - report(options.hash, 'error'); - throw e; - } } - } else if (options.pdiffUrl) { + } + if (!succeeded && options.pdiffUrl) { logger('downloading pdiff'); try { await Pushy.downloadPatchFromPackage({ updateUrl: options.pdiffUrl, hash: options.hash, }); + succeeded = true; } catch (e) { - progressHandler && progressHandler.remove(); - report(options.hash, 'error'); - throw e; + logger(`pdiff error: ${e.message}, try full patch`); } } + if (!succeeded && options.updateUrl) { + logger('downloading full patch'); + try { + await Pushy.downloadFullUpdate({ + updateUrl: options.updateUrl, + hash: options.hash, + }); + succeeded = true; + } catch (e) { + logger(`full patch error: ${e.message}`); + } + } + progressHandler && progressHandler.remove(); + if (!succeeded) { + report(options.hash, 'error'); + throw new Error('all update attempts failed'); + } setLocalHashInfo(options.hash, { name: options.name, description: options.description, metaInfo: options.metaInfo, }); - progressHandler && progressHandler.remove(); downloadedHash = options.hash; return options.hash; } diff --git a/package.json b/package.json index c6fdcf4..ab276b4 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,6 @@ }, "homepage": "https://github.com/reactnativecn/react-native-pushy#readme", "dependencies": { - "nanoid": "^3.1.30" + "nanoid": "^3.3.3" } } diff --git a/yarn.lock b/yarn.lock index fc4f956..7c64786 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -nanoid@^3.1.30: - version "3.1.30" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" - integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== +nanoid@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==