-
Notifications
You must be signed in to change notification settings - Fork 344
/
Copy pathGlobalRequestObserverDelegate.kt
71 lines (59 loc) · 2.61 KB
/
GlobalRequestObserverDelegate.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.vydia.RNUploader
import android.content.Context
import android.util.Log
import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.WritableMap
import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter
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"
private var reactContext: ReactApplicationContext = reactContext
override fun onCompleted(context: Context, uploadInfo: UploadInfo) {
}
override fun onCompletedWhileNotObserving() {
}
override fun onError(context: Context, uploadInfo: UploadInfo, exception: Throwable) {
val params = Arguments.createMap()
params.putString("id", uploadInfo.uploadId)
// 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")
}
sendEvent("error", params, context)
}
override fun onProgress(context: Context, uploadInfo: UploadInfo) {
val params = Arguments.createMap()
params.putString("id", uploadInfo.uploadId)
params.putInt("progress", uploadInfo.progressPercent) //0-100
sendEvent("progress", params, context)
}
override fun onSuccess(context: Context, uploadInfo: UploadInfo, serverResponse: ServerResponse) {
val headers = Arguments.createMap()
for ((key, value) in serverResponse.headers) {
headers.putString(key, value)
}
val params = Arguments.createMap()
params.putString("id", uploadInfo.uploadId)
params.putInt("responseCode", serverResponse.code)
params.putString("responseBody", serverResponse.bodyString)
params.putMap("responseHeaders", headers)
sendEvent("completed", params, context)
}
/**
* Sends an event to the JS module.
*/
private fun sendEvent(eventName: String, params: WritableMap?, context: Context) {
reactContext?.getJSModule(RCTDeviceEventEmitter::class.java)?.emit("RNFileUploader-$eventName", params)
?: Log.e(TAG, "sendEvent() failed due reactContext == null!")
}
}