* Refactor to use ImmichThumbnail and local thumbnail image provider
format
* dart format
linter errors
linter
* Adds blurhash
format
* Fixes image blur
* uses hook instead of stateful widget to be more consistent
* Uses blurhash hook state
* Uses blurhash ref instead of state
* Fixes fade in duration for fade in placeholder
* Fixes an issue where thumbnails fail to load if too many thumbnail requests are made simultaenously
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
Now we only validate access token when we have one in the store and only send you to the login page when the response from the server is a 401
linter
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fix(mobile): remove log message counter
Previously, the items in the log page were numbered starting with `#0`
and increasing from top to bottom. Being new to the app, this confused
me because I would have expected that newer messages have a higher
number than older messages.
Removing the counter completely because it doesn't add any value -
log messages are identified by their timestamp, text and other details.
* Switch timestamp and context in log overview
* Add "details" column to LoggerMessage
* Include error details in log details page
* Move error details out of log message
* Add error message to mixin
* Create extension for HTTP Response logging
* Fix analyze errors
* format
* fix analyze errors, format again
* video loading delayed
* Chewie controller implemented in hook
* fixing look and feel
* Finalizing delay and animations
* Fixes issue with immersive mode showing immediately in videos
* format fix
* Fixes bug where video controls would hide immediately after showing while playing and reverts hide controls timer to 5 seconds
* Fixed rebase issues
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* Refactors to use widgets in immich asset grid
Adds comments
* Fixes asset thumbnail absoluteOffset
* feat(mobile): Uses gradient image placeholders in memory lane and in the asset grid (#7142)
* Uses gradient image placeholders in memory lane and in the asset grid
* Changes to create placeholders in immmich image.thumbnail
* removed unused import
* uses context.isDarkTheme and fixed function signature for allAssetsSelected
* Adds image provider
* uses image provider
* wip load preview
* wip everything but activity asset thumbnail needs some help with a remote id
* Immich provider used in gallery
* First draft of the immich image provider, working nicely!
* Removed OriginalImageProvider
* Fixes for thumbnails
* feat(mobile): thumbhash support (#7028)
* feat(mobile): thumbhash support
* perf(mobile): store bmp thumbhash bytes in Isar
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* Uses octoimage for fade in and placeholders
* fixes thumbnails, removes unused values, adds better thumbnail size
* removes thumbhash support for now
* Forgot one thumbhash removal
* Use big thumbnail for local image on ios
* fix(mobile): Multipart image loading for iOS double swipe (#7064)
* uses local thumb first
* Multipart thumbnail
* Clean up file delete
* await file delete
* Fynn's comments, made thumbnail smaller and doesn't crash on erroring out on thumbnail
* lint
---------
Co-authored-by: Marty Fuhry <marty@fuhry.farm>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Moves http client to global private place for reuse
* Got rid of usePreview for local image providers since we always show a thumbnail anyway first
* linter
---------
Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Marty Fuhry <marty@fuhry.farm>
* Videos play in memories now
Remove auto video advance
* to next asset after video is done playing
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* refactor(mobile): make location picker scaffold primary
* chore(mobile): update map heatmap colors
* style(mobile): map bottomsheet - only use borders on top
* fix(mobile): location picker show buttons above navigation bar
* fix: crash on iOS due to heatmap invalid color format
* disable rotate
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* Made memories full screen
* Uses linear bar and fits the card better for memories
* Fixes pageview close button moving with pages
* Uses hooks instead of stateful components
* Adds ticks to the progress indicator
* Rounds the edges of the progress bar
* Fixes trailing comma analyze error
* Adds padding and hero to memories
* Fixes an issue with initial index set and adds hero / proper padding
* Fixes aspect ratio calculation
* Color
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
Add a haptic feedback when jumping from one month to another in the
asset grid view.
The feedback is similar to the one implemented in the Google Photos app.
* Adding memory epilogue card
* Adds epilogue page to memories
* Fixes a next / back issue
* color
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat(mobile): delete assets from device only
* mobile: add backed up only toggle for delete device only
* remove toggle inside alert and show different content
* mobile: change content color for local only
* mobile: delete local only button to dialog
* style: display bottom action in two lines
* feat: separate delete buttons
* fix: incorrect error message for ownedRemoteSelection
* feat(mobile): long-press delete to permanently delete asset
* chore: add todo to handle long press to delete in gallery_viewer
* chore: rebase on deletion branch
* feat(mobile): long-press delete to permanently delete asset
* fix(mobile): update minChildSize of control bottom app bar
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fix(mobile): handle asset removal state from trash for merged assets
* fix(mobile): use appropriate text for trash / delete
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* feat(mobile): delete assets from device only
* mobile: add backed up only toggle for delete device only
* remove toggle inside alert and show different content
* mobile: change content color for local only
* mobile: delete local only button to dialog
* style: display bottom action in two lines
* feat: separate delete buttons
* fix: incorrect error message for ownedRemoteSelection
* fix: handle remoteOnly from delete everywhere
* request confirmation for local only only when non-backed assets are in selection
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fix(mobile): Load assets on "Live-Images" page
Instead of requesting the server for the relevant entries, we can use
the local DB.
This change fixes loading errors when going to the "Live-Images" page.
It is similar to the work done with #5971.
* fix(mobile): Fix Recently added page
* fix: handle livePhotos using originFileWithSubType
* remove livePhoto asset cache
* fetch live photo video name from entity
* fix: video file not detected
* chore: pull main
* fix: set correct header
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* 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: migrate album sort option to provider
* refactor: use sort order in add to album sheet list
* test(mobile): album_sort_options_provider unit tests
* refactor: sort shared albums with user selected sort
* refactor: use listview to render shared albums
* refactor: rename to AlbumSortByOptions
* refactor: remove filtering inside sort functions
* font size
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* feat(mobile): unify asset grid multiselect actions
* add favorite & archive page
* show edit date&place on main photos screen
* Reposition exit button
* Sort favorite with the same order as other view
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fix(mobile): album thumbnail list tile overflow on large album title
* fix: notify clients about live photo linked event
* refactor: notify clients during meta extraction
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* chore: text correction
* fix: update activities stat only when the widget is mounted
* feat(mobile): edit date time
* feat(mobile): edit location
* chore(build): update gradle wrapper - 7.6.3
* style: dropdownmenu styling
* style: wrap locationpicker in singlechildscrollview
* test: add unit test for getTZAdjustedTimeAndOffset
* pr changes
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* refactor: scaffoldwhen to log errors during scaffold body render
* refactor: onError and onLoading scaffoldbody
* refactor: more scaffold body to custom extension
* refactor: add skiploadingonrefresh
* Snackbar color
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
This fixes issue #4397 and automatically adds the https protocol to the server endpoint url if it is missing
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* refactor: mobile - send livephoto as a separate request
* fix: create new request for live asset
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* fix(mobile): use proper context for popping out from share
* mobile: use proper context for popping
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* fix(mobile): Mark more strings for translation
Moving more strings to the `i18n` JSON file, and also including their
es-US translations.
* Add more translatable strings
* fix(mobile): Cannot return to logged in screen due to name changes
* fix(mobile): Cannot return to logged in screen due to name changes
* remove deadcode
* test deprecate
* Add deprecated decorator
* revert api change
* refactor: move all extensions to separate package
* refactor(mobile): add BuildContext extension
* refactor(mobile): use theme getters from context
* refactor(mobile): use media query size from context
* refactor(mobile): use auto router methods from context
* refactor(mobile): use navigator methods from context
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* maplibre on web, custom styles from server
Actually use new vector tile server, custom style.json
support multiple style files, light/dark mode
cleanup, use new map everywhere
send file directly instead of loading first
better light/dark mode switching
remove leaflet
fix mapstyles dto, first draft of map settings
delete and add styles
fix delete default styles
fix tests
only allow one light and one dark style url
revert config core changes
fix server config store
fix tests
move axios fetches to repo
fix package-lock
fix tests
* open api
* add assets to docker container
* web: use mapSettings color for style
* style: add unique ids to map styles
* mobile: use style json for vector / raster
* do not use svelte-material-icons
* add click events to markers, simplify asset detail map
* improve map performance by using asset thumbnails for markers instead of original file
* Remove custom attribution
(by request)
* mobile: update map attribution
* style: map dark mode
* style: map light mode
* zoom level for state
* styling
* overflow gradient
* Limit maxZoom to 14
* mobile: listen for mapStyle changes in MapThumbnail
* mobile: update concurrency
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: bo0tzz <git@bo0tzz.me>
Co-authored-by: Alex <alex.tran1502@gmail.com>
This change makes albums with same start and end date, to just display a
single date.
Currently, date range is displayed as `Nov 9 - Nov 9 2023`. With this
change, just `Nov 9 2023` is displayed. No changes are made for albums
where start and end dates do not match.
* feat(mobile): shared album activity disable handling
* not show comment/like option on non-shared album, alternative text when activity is disabled
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* 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>
* mobile: tool-tip for server url in app bar dialog
* fix: Add Inkwell around the entire profile image
* mobile: open documentation and github in browser
---------
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.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: don't reveal user count publicly
* fix: mobile and user controller
* fix: update other frontend endpoints
* fix: revert openapi change
* chore: open api
* fix: initialize
* openapi
---------
Co-authored-by: Alex Tran <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>