* 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
* Added context menu for album opionts
* choose asset for album thumbnail
* Refactor UpdateAlbumDto to accept albumThumbnailAssetId
* implemented changing album cover on web
* Fixed api change on mobile app
* Added album page
* Refactor sidebar
* Added album assets count info
* Added album viewer page
* Refactor album sorting
* Fixed incorrectly showing selected asset in album selection
* Improve fetching speed with prefetch
* Refactor to use ImmichThubmnail component for all
* Update to the latest version of Svelte
* Implement fixed app bar in album viewer
* Added shared user avatar
* Correctly get all owned albums, including shared
* feat(mobile) added french translations
* fix(mobile) added missing translation tag for search_no_objects (EN,DE,FR)
* fix(mobile) renamed search_no_objects to search_page_no_objects
* Add i18n framework to mobile app and write simple translation generator
* Replace all texts in login_form with i18n keys
* Localization of sharing section
* Localization of asset viewer section
* Use JSON as base translation format
* Add check for missing/unused translation keys
* Add localizely
* Remove i18n directory in favour of localizely
* Backup Translation
* More translations
* Translate home page
* Translation of search page
* Translate new server version announcement
* Reformat code
* Fix typo in german translation
* Update englisch translations
* Change translation keys to match dart filenames
* Add /api to translated endpoint_urls
* Update localizely.yml
* Add languages to ios plist
* Remove unused keys
* Added script to check outdated key in other translations
* Add download key to localizely.yml
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Remove thumbnail generation on mobile
* Remove tconditions for missing thumbnail on the backend
* Remove console.log
* Refactor queue systems
* Convert queue and processor name to constant
* Added corresponding interface to job queue
* Deprecate login scenarios that support pre-web era
* refactor and simplify setup
* Added user info to change password form
* change isFistLogin column to shouldChangePassword
* Implemented change user password
* Implement the change password page for mobile
* Change label
* Added changes log and up minor version
* Fixed typo in the release note
* Up server version
* Fixed app not resuming backup after closing and reopening the app
* Fixed cosmetic effect of backup button doesn't change state right away after pressing start backup
* Fixed grammar
* Fixed deep copy problem that cause incorrect asset count when backing up
* Format code
* Allow zooming in image viewer
* Use thumbnailProvider as initial provider
* Set maximum zoom level to 100%
* Implement custom swipe listener in remote_photo_view
* Dart format
* Disable swipe gestures when zoomed in (prevents panning)
* Rename "shared" to "album"
Prepare moving "SharedAlbums" to "Albums"
* Update server album API endpoints
* Update mobile app album endpoints
Also add `putRequest` to mobile network.service
* Add GET album collection filter
- allow to filter by owner = 'mine' | 'their'
- make sharedWithUserIds no longer required when creating an album
* Rename remaining variables to "album"
* Add ParseMeUUIDPipe to validate uuid or `me`
* Add album params validation
* Update todo in mobile album service.
* Setup e2e testing
* Add user e2e tests
* Rename database host env variable to DB_HOST
* Add some `Album` e2e tests
Also fix issues found with the tests
* Force push (try to recover DB_HOST env)
* Rename db host env variable to `DB_HOSTNAME`
* Remove unnecessary `initDb` from test-utils
The current database.config is running the migrations:
`migrationsRun: true`
* Remove `initDb` usage from album e2e test
* Update GET albums filter to `shared`
- add filter by all / shared / not shared
- add response DTOs
- add GET albums e2e tests
* Update album e2e tests for user.service changes
* Update mobile app to use album response DTOs
* Refactor album-service DB into album-registry
- DB logic refactored into album-repository making it easier to test
- add some album-service unit tests
- add `clearMocks` to jest configuration
* Finish implementing album.service unit tests
* Rename response DTO
Make them consistent with rest of the project naming
* Update debug log messages in mobile network service
* Rename table `shared_albums` to `albums`
* Rename table `asset_shared_album`
* Rename Albums `sharedAssets` to `assets`
* Update tests to match updated "delete" response
* Fixed asset cannot be compared in Set by adding Equatable package
* Remove hero effect to fixed janky animation
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Update mobile dependencies
* Added image picker
* Added mechanism to upload profile image
* Added image type to send to web
* Added styling for circle avatar
* Fixxed issue with sharp cannot resize image properly
* Finished displaying and uploading user profile
* Added user profile to web
* Replace static title text with a text edit field
* Implement endpoint for updating album info
* Implement changing title
* Only the owner can change the title
* New features
- Share album. Users can now create albums to share with existing people on the network.
- Owner can delete the album.
- Owner can invite the additional users to the album.
- Shared users and the owner can add additional assets to the album.
* In the asset viewer, the user can swipe up to see detailed information and swip down to dismiss.
* Several UI enhancements.
* Clean up Dockerfile and added action to build microservice latest
* Combine build microservices and server into the same action
* Added build and push release version for microservices
* Handle pause/restart listening to event on_upload_success and reload asset list after navigating back from BackupControllerPage
* Remove unused api endpoint
* Update photo_manager pub package
* Added download endpoint for assets
* Successfully save a photo to the local device's gallery
* Save save a video to the local device's gallery
* Fixed#97
* Added download loading indicator
* Refactor and increase the font size for curated search thumbnail images
* Reposition loading animation on the search result page
* Renamed multipart filed name 'files' to 'assetData'.
* Added an additional field name of 'thumbnailData' to multipart form.
* Implemented upload mechanism for thumbnail directly from the mobile client.
* Removed dead code
* Implemented a version checking mechanism.
* Added Tab Navigation Observer to trigger event handling for tab page navigation
* Added query to get access with distinct location
* Showed places in search page as a horizontal list
* Showed location search result on tapped
* refactor serving file function asset service
* Remove PhotoViewer for now since it creates a problem in 2.10
* Added error message for wrong decode file and logo for failed to load file
* Fixed error when read stream cannot be created and crash server
* Added method to get all assets as a raw array
* Implemented cleaner way of grouping image
* Implemented operation to delete assets in the database
* Implemented delete on database operation
* Implemented delete on device operation
* Fixed issue display wrong information when the auto backup is enabled after deleting all assets
* Support HEIC/HEIF backup
* Storing backup directly from original file from the phone
* Directly read and backup video file - Improve performance on video backup
* Implementing video upload features
* setup image resize processor
* Add video thumbnail with duration and icon
* Fixed issue with video upload timeout and upper case file type on ios
* Added video player page
* Added video player page
* Fixing video player not play on ios
* Added partial file streaming for ios/android video request
* Added nginx as proxy server for better file serving
* update nginx and docker-compose file
* Video player working correctly
* Video player working correctly
* Split duration to the second