☁️ Local Images
Local Image Slice
- ✅ Synced: The image is synced with the server and exists on your phone
- 🔄 Syncing: The image is currently syncing with the server
- ❌ Local: The image is not synced with the server and only exists on your phone
- ☁️ Remote: The image is only on the server and not on your phone
On the first load of the app, it will check for new local images. We use react-native-camera-roll
to get the images from the phone. This is a async action in LocalImagesSlice called loadLocalImages
. It will get the images from the phone and save them in the store. We use the react-native-file-access
library to get the md5 hash of the image, which we combine with user_id
to get the server hash. This is used to check if the image is already on the server.
The slice is persisted with redux-persist
and async-storage
, so the images will be loaded from the store on the next start of the app.
Limitations
fromTime
andtoTime
do not work, so we save the timestamp of the last check and compare by that with each loaded image.
Showing local images, together with the images from the server
We implemented a new selector, which merges local images and albumByDate images. When we find the same hash in both, we set the synced
property to true
for the local image and remove the image from the albumByDate images.
Deleting backed up images
The business logic is in removeBackedUpImages
action to delete the backed up images. We use react-native-camera-roll
to delete images from the phone, which need the Manage extern storage
permission.