From 139a7db99da5f04b394752c993a97a143f504642 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Poizat?= Date: Wed, 26 Jul 2023 10:49:24 +0200 Subject: [PATCH] feat(android): Return response code and body when error on Android When there was an error, plugin would just return "upload error". Now, if it is an upload error, plugin return also the response code and body. This enable user to add custom behavior when receiving an upload error depending on the server. --- README.md | 2 ++ .../com/vydia/RNUploader/GlobalRequestObserverDelegate.kt | 5 +++++ index.d.ts | 2 ++ 3 files changed, 9 insertions(+) diff --git a/README.md b/README.md index 8475adb3..b0d47103 100644 --- a/README.md +++ b/README.md @@ -245,6 +245,8 @@ Event Data |---|---|---|---| |`id`|string|Required|The ID of the upload.| |`error`|string|Required|Error message.| +|`responseCode`|string|Optional|HTTP status code received (Android)| +|`responseBody`|string|Optional|HTTP response body (Android)| ### completed diff --git a/android/src/main/java/com/vydia/RNUploader/GlobalRequestObserverDelegate.kt b/android/src/main/java/com/vydia/RNUploader/GlobalRequestObserverDelegate.kt index c89d495a..5da9d145 100644 --- a/android/src/main/java/com/vydia/RNUploader/GlobalRequestObserverDelegate.kt +++ b/android/src/main/java/com/vydia/RNUploader/GlobalRequestObserverDelegate.kt @@ -9,6 +9,7 @@ import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEm import net.gotev.uploadservice.data.UploadInfo import net.gotev.uploadservice.network.ServerResponse import net.gotev.uploadservice.observer.request.RequestObserverDelegate +import net.gotev.uploadservice.exceptions.UploadError class GlobalRequestObserverDelegate(reactContext: ReactApplicationContext) : RequestObserverDelegate { private val TAG = "UploadReceiver" @@ -28,6 +29,10 @@ class GlobalRequestObserverDelegate(reactContext: ReactApplicationContext) : Req // Make sure we do not try to call getMessage() on a null object if (exception != null) { params.putString("error", exception.message) + if (exception is UploadError) { + params.putInt("responseCode", exception.serverResponse.code) + params.putString("responseBody", String(exception.serverResponse.body, Charsets.US_ASCII)) + } } else { params.putString("error", "Unknown exception") } diff --git a/index.d.ts b/index.d.ts index 8b2a07ce..ebe61ce9 100644 --- a/index.d.ts +++ b/index.d.ts @@ -11,6 +11,8 @@ declare module "react-native-background-upload" { export interface ErrorData extends EventData { error: string + responseCode?: number + responseBody?: string } export interface CompletedData extends EventData {