Skip to content

Commit fd9ef5d

Browse files
authored
fix: run all io operations on io dispatcher (#32)
1 parent 5e95593 commit fd9ef5d

3 files changed

Lines changed: 17 additions & 14 deletions

File tree

android/src/main/java/com/nitrofs/FileDownloader.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.nitrofs
22

3-
import android.os.Handler
4-
import android.os.Looper
53
import io.ktor.client.HttpClient
64
import io.ktor.client.call.body
75
import io.ktor.client.engine.okhttp.OkHttp
@@ -11,6 +9,8 @@ import io.ktor.http.HttpMethod
119
import io.ktor.util.cio.writeChannel
1210
import io.ktor.utils.io.ByteReadChannel
1311
import io.ktor.utils.io.copyAndClose
12+
import kotlinx.coroutines.Dispatchers
13+
import kotlinx.coroutines.withContext
1414
import java.io.File
1515

1616
class FileDownloader {
@@ -30,7 +30,7 @@ class FileDownloader {
3030
onDownload { totalBytesSent, contentLength ->
3131
if (totalBytesSent > 0 && contentLength != null){
3232
onProgress?.let {
33-
Handler(Looper.getMainLooper()).post {
33+
withContext(Dispatchers.Main) {
3434
onProgress.invoke(totalBytesSent.toDouble(), contentLength.toDouble())
3535
}
3636
}

android/src/main/java/com/nitrofs/HybridNitroFS.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@ import com.margelo.nitro.nitrofs.NitroFile
88
import com.margelo.nitro.nitrofs.NitroFileEncoding
99
import com.margelo.nitro.nitrofs.NitroFileStat
1010
import com.margelo.nitro.nitrofs.NitroUploadOptions
11+
import kotlinx.coroutines.CoroutineScope
12+
import kotlinx.coroutines.Dispatchers
1113

1214
class HybridNitroFS: HybridNitroFSSpec() {
1315
val context = NitroModules.applicationContext ?: error("React Native context not found")
1416
val nitroFsImpl = NitroFSImpl(context)
17+
val ioScope = CoroutineScope(Dispatchers.IO)
1518

1619
override val BUNDLE_DIR: String
1720
get() = ""
@@ -34,7 +37,7 @@ class HybridNitroFS: HybridNitroFSSpec() {
3437
data: String,
3538
encoding: NitroFileEncoding
3639
): Promise<Unit> {
37-
return Promise.async {
40+
return Promise.async(ioScope) {
3841
try {
3942
nitroFsImpl.writeFile(path, data, encoding)
4043
} catch (e: Exception) {
@@ -48,7 +51,7 @@ class HybridNitroFS: HybridNitroFSSpec() {
4851
path: String,
4952
encoding: NitroFileEncoding
5053
): Promise<String> {
51-
return Promise.async {
54+
return Promise.async(ioScope) {
5255
try {
5356
nitroFsImpl.readFile(path, encoding)
5457
} catch (e: Exception) {
@@ -62,7 +65,7 @@ class HybridNitroFS: HybridNitroFSSpec() {
6265
srcPath: String,
6366
destPath: String
6467
): Promise<Unit> {
65-
return Promise.async {
68+
return Promise.async(ioScope) {
6669
try {
6770
nitroFsImpl.copyFile(srcPath, destPath)
6871
} catch (e: Exception) {
@@ -80,7 +83,7 @@ class HybridNitroFS: HybridNitroFSSpec() {
8083
}
8184

8285
override fun unlink(path: String): Promise<Boolean> {
83-
return Promise.async {
86+
return Promise.async(ioScope) {
8487
try {
8588
nitroFsImpl.unlink(path)
8689
} catch (e: Exception) {
@@ -91,7 +94,7 @@ class HybridNitroFS: HybridNitroFSSpec() {
9194
}
9295

9396
override fun mkdir(path: String): Promise<Boolean> {
94-
return Promise.async {
97+
return Promise.async(ioScope) {
9598
try {
9699
nitroFsImpl.mkdir(path)
97100
} catch (e: Exception) {
@@ -102,7 +105,7 @@ class HybridNitroFS: HybridNitroFSSpec() {
102105
}
103106

104107
override fun stat(path: String): Promise<NitroFileStat> {
105-
return Promise.async {
108+
return Promise.async(ioScope) {
106109
nitroFsImpl.stat(path)
107110
}
108111
}
@@ -112,7 +115,7 @@ class HybridNitroFS: HybridNitroFSSpec() {
112115
uploadOptions: NitroUploadOptions,
113116
onProgress: ((Double, Double) -> Unit)?
114117
): Promise<Unit> {
115-
return Promise.async {
118+
return Promise.async(ioScope) {
116119
try {
117120
nitroFsImpl.uploadFile(file, uploadOptions, onProgress)
118121
} catch (e: Exception) {
@@ -128,7 +131,7 @@ class HybridNitroFS: HybridNitroFSSpec() {
128131
destinationPath: String,
129132
onProgress: ((Double, Double) -> Unit)?
130133
): Promise<NitroFile> {
131-
return Promise.async {
134+
return Promise.async(ioScope) {
132135
try {
133136
nitroFsImpl.downloadFile(serverUrl, fileName, destinationPath, onProgress)
134137
NitroFile(

android/src/main/java/com/nitrofs/NitroFileUploader.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.nitrofs
22

3-
import android.os.Handler
4-
import android.os.Looper
53
import io.ktor.client.HttpClient
64
import com.margelo.nitro.nitrofs.NitroUploadMethod
75
import com.margelo.nitro.nitrofs.NitroUploadOptions
@@ -14,6 +12,8 @@ import io.ktor.http.Headers
1412
import io.ktor.http.HttpHeaders
1513
import io.ktor.http.HttpMethod
1614
import io.ktor.utils.io.streams.asInput
15+
import kotlinx.coroutines.Dispatchers
16+
import kotlinx.coroutines.withContext
1717
import java.io.File
1818

1919
class NitroFileUploader {
@@ -45,7 +45,7 @@ class NitroFileUploader {
4545
onUpload { totalBytesSent, totalBytes ->
4646
if (totalBytesSent > 0 && totalBytes != null) {
4747
onProgress?.let {
48-
Handler(Looper.getMainLooper()).post {
48+
withContext(Dispatchers.Main) {
4949
it.invoke(totalBytesSent.toDouble(), totalBytes.toDouble())
5050
}
5151
}

0 commit comments

Comments
 (0)