Skip to content

Commit

Permalink
[image] Add prefetch function parameter for HTTP headers (#28133)
Browse files Browse the repository at this point in the history
  • Loading branch information
toy0605 committed Apr 15, 2024
1 parent e2da526 commit 23dd749
Show file tree
Hide file tree
Showing 19 changed files with 132 additions and 34 deletions.
15 changes: 15 additions & 0 deletions apps/test-suite/tests/Image.js
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,21 @@ export async function test(t, { setPortalChild, cleanupPortal }) {
t.expect(path).toBe(null);
}
});

t.it('prefetches an image with headers and resolves promise to true', async () => {
await Image.clearDiskCache();
const result = await Image.prefetch(REMOTE_KNOWN_SOURCE.uri, {
headers: {
Referer: 'https://expo.dev',
},
});
t.expect(result).toBe(true);

if (Platform.OS === 'android' || Platform.OS === 'ios') {
const path = await Image.getCachePathAsync(REMOTE_KNOWN_SOURCE.uri);
t.expect(typeof path).toBe('string');
}
});
});

t.describe('generateBlurhashAsync', async () => {
Expand Down
2 changes: 1 addition & 1 deletion docs/public/static/data/unversioned/expo-image.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions packages/expo-image/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
### 🎉 New features

- On `iOS`, support loading assets in the native project. This already worked on android. ([#27251](https://github.com/expo/expo/pull/27251) by [@alanjhughes](https://github.com/alanjhughes))
- Support prefetching images with HTTP headers. ([#28133](https://github.com/expo/expo/pull/28133) by [@toy0605](https://github.com/toy0605))

### 🐛 Bug fixes

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.load.model.GlideUrl
import com.bumptech.glide.load.model.Headers
import com.bumptech.glide.load.model.LazyHeaders
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target
import com.facebook.react.uimanager.PixelUtil
Expand All @@ -29,16 +31,24 @@ class ExpoImageModule : Module() {
override fun definition() = ModuleDefinition {
Name("ExpoImage")

AsyncFunction("prefetch") { urls: List<String>, cachePolicy: CachePolicy, promise: Promise ->
AsyncFunction("prefetch") { urls: List<String>, cachePolicy: CachePolicy, headersMap: Map<String, String>?, promise: Promise ->
val context = appContext.reactContext ?: return@AsyncFunction false

var imagesLoaded = 0
var failed = false

val headers = headersMap?.let {
LazyHeaders.Builder().apply {
it.forEach { (key, value) ->
addHeader(key, value.toString())
}
}.build()
} ?: Headers.DEFAULT

urls.forEach {
Glide
.with(context)
.load(GlideUrl(it)) // Use `load` instead of `download` to store the asset in the memory cache
.load(GlideUrl(it, headers)) // Use `load` instead of `download` to store the asset in the memory cache
// We added `quality` and `downsample` to create the same cache key as in final image load.
.encodeQuality(100)
.downsample(NoopDownsampleStrategy)
Expand Down
2 changes: 1 addition & 1 deletion packages/expo-image/build/ExpoImage.web.d.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/expo-image/build/ExpoImage.web.d.ts.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/expo-image/build/ExpoImage.web.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/expo-image/build/ExpoImage.web.js.map

Large diffs are not rendered by default.

18 changes: 15 additions & 3 deletions packages/expo-image/build/Image.d.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/expo-image/build/Image.d.ts.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 13 additions & 13 deletions packages/expo-image/build/Image.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/expo-image/build/Image.js.map

Large diffs are not rendered by default.

11 changes: 11 additions & 0 deletions packages/expo-image/build/Image.types.d.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 23dd749

Please sign in to comment.