* feat(mobile): use cached asset info if unchanged instead of downloading all assets
This adds an HTTP ETag to the getAllAssets endpoint and client-side support in the app.
If locally cache content is identical to the content on the server, the potentially large list of all assets does not need to be downloaded.
* use ts import instead of require
* Added return type for oauth/callback
* Remove console.log
* Redirect app
* Wording
* Added loading state change
* Added OAuth login on mobile
* Return correct status for correct redirection
* Auto discovery OAuth Login
* introduce Asset as composition of AssetResponseDTO and AssetEntity
* filter out duplicate assets (that are both local and remote, take only remote for now)
* only allow remote images to be added to albums
* introduce ImmichImage to render Asset using local or remote data
* optimized deletion of local assets
* local video file playback
* allow multiple methods to wait on background service finished
* skip local assets when adding to album from home screen
* fix and optimize delete
* show gray box placeholder for local assets
* add comments
* fix bug: duplicate assets in state after onNewAssetUploaded
* First implementation that uses new API
* Various UI improvements
* Create new album from home screen
* Fix padding when in multiselect mode
* Alex Suggestions
* Change to album after creation
* settings to configure upload progress notifications (none/standard/detailed)
* use native Android notifications to show progress information
* e.g. 50% (30/60) assets
* e.g. Uploading asset XYZ - 25% (2/8MB)
* no longer show errors if canceled by system (losing network)
Implemented a mechanism to extract the correct time zone from the GPS coordinate if presented in the file's EXIF, and to convert the timestamp to the correct UTC time so that the time will show correctly based on the mobile/web local time zone.
This change greatly reduces the chance that a backup is not performed
when a new photo/video is made.
Instead of combining the change trigger and additonal constraints (wifi
or charging) into a single worker, these aspects are now separated.
Thus, it is now reliably possible to take pictures while the wifi
constraint is not satisfied and upload them hours/days later once
connected to wifi without taking a new photo.
As a positive side effect, this simplifies the error/retry handling
by directly leveraging Android's WorkManager without workarounds.
The separation also allows to notify the currently running BackupWorker
that new assets were added while backing up other assets to also upload
those newly added assets.
Further, a new tiny service checks if the app is killed, to reschedule
the content change worker and allow to detect the first new photo.
Bonus: The home screen now shows backup as enabled if background backup
is active.
* use separate worker/task for listening on changed/added assets
* use separate worker/task for performing the backup
* content observer worker enqueues backup worker on each new asset
* wifi/charging constraints only apply to backup worker
* backupworker is notified of assets added while running to re-run
* new service to catch app being killed to workaround WorkManager issue
* Use custom caches in all modules
* Cache Settings
* Fix wrong key
* Create custom cache repository based on hive
* Show cache usage in settings
* Show cache sizes
* Change settings ranges and default value
* Handle cache clear by operating system
* Resolve review comments
* show notifications on background backup errors
* settings page to configure (background backup error) notifications
* persist time since failed background backup
* fix darkmode slider color
* Add settings options for number of assets per row and storage indicator
* Add attributes to enum to avoid duplicate code
* Also apply customizations to albums
* Minor Refactorings
* Three stage loading i18n fix
* properly done background backup service
* new concurrency/locking management with heartbeat
fix communication erros with Kotlin plugin on start/stop service methods
better error handling for BackgroundService public methods
Add default notification message when service is running
* configurable WiFi & charging requirement for service
* use translations in background service
* styling light and dark theme
* Icon topbar
* Fixed app bar title dark theme
* Fixed issue with getting thumbnail for things
* Refactor sharing page
* Refactor scroll thumb
* Refactor chip in auto backup indiation button
* Refactor sharing page
* Added theme toggle
* Up version for testflight build
* Refactor backup controller page
* Refactor album selection page
* refactor album pages
* Refactor gradient color profile header
* Added theme switcher
* Register app theme correctly
* Added locale to the app
* Added translation key
* Styling for bottomsheet colors
* up server version
* Fixed font size
* Fixed overlapsed sliverappbar on photos screen
* Refactor profile drawer to sub component
* Added setting page, routing with some options
* Added setting service
* Implement three stage settings
* get app setting for three stage loading
* Change API to return assets count and change web behavior accordingly
* Refactor assets.length
* Explicitly declare type of assetCount so Dart SDK understand it
* Finished refactoring on mobile
* First performance tweaks (caching and rendering improvemetns)
* Revert asset response caching
* 3-step image loading in asset viewer
* Prevent panning and zooming until full-scale version is loaded
* Loading indicator
* Adapt to gallery PR
* Cleanup
* Dart format
* Fix exif sheet
* Disable three stage loading until settings are available
* Refactor sharing to album
* Added library page in the bottom navigation bar
* Refactor SharedAlbumService to album service
* Refactor apiProvider to its file
* Added image grid
* render album thumbnail
* Using the wrap to render thumbnail and album info better
* Navigate to album viewer
* After deletion, navigate to the respective page of the shared and non-shared album
* Correctly remove album in local state
* Refactor create album page
* Implemented create non-shared album