Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No cache prop does not work dynamically #76

Open
yurisanp opened this issue Mar 7, 2024 · 0 comments
Open

No cache prop does not work dynamically #76

yurisanp opened this issue Mar 7, 2024 · 0 comments

Comments

@yurisanp
Copy link

yurisanp commented Mar 7, 2024

Firstly I would like to say that I don't speak much English so I am using a translator.

I recently found this library because I needed to implement a photo caching system in an offline app that I'm developing.

The application has in its database all the photo links that will be viewed.

The app needed to save photos locally on the device as they were viewed by the user and at the same time provide functions to previously download all these photos or just the missing ones.

One of the necessary points was to have a parameter that would say whether the photos viewed by the user would be downloaded to the cache, and when I saw the "noCache" prop I was sure I should use this lib.

I had no problems implementing the cache system, but I did when using the "noCache" prop.

The two problems found were:

  • When using the prop with the value: true on an Android device, the photos do not appear on the screen because the return for the component is "file://${uri}" and when the noCache prop is true, the return is the url itself of the image resulting in a blank photo. I added the "IsRemoteImage" function that solves the problem.

  • The second problem was found with the following steps:

    • View a photo with the noCache prop: false saving it in the cache
    • Use CacheManager to delete the photo from the cache
    • View the same photo with the noCache prop: true

The second time the photo is blank because the source is still within the entries array of the CacheManager, so I added the validation of the current prop with the source prop within the entries array, solving the problem.

I didn't have time to fork the project and make a pull request, but below is the patch-package code that solves these two problems.

diff --git a/node_modules/@georstat/react-native-image-cache/src/CacheManager.ts b/node_modules/@georstat/react-native-image-cache/src/CacheManager.ts
index 46bdcf2..0fb3cc4 100644
--- a/node_modules/@georstat/react-native-image-cache/src/CacheManager.ts
+++ b/node_modules/@georstat/react-native-image-cache/src/CacheManager.ts
@@ -165,7 +165,8 @@ export default class CacheManager {
     if (
       !CacheManager.entries[source] ||
       CacheManager.entries[source].options?.headers?.Authorization !==
-        options?.headers?.Authorization
+        options?.headers?.Authorization ||
+      CacheManager.entries[source].noCache != noCache
     ) {
       CacheManager.entries[source] = new CacheEntry(
         source,
diff --git a/node_modules/@georstat/react-native-image-cache/src/CachedImage.tsx b/node_modules/@georstat/react-native-image-cache/src/CachedImage.tsx
index 9549160..75f3d6c 100644
--- a/node_modules/@georstat/react-native-image-cache/src/CachedImage.tsx
+++ b/node_modules/@georstat/react-native-image-cache/src/CachedImage.tsx
@@ -198,7 +198,7 @@ const CachedImage = (props: IProps & typeof defaultProps) => {
 
     if (isRemoteImage(propsSource) || !isImageWithRequire(propsSource)) {
       return {
-        uri: isAndroid() ? `file://${uri}` : uri,
+        uri: isAndroid() && !isRemoteImage(uri) ? `file://${uri}` : uri,
       };
     }
 
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant