* reverts: 5566
* fix: stitch livePhoto only in iOS
* fix: PMProgressHandler only on iOS
* ios: fallback to saving image if livephoto fails
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* refactor: server info model to use data classes instead of dtos
* mobile: add return types and refactor private variables in map / stack
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* [BUGFIX] Fix slow album thumbnail generation
When generating the thumbnail of an album, all of the pictures of the
album are retrieved but only the first picture of the album is used.
Retrieving all of the pictures of the album at once can cause huge performance
issues on large albums.
Since only the first picture is used to generate the thumbnail, this commit
uses the getAssetListPaged method instead of getAssetListRange, effectively
retrieving only the first picture of the album.
* [DEVMINOR] Remove unecessary check
As we already check for the number of assets in the album, when
fetching assets using `album.getAssetListPaged` the returned result
won't be empty.
---------
Co-authored-by: Azsde <aelkaim@pixium-vision.com>
* Bump to Flutter 3.13.0
* Updates permission status
* Adds hidden to app livecycle state
* Updates and switches to WakelockPlus
* bump flutter version github action
* mobile test version
* fix format
* video player
* video uri
* ios test
* Update android target sdk requirement to PlayStore
---------
Co-authored-by: Alex Tran <Alex.Tran@conductix.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fix: exclude albums filter in backup provider
* refactor: Separate builder methods for Top Control App Bar buttons
* fix: Show download button only for Remote only assets
* fix(mobile): Force Refresh duration is too low to trigger it consistently
* feat(mobile): Make Buttons dynamic in Home Selection DraggableScrollableSheet
* feat(mobile): Manual Asset upload
* refactor(mobile): Replace _showToast with ImmichToast calls
* refactor(mobile): home_page selectionAssetState handling
* chore(mobile): min and initial size of DraggableScrollState increased
This is to prevent the buttons in the bottom sheet getting clipped behind the 3 way navigation buttons
in the default density of Android devices
* feat(mobile): notifications for manual upload progress
* wording
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* feature(mobile): no longer wait for background backup in settings
migrate all Hive boxes required for the backup process to Isar
* add final modifier
* adds onboarding
* fixed error where login was taking you to permission page
* fixed a bad rebase and added more checks to not start backup service on login if no gallery permission
* forgot the permission handler import in AppDelegate
* reverts album selection page
* change to ref watch
* added device_info_plus to podspec
* removed unused import
---------
Co-authored-by: Marty Fuhry <marty@fuhry.farm>
* fix(mobile): no album thumbnail lead to no album selection shown
* add more log info
* added global error handling
* better place to init logger
* get more log
* fix(mobile): user get logged out upon clicking on any thing after logging in
* wip: fixing still
* fix: the actual issue
* Fix: avaialble album not updating UI
* first run of getting background sync working in iOS
* got background sync calling into flutter
* added background task
* added necessary sync files
* fixed some names and added more implementations
* got as far as Hive.initFlutter
* brute force got to await Hive.initFlutter
* lots of print statements to figure out where execution is failing, and its failing at the root asset bundle in the localization.dart service
* first time working, got plugins registered
* removed broken cleanup code
* refactored
* linters
* now can pass user settings
* background service plugin uses app background processing instead of fetch
* renamed backgroundFetch to backgroundProcessing to make it clearer
* don't use max delay
* adds fetch back in
* fixes require charging default values and backup controller page
* fixes background fetch
* fixes ios not importing photos
* guarded path provider ios
* lint
* adds max tries for heartbeat to work in iOS
* fail after seconds
* timeout instead of fail after seconds
* removes release lock from system stop
* restores checkLockReleasedWithHeartbeat to Future<void>
* removes max tries from acquire lock
* fixes lock timeout with iOS
* restored for loop
* adds comments, made the AppRefresh task only run while not requiring network or charge
* fixed compile issue
* now both are registered and added better comments. also added ability for task to cancel itself
* added the podfile and pubspec
* added backup diagnostics to IOS and removed iOS ignored backup options and fixed network connectivity always required
* Added Alex's dev team
* styled debug list item, fixed refresh task not set bug, fixed enable / disable background service on platform channel
---------
Co-authored-by: Marty Fuhry <marty@fuhry.farm>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fix: add correct relations to asset typeorm entity
* fix: add missing createdAt column to asset entity
* ci: run check to make sure generated API is up-to-date
* ci: cancel workflows that aren't for the latest commit in a branch
* chore: add fvm config for flutter
* 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
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
* 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
* 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