* fix(server): global activity like duplicate search
* mobile: user_circle_avatar - fallback to text icon if no profile pic available
* mobile: use favourite icon in search "your activity"
* feat(mobile): shared album activities
* mobile: align hearts with user profile icon
* styling
* replace bottom sheet with dismissible
* add auto focus to the input
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* refactor(mobile): add app bar to library and sharing
* mobile: add app bar dialog
* fix(mobile): refetch profile image only when path is changed
* mobile: add server url to dialog
* mobile: move trash to library app bar
* replace discord link with github
* user confirmation before sign out
* edit some styles
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fix(mobile): render error on switching asset while video playing
* fix(mobile): generate proper hero tags for assets from DTOs
---------
Co-authored-by: shalong-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>
* add shared links page
* feat(mobile): shared link items
* feat(mobile): create / edit shared links page
* server: add changeExpiryTime to SharedLinkEditDto
* fix(mobile): edit expiry to never
* mobile: add icon when shares list is empty
* mobile: create new share from album / timeline
* mobile: add translation texts
* mobile: minor ui fixes
* fix: handle serverURL with /api path
* mobile: show share link on successful creation
* mobile: shared links list - 2 column layout
* mobile: use sharedlink pod class instead of dto
* mobile: show error on link creation
* mobile: show share icon only when remote assets are in selection
* mobile: use server endpoint instead of server url
* styling
* styling
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* Add translations for new album sort options
* Support additional album sort options like on web
* Update generated code
* Fix lint
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix: timezone bucket timezones
* chore: open api
* fix: interpret local time in utc
* fix: tests
* fix: refactor memory lane
* fix(web): use local date in memory viewer
* chore: set localDateTime non-null
* fix: filter out memories from the current year
* wip: move localDateTime to asset
* fix: correct sorting from db
* fix: migration
* fix: web typo
* fix: formatting
* fix: e2e
* chore: localDateTime is non-null
* chore: more non-nulliness
* fix: asset stub
* fix: tests
* fix: use extract and index for day of year
* fix: don't show memories before today
* fix: cleanup
* fix: tests
* fix: only use localtime for tz
* fix: display memories in client timezone
* fix: tests
* fix: svelte tests
* fix: bugs
* chore: open api
---------
Co-authored-by: Jonathan Jogenfors <jonathan@jogenfors.se>
* Add include archive setting to map on web
* open api
* better naming for web isArchived variable
* add withArchived setting to mobile
* (e2e): tests for mapMarker endpoint and isArchived
* isArchived to mobile
* chore: cleanup test
* chore: optimize e2e
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.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>
* feat(mobile): upload image assets before videos (#3872)
* feat(mobile): upload image assets before videos
* mobile: sort by creation date before uploading assets
* feat(mobile): upload newest assets first for foreground upload
* feat(mobile): upload images before videos only for background backup
* 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: outlick editable field does not change edit icon
* fix: unfocus on submit change album name
* styling
* styling
* confirm dialog
* Confirm deletion
* render user
* user avatar with image
* use UserCircleAvatar
* rights
* stlying
* remove/leave options
* styling
* state management
---------
Co-authored-by: Alex Tran <Alex.Tran@conductix.com>
* feat(web,server): user preference for time-based memories
* chore: open api
* dev: mobile
* fix: update
* mobile work
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Alex Tran <Alex.Tran@conductix.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>
* refactor: add/remove album assets
* chore: open api
* feat: remove owned assets from album
* refactor: move to bulk id req/res dto
* chore: open api
* chore: merge main
* dev: mobile work
* fix: adding asset from web not sync with mobile
* remove print statement
---------
Co-authored-by: Alex Tran <Alex.Tran@conductix.com>
* WIP: Adding init support for offline-loading
* WIP: found bug and fixed with offline browing adv setting
* WIP: big some bugs with first login
* WIP: static analysis fixes
* PR: Removed setting for offline browing
* PR: static analysis - remove imports
* PR: Refactored user login state
* PR: changed logger log level as it happens a lot
* PR: change log var to _log
* PR: addressing comments
* WIP: bug fixes
* WIP: static analysis on the logger variable
* WIP: Show login fields/buttons based on server configuration
* PR: change login disabled message to use translation
* added localization string)
* text
---------
Co-authored-by: Alex Tran <Alex.Tran@conductix.com>
* Precaches images in memories
* Fixes jumps and precaches images
* refactors to move precacheAsset over to ImmichImage to keep logic in same place
---------
Co-authored-by: Alex Tran <Alex.Tran@conductix.com>
* Add API service
* Added service, provider
* merge main
* update pubspec
* styling
* dev: add person search result page
* dev: display person asset on page
* dev: add rename form
* style form
* dev: mechanism to add name to faces
* styling
* fix bad merge
* update api
* test
* revert
* Add header widget
* change name
* show all people page
* fix test
* pr feedback
* Add name to app bar
* feedback
* styling
* compare different sha1 implementations
* remove openssl sha1
* sync via checksum
* hash assets in batches
* hash in background, show spinner in tab
* undo tmp changes
* migrate by clearing assets
* ignore duplicate assets
* error handling
* trigger sync/merge after download and update view
* review feedback improvements
* hash in background isolate on iOS
* rework linking assets with existing from DB
* fine-grained errors on unique index violation
* hash lenth validation
* revert compute in background on iOS
* ignore duplicate assets on device
* fix bug with batching based on accumulated size
---------
Co-authored-by: Fynn Petersen-Frey <zoodyy@users.noreply.github.com>
* feat(mobile): partner sharing
* getAllAssets for other users
* i18n
* fix tests
* try to fix web tests
* shared with/by confusion
* error logging
* guard against outdated server version
* chore(server): remove unused device info code
* chore: generate open api
* remove any DeviceTypeEnum usage from mobile
* chore: coverage
* fix: drop device info table
---------
Co-authored-by: Fynn Petersen-Frey <zody22@gmail.com>
* feat: manage authorized devices
* chore: open api
* get header from mobile app
* write header from mobile app
* styling
* fix unit test
* feat: use relative time
* feat: update access time
* fix: tests
* chore: confirm wording
* chore: bump test coverage thresholds
* feat: add some icons
* chore: icon tweaks
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fix(mobile): video player disposes early
* fixed show download button based on asset state
* style icon size
* disable screensleep on video player
* better position for video
* better scroll physics on iOS
* update asset to include isArchive property
* Not display archived assets on timeline
* replace share button to archive button
* Added archive page
* Add bottom nav bar
* clean up homepage
* remove deadcode
* improve on sync is archive
* show archive asset correctly
* better merge condition
* Added back renderList to re-rendering don't jump around
* Better way to handle showing archive assets
* complete ArchiveSelectionNotifier
* toggle archive
* remove deadcode
* fix unit tests
* update assets in DB when changing assets
* update asset state to reflect archived status
* allow to archive assets via multi-select from timeline
* fixed logic
* Add options to bulk unarchive
* regenerate api
* Change position of toast message
---------
Co-authored-by: Fynn Petersen-Frey <zoodyy@users.noreply.github.com>
* Added dto, logic to insert description and web implementation
* create text field and update on remote database
* Update description and save changes
* styling
* fix web test
* fix server test
* preserve description on metadata extraction job run
* handle exif info is null situation
* pr feedback
* format openapi spec
* update createAssetDto
* refactor logic to service
* move files
* only owner can update description
* Render description correctly in shared album
* Render description correctly in shared link
* disable description edit for not owner of asset on mobile
* localization and clean up
* fix test
* Uses providers for description text (#2244)
* uses providers for description text
* comments
* fixes initial data setting
* fixes notifier
---------
Co-authored-by: martyfuhry <martyfuhry@gmail.com>
* feat(mobile): improve logging page
* Use new API for share file
* removed unused code
* Better safe area on the home screen
* Added preparing share dialog to home screen
* feat(server): require auth for more endpoints
* dev: add authorization header to profile image on mobile
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix(mobile): allow syncing duplicate local IDs
* enable to run isar unit tests on CI
* serialize sync operations, add pull to refresh on timeline
---------
Co-authored-by: Fynn Petersen-Frey <zoodyy@users.noreply.github.com>
* Added placeholder for search explore
* refactor immich asset grid to use ref and provider
* all videos page
* got favorites, recently added, videos, and motion videos all using the immich grid
* Fixed issue with hero animations
* theming
* localization
* delete empty file
* style text
* Styling icons
* more styling
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* Use new search API and GridView for Places / Locations
* Fixes search service by adding clip: true
* Rebased from master, uses view all explore grid now
* localized view all button
* adds empty
* style text
* Fix issue with horizontal Things not render due to missing height info
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* shows the owner name of shared albums
* responsive and better names
* rich text
* localization and overflow
* unused import
* adds on tap
* suppress owner name for regular album view
* aspect ratio
* Add some styling to text
* More styling
* Style album thumbnail name
---------
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
* fix: sorted shared album
* Added TODO comment for tomorrow work
* update album shared property after adding user
---------
Co-authored-by: Fynn Petersen-Frey <zoodyy@users.noreply.github.com>
* improves login form
* login form improvements
* correctly trim server endpoint controller text when logging in
* don't show loading while fetching server info
* fixes get server login credentials
* fixes up sign in form
* error handling
* fixed layout
* removed placeholder text
* feature(mobile): sync assets, albums & users to local database on device
* try to fix tests
* move DB sync operations to new SyncService
* clear db on user logout
* fix reason for endless loading timeline
* fix error when deleting album
* fix thumbnail of device albums
* add a few comments
* fix Hive box not open in album service when loading local assets
* adjust tests to int IDs
* fix bug: show all albums when Recent is selected
* update generated api
* reworked Recents album isAll handling
* guard against wrongly interleaved sync operations
* fix: timeline asset ordering (sort asset state by created at)
* fix: sort assets in albums by created at
* rebuilding gridview
* adds listview, gridview and responsive display to backup album selection
* aligned selection info title and chips to the left
* fixed search
* style: album tile
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* 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
* fixed regression where i accidentally removed load translations from the background sync
* only for android
---------
Co-authored-by: Marty Fuhry <marty@fuhry.farm>
* 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
* uses profile photo for user avatar drawer
* Added some styling to the profile picture
* made the whole profile photo a gesture detector
* fixed image updating
* invalidates cachednetworkimage when new profile photo is uploaded
* Revert "invalidates cachednetworkimage when new profile photo is uploaded"
This reverts commit 17c83be556.
* Add fadeInImage to loading user profile
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Group by date objects instead of strings
* Change OpenAPI code generation to wrap json decoding in
Change OpenAPI code generation to wrap decodeJson in compute
* Remove orig file
* Fix linter error
* Change drag handle date format
* Order timeline explictly from new to old
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* Try staggered layout for home page
* Introduce setting for dynamic layout
* Fix some provider related bugs
* Make asset grouping configurable
* Add translation keys, refactor group title
* Rename enum values
* Fix enum names
* Reformat long if statement
* Fix timezone related bug
* Minor clean up
* Fix unit test
* Add second assets check back to home screen
* refactor(mobile): add Isar DB & Store class
new Store: globally accessible key-value store like Hive (but based on Isar)
replace first few places of Hive usage with the new Store
* reduce max. DB size to prevent errors on older iOS devices
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* chore(mobile): invoke logout() on mobile app
* feat: add mechanism to delete token from logging out endpoint
* fix: set state after login sequence success
* fix: not removing token when logging out from OAuth
* fix: prettier
* refactor: using accessTokenId to delete
* chore: pr comments
* fix: test
* fix: test threshold
* removed stay logged in checkbox and made it enabled by default
* adds padding to login button
* removed all isSaveLogin
* fix: logout would re-login with previous credential upon app restart
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Add album sorting
* Change AppBar to match photos page behaviour
* Add buttons
* First crude implementation of the favorites page
* Clean up
* Add favorite button
* i18n
* Add star indicator to thumbnail
* Add favorite logic to separate provider and fix favorite behavior in album
* Review feedback (Add isFavorite variable)
* dev: style buttons
* dev: styled drop down button
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fullscreen image effects
* toggles app bar instead of hides on tap
* edgeToEdge mode to render beneath navbar on android
* fixed appbar size
* fixed safearea for video and added opacity to appbar in gallery
* wrapped in black container to fix artifact on iOS
* changed to black
* added scaffold back woops