From 4f0d74ecfc02782f32714a907c32b28b0a45ece1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Poizat?= Date: Fri, 21 Jul 2023 21:40:46 +0200 Subject: [PATCH] fix(backup): patch-package react-native-background-upload to return server answer This will allow to do work depending on the server answer, like file conflict or quota exceeded. Upstream PR : https://github.com/Vydia/react-native-background-upload/pull/337 --- ...react-native-background-upload+6.6.0.patch | 36 +++++++++++++++++++ .../backup/services/uploadMedia.android.ts | 14 +++----- 2 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 patches/react-native-background-upload+6.6.0.patch diff --git a/patches/react-native-background-upload+6.6.0.patch b/patches/react-native-background-upload+6.6.0.patch new file mode 100644 index 000000000..d153548fe --- /dev/null +++ b/patches/react-native-background-upload+6.6.0.patch @@ -0,0 +1,36 @@ +diff --git a/node_modules/react-native-background-upload/android/src/main/java/com/vydia/RNUploader/GlobalRequestObserverDelegate.kt b/node_modules/react-native-background-upload/android/src/main/java/com/vydia/RNUploader/GlobalRequestObserverDelegate.kt +index c89d495..5da9d14 100644 +--- a/node_modules/react-native-background-upload/android/src/main/java/com/vydia/RNUploader/GlobalRequestObserverDelegate.kt ++++ b/node_modules/react-native-background-upload/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/node_modules/react-native-background-upload/index.d.ts b/node_modules/react-native-background-upload/index.d.ts +index 8b2a07c..80cff93 100644 +--- a/node_modules/react-native-background-upload/index.d.ts ++++ b/node_modules/react-native-background-upload/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 { diff --git a/src/app/domain/backup/services/uploadMedia.android.ts b/src/app/domain/backup/services/uploadMedia.android.ts index 70e3cbaeb..6e25a3367 100644 --- a/src/app/domain/backup/services/uploadMedia.android.ts +++ b/src/app/domain/backup/services/uploadMedia.android.ts @@ -6,7 +6,7 @@ import RNBackgroundUpload, { import { getMimeType } from '/app/domain/backup/services/getMedias' import { Media, UploadMediaResult } from '/app/domain/backup/models/Media' -import CozyClient, { IOCozyFile } from 'cozy-client' +import CozyClient, { StackErrors, IOCozyFile } from 'cozy-client' let currentUploadId: string | undefined @@ -50,16 +50,10 @@ export const uploadMedia = async ( setCurrentUploadId(uploadId) RNBackgroundUpload.addListener('error', uploadId, error => { - // RNBackgroundUpload does not return status code and response body... + const { errors } = JSON.parse(error.responseBody) as StackErrors reject({ - statusCode: -1, - errors: [ - { - status: -1, - title: error.error, - detail: error.error - } - ] + statusCode: error.responseCode, + errors }) }) RNBackgroundUpload.addListener('cancelled', uploadId, data => {