Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 1 addition & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Performant image component for React Native. Powered by [Nuke](https://github.co

## Benchmarks

>Disclaimer: Benchmark results are based on controlled testing environments and may vary in real-world applications depending on factors such as network conditions, device specifications, image sizes, and concurrent tasks.
> Results may vary in real-world applications depending on factors such as network conditions, device specifications, image sizes, and concurrent tasks.

For example, loading 120 images in flatlist. See the code in the example folder:

Expand Down Expand Up @@ -98,12 +98,6 @@ import TurboImage from 'react-native-turbo-image';
await TurboImage.prefetch([Source]);
```

### `dispose`

```ts
await TurboImage.dispose([Source]);
```

### `clearMemoryCache`

```ts
Expand Down
27 changes: 0 additions & 27 deletions android/src/main/java/com/turboimage/TurboImageModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -59,33 +59,6 @@ class TurboImageModule(private val context: ReactApplicationContext) :
}
}

@ReactMethod
fun dispose(sources: ReadableArray, promise: Promise) {
val imageRequests = sources.toArrayList().map { source ->
val uri = (source as HashMap<*, *>)["uri"] as String
val headers = source["headers"] as? HashMap<*, *>

if (headers != null) {
val headersBuilder = Headers.Builder()
headers.map { (key, value) ->
headersBuilder.add(key as String, value as String)
}
ImageRequest.Builder(context)
.headers(headersBuilder.build())
.data(uri)
.build()
} else {
ImageRequest.Builder(context)
.data(uri)
.build()
}
}
imageRequests.forEach { imageRequest ->
imageLoader?.enqueue(imageRequest)?.dispose()
}
promise.resolve("Success")
}

@ReactMethod
fun clearMemoryCache(promise: Promise) {
Coil.imageLoader(context).memoryCache?.clear()
Expand Down
28 changes: 7 additions & 21 deletions ios/TurboImageViewManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import Nuke
@objc(TurboImageViewManager)
class TurboImageViewManager: RCTViewManager {

private var prefetcher: ImagePrefetcher?
private var prefetchers: [String: ImagePrefetcher] = [:]

override func view() -> (TurboImageView) {
return TurboImageView()
Expand All @@ -23,6 +23,7 @@ extension TurboImageViewManager {
with cachePolicy: String,
resolve: @escaping RCTPromiseResolveBlock,
reject: @escaping RCTPromiseRejectBlock) {

let imageRequests: [ImageRequest] = sources.map {
guard let uri = $0["uri"] as? String,
let url = URL(string: uri)
Expand All @@ -34,37 +35,22 @@ extension TurboImageViewManager {
}
return ImageRequest(urlRequest: urlRequest)
}.compactMap{ $0 }

let key = UUID().uuidString
var prefetcher: ImagePrefetcher?
if(cachePolicy == "dataCache") {
prefetcher = ImagePrefetcher(pipeline: ImagePipeline(configuration: .withDataCache))
} else {
prefetcher = ImagePrefetcher()
}
prefetchers[key] = prefetcher
prefetcher?.startPrefetching(with: imageRequests)
prefetcher?.didComplete = {
resolve(true)
self.prefetchers[key] = nil
}
}

@objc
func dispose(_ sources: [Source],
resolve: @escaping RCTPromiseResolveBlock,
reject: @escaping RCTPromiseRejectBlock) {
let imageRequests: [ImageRequest] = sources.map {
guard let uri = $0["uri"] as? String,
let url = URL(string: uri)
else { return nil }

var urlRequest = URLRequest(url: url)
if let headers = $0["headers"] as? [String: String] {
urlRequest.allHTTPHeaderFields = headers
}
return ImageRequest(urlRequest: urlRequest)
}.compactMap{ $0 }

prefetcher?.stopPrefetching(with: imageRequests)
resolve("Success")
}

@objc
func clearMemoryCache(_ resolve: @escaping RCTPromiseResolveBlock,
reject: @escaping RCTPromiseRejectBlock) {
Expand Down
Loading