Skip to content

Commit e4197fc

Browse files
committed
feature: Use cache for images from network
1 parent 9813b2c commit e4197fc

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

android/src/main/java/com/reactnativecommunity/imageeditor/ImageEditorModuleImpl.kt

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,15 @@ import android.provider.MediaStore
2121
import android.text.TextUtils
2222
import android.util.Base64
2323
import androidx.exifinterface.media.ExifInterface
24+
import com.facebook.common.executors.CallerThreadExecutor
2425
import com.facebook.common.logging.FLog
26+
import com.facebook.datasource.BaseDataSubscriber
27+
import com.facebook.datasource.DataSource
28+
import com.facebook.datasource.DataSubscriber
29+
import com.facebook.drawee.backends.pipeline.Fresco.getImagePipeline
30+
import com.facebook.imagepipeline.common.Priority
31+
import com.facebook.imagepipeline.request.ImageRequest
32+
import com.facebook.imagepipeline.request.ImageRequestBuilder
2533
import com.facebook.infer.annotation.Assertions
2634
import com.facebook.react.bridge.Arguments
2735
import com.facebook.react.bridge.JSApplicationIllegalArgumentException
@@ -31,6 +39,7 @@ import com.facebook.react.bridge.ReadableMap
3139
import com.facebook.react.bridge.ReadableType
3240
import com.facebook.react.bridge.WritableMap
3341
import com.facebook.react.common.ReactConstants
42+
import com.facebook.react.modules.fresco.ReactNetworkImageRequest
3443
import java.io.ByteArrayInputStream
3544
import java.io.File
3645
import java.io.FileInputStream
@@ -461,6 +470,42 @@ class ImageEditorModuleImpl(private val reactContext: ReactApplicationContext) {
461470
)
462471

463472
// Utils
473+
private fun prefetchImage(uri: String, headers: ReadableMap) {
474+
val uri = Uri.parse(uri)
475+
val imageRequestBuilder = ImageRequestBuilder.newBuilderWithSource(uri)
476+
val request: ImageRequest =
477+
ReactNetworkImageRequest.fromBuilderWithHeaders(imageRequestBuilder, headers)
478+
479+
val prefetchSource: DataSource<Void> =
480+
getImagePipeline().prefetchToDiskCache(request, null, Priority.HIGH)
481+
val prefetchSubscriber: DataSubscriber<Void> =
482+
object : BaseDataSubscriber<Void>() {
483+
override fun onNewResultImpl(dataSource: DataSource<Void>) {
484+
if (!dataSource.isFinished()) {
485+
return
486+
}
487+
try {
488+
val ref =
489+
getImagePipeline()
490+
.getCachedImage(getImagePipeline().getCacheKey(request, null))
491+
val image = ref!!.get()
492+
// ???
493+
} catch (e: java.lang.Exception) {} finally {
494+
dataSource.close()
495+
}
496+
}
497+
498+
override fun onFailureImpl(dataSource: DataSource<Void?>) {
499+
try {
500+
// Error
501+
} finally {
502+
dataSource.close()
503+
}
504+
}
505+
}
506+
prefetchSource.subscribe(prefetchSubscriber, CallerThreadExecutor.getInstance())
507+
}
508+
464509
private fun getResultMap(
465510
resizedImage: File,
466511
image: Bitmap,

0 commit comments

Comments
 (0)