* refactor: user entity
* chore: rebase fixes
* refactor: remove int user Id
* refactor: migrate store userId from int to string
* refactor: rename uid to id
* feat: drift
* pr feedback
* refactor: move common overrides to mixin
* refactor: remove int user Id
* refactor: migrate store userId from int to string
* refactor: rename uid to id
* feat: user & partner sync stream
* pr changes
* refactor: sync service and add tests
* chore: remove generated change
* chore: move sync model
* rebase: convert string ids to byte uuids
* rebase
* add processing logs
* batch db calls
* rewrite isolate manager
* rewrite with worker_manager
* misc fixes
* add sync order test
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
Clear the backup detail view when no backup is in progress
* When no backup is in progress, display a simple "-" for the details in the upload file info, instead of the data of the last uploaded asset.
* This prevents confusion if a upload job is stuck or just finished.
* perf(mobile): optimize date loading with batch loading
Introduce DateBatchLoader to reduce the number of database queries by loading dates in batches, improving performance when querying large lists.
* remove unused totalCount parameter from DateBatchLoader
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
Dont show drag scroll date in search page
* When using the drag scroll, the date of the current image is shown. This is now made toggleable.
* For the mobile search result page, the display of the date is now disabled because the results are not sorted by date and therefore a display of the date is not desirable.
* fix(mobile): hide asset description text field if user is not owner
* If user is not the owner and asset has no description then hide the text field
* Apply suggestions from code review
Co-authored-by: Alex <alex.tran1502@gmail.com>
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Features: Local file movement to trash and restoration back to the album added. (Android)
* Comments fixes
* settings button marked as [EXPERIMENTAL]
* _moveToTrashMatchedAssets refactored, moveToTrash renamed.
* fix: bad merge
* Permission check and request for local storage added.
* Permission request added on settings switcher
* Settings button logic changed
* Method channel file_trash moved to BackgroundServicePlugin
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* refactor: device asset entity to use modified time
* chore: cleanup
* refactor: remove album media dependency from hashservice
* refactor: return updated copy of asset
* add hash service tests
* chore: rename hash batch constants
* chore: log the number of assets processed during migration
* chore: more logs
* refactor: use lookup and more tests
* use sort approach
* refactor hash service to use for loop instead
* refactor: rename to getByIds
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* refactor: user entity
* chore: rebase fixes
* refactor: remove int user Id
* refactor: migrate store userId from int to string
* refactor: rename uid to id
* feat: drift
* pr feedback
* refactor: move common overrides to mixin
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* feat(server): extract full-size previews from RAW images
* feat(web): load fullsize preview for RAW images when zoomed in
* refactor: tweaks for code review
* refactor: rename "converted" preview/assets to "fullsize"
* feat(web/server): fullsize preview for non-web-friendly images
* feat: tweaks for code review
* feat(server): require ASSET_DOWNLOAD premission for fullsize previews
* test: fix types and interfaces
* chore: gen open-api
* feat(server): keep only essential exif in fullsize preview
* chore: regen openapi
* test: revert unnecessary timeout
* feat: move full-size preview config to standalone entry
* feat(i18n): update en texts
* fix: don't return fullsizePath when disabled
* test: full-size previews
* test(web): full-size previews
* chore: make open-api
* feat(server): redirect to preview/original URL when fullsize thumbnail not available
* fix(server): delete fullsize preview image on thumbnail regen after fullsize preview turned off
* refactor(server): AssetRepository.deleteFiles with Kysely
* fix(server): type of MediaRepository.writeExif
* minor simplification
* minor styling changes and condensed wording
* simplify
* chore: reuild open-api
* test(server): fix media.service tests
* test(web): fix photo-viewer test
* fix(server): use fullsize image when requested
* fix file path extension
* formatting
* use fullsize when zooming back out or when "display original photos" is enabled
* simplify condition
---------
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
* chore(mobile): search field in separate widget
* fix: removed unnecessary use of context
* chore: minor styling tweak
* fix: controller not bound
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
mobile: fallback authentication client model/type to unknown
Add fallback for client model/type if device is not ios or android
Signed-off-by: Luis Garcia <git@luigi311.com>
* refactor: user entity
* chore: rebase fixes
* refactor: remove int user Id
* refactor: migrate store userId from int to string
* refactor: rename uid to id
* fix: migration
* pr feedback
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* refactor: user entity
* chore: rebase fixes
* refactor(mobile): refactor to use user service methods
* fix: late init error
* fix: lint
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* refactor: user entity
* chore: rebase fixes
* refactor(mobile): move user service to domain
* fix: timeline not visible on album selection page
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* fix(mobile): the page for adding photos to the album cannot be navigated back using gestures #16409
* First-time return gesture adds the feature to cancel all current selections
---------
Co-authored-by: ExceptionsOccur <yuyu.tao@foxmail.com>
* refactor: user entity
* fix: add users to album & user profile url
* chore: rebase fixes
* generate files
* fix(mobile): timeline not reset on login
* fix: test stub
* refactor: rename user model (#16813)
* refactor: rename user model
* simplify import
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* chore: generate files
* fix: use getAllAccessible instead of getAll
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* chore(mobile): more generated files
* ci: verify generated files in mobile are up-to-date
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* feat(web): exposed a new job to create a manual database backup
* chore(server): added a new test case
* chore(server): moved job to backup db into the create job popup
* remove irrelevant change
* openapi
* chore: formatting
* docs: trigger backup documentation
---------
Co-authored-by: Lorenzo Montanari <13736036+l0ll098@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
Co-authored-by: Zack Pollard <zack@futo.org>
immich-app/immich#16062 added manual face tagging and deletion, but did
not add a new 'SourceType'. The create faces would default to
'machine-learning' which is incorrect, and has the annoying downside
that they will be wiped when the 'Refresh Faces' job is run.
Handling of non-machine-learning faces was previously added in
immich-app/immich#6455. This PR simply extends it to the new manually
tagged faces.
* feat(mobile): photos group by date in album page view
* fix: format
---------
Co-authored-by: ExceptionsOccur <yuyu.tao@foxmail.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* ci: print out typeorm generation changes
* feat: sync implementation for the user entity
wip
---------
Co-authored-by: Jason Rasmussen <jason@rasm.me>
* Add rating to search DTO
* Add search by EXIF rating in search query builder
* Generate OpenAPI spec
* Add rating filter on web
* Add rating filter to search docs
* Format / lint
* Hide rating filter if ratings are disabled
* chore: component order in form
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
Fixing the server endpoint on the login screen. It added the "/api" suffix instead of using the default method getServerUrl, which takes care of sanitizing the URL.
Co-authored-by: Joao Paulo Ros <ros@voxit.ai>
* feat: added ability to mark people as favorite, which get sorted to the front of the people list
* feat(server): added unit test for favorite people
* feat(server): refactored for better readability
* fixed person service unit tests
* fixed open-api and sql checks
* fixed bad codegen and removed unnecessary type assertion again
* chore: clean up
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
* Update current asset to play video.
* Updated location of currentAssetProvider update per feedback.
* Added a playbackDelayFactor to the video viewer to resolve an issue in memories.
Also adjusted the scale of the memory preview image to match the ratio of the video. This still appears to jump because the video preview doesn't seem to be the first frame for some reason :\
* add video indicator
---------
Co-authored-by: Tom graham <tomg@questps.com.au>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix(mobile): improved the visibility of backup cloud icon on lighter images
* refactor(mobile): add 'const' keyword to Offset constructor for improved performance
* fix(album-viewer): retain edited title when album updates
ensure `AlbumViewerEditableTitle` keeps user input while editing,
even when the album updates from another provider. fall back to
`albumName` only when not in edit mode.
* linting
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
- Fix missing timezones
- Remove the UTC prefix from timezone display text to align with web app
- Remove unnecessary layout builder
- Created a custom `DropdownSearchMenu` widget
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Initial look at fixing issue where images are uploaded to the wrong album if a shared album conflicts with a local users album.
* Use owner instead of shared flag when fetching albums.
* Fix issue with refreshRemoteAlbums getting shared items twice and removed incorrect isShared comment.
Using `getAll(shared: true)` gets all shared albums the user can access (regardless of owner, despite the previous comment).
Using `getAll(shared: null)` gets all albums (incuding shared = true and shared = false). I presume the intent here was to get albums that were shared (and not mine), and not shared (ie: mine), but the logic is way off. It also just then combines them - so makes more sense to just get them in a single call.
* Fix formatting.
* Fixed tests.
* Revert "Fixed tests."
This reverts commit c38f5af5acfc38444b00ed716755c241d297216a.
* Revert "Fix issue with refreshRemoteAlbums getting shared items twice and removed incorrect isShared comment."
This reverts commit 979ce90abf22c6cd80ff06f61a08d0c03092991b.
* Added comments to explain why filters behave the way they do for getAll() albums.
---------
Co-authored-by: Tom graham <tomg@questps.com.au>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* setup ios
* chore: succesfully sent media to the app
* share from Android
* wip: navigate to share screen
* wip: UI for displaying upload candidate
* wip: logic
* wip: upload logic
* wip: up up up we got it up
* wip
* wip
* wip
* upload state
* feat: i18n
* fix: release build ios'
* feat: clear file cache
* pr feedback
* using const for checking download status
---------
Co-authored-by: Alex <alex@pop-os.localdomain>
* auth
* URL switch
* mobile app
* caps
* headers, app changes
* oxford comma
* Match case to other use in Immich
* add url
* asset download also causes issues
* fix(mobile): fix text search
* chore(mobile): add tests for SearchPage
* fix(mobile): fix render overflow for small screens
Needed for SearchPage test to not throw overflow error
* chore(mobile): update import_rule_openapi
* styling
* preserve styling and skip a test
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix(deps): update dependency @nestjs/swagger to v8
* chore: generate open api
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
* feat(mobile): album view sort order
* feat: add error message
* refactor(mobile): album page (#14659)
* refactor album page
* update lint rule
* const record
* fix: updating sort order when pull to refresh
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Move sort toggle button to bottom sheet menu
* chore: revert multiselectgrid loading status
* chore: revert multiselectgrid loading status
---------
Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
* Merge Faces sorted by Similarity
* Adds face sorting to the side panel face merger
* run make open-api
* Make it one query
* Only have the single order by when sorting by closest face
* add native player library
* splitup the player
* stateful widget
* refactor: native_video_player
* fix: handle buffering
* turn on volume when video plays
* fix: aspect ratio
* fix: handle remote asset orientation
* refinements and fixes
fix orientation for remote assets
wip separate widget
separate video loader widget
fixed memory leak
optimized seeking, cleanup
debug context pop
use global key
back to one widget
fixed rebuild
wait for swipe animation to finish
smooth hero animation for remote videos
faster scroll animation
* clean up logging
* refactor aspect ratio calculation
* removed unnecessary import
* transitive dependencies
* fixed referencing uninitialized orientation
* use correct ref to build android
* higher res placeholder for local videos
* slightly lower delay
* await things
* fix controls when swiping between image and video
* linting
* extra smooth seeking, add comments
* chore: generate router page
* use current asset provider and loadAsset
* fix stack handling
* improved motion photo handling
* use visibility for motion videos
* error handling for async calls
* fix duplicate key error
* maybe fix duplicate key error
* increase delay for hero animation
* faster initialization for remote videos
* ensure dimensions for memory cards
* make aspect ratio logic reusable, optimizations
* refactor: move exif search from aspect ratio to orientation
* local orientation on ios is unreliable; prefer remote
* fix no audio in silent mode on ios
* increase bottom bar opacity to account for hdr
* remove unused import
* fix live photo play button not updating
* fix map marker -> galleryviewer
* remove video_player
* fix hdr playback on android
* fix looping
* remove unused dependencies
* update to latest player commit
* fix player controls hiding when video is not playing
* fix restart video
* stop showing motion video after ending when looping is disabled
* delay video initialization to avoid placeholder flicker
* faster animation
* shorter delay
* small delay for image -> video on android
* fix: lint
* hide stacked children when controls are hidden, avoid bottom bar dropping
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
* feat(server): Add publicUsers toggle for user search
* tests
* docs: add check:typescript for web PR checklist
* return auth.user when publicUsers is false - app testing
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix(mobile): make widgets rebuild on locale changes
This will make the make the pages to instantly refresh the correct
translated string, without the need to pop and push the settings page.
* fix(mobile): set the default intl locale
This is needed because across the app, you don't pass the context.locale
to DateFormat, so by default it uses the system's locale. This will fix
the issue without the need to refactor a lot of code.
* feat(mobile): create localeProvider
This provider can be used to refresh providers that provide UI elements
and get cached.
* fix(mobile): refresh asset providers on locale change
This is necessary to update the locale on the already evaluated
DateFormat.
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat(mobile): create localeProvider
This provider can be used to refresh providers that provide UI elements
and get cached.
* feat(mobile): use default font for locales not supported by Overpass
* chore(mobile): fix test
* refactor(mobile): use Locale instead of String
* chore(mobile): make all search filters dismissible
* chore(mobile): make ImmichAppBarDialog dismissible
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* use sets in album sync, concurrent futures
* batch excluded asset IDs
* update test
* take advantage of sets in Recents check
* move log statement
* smaller diff
* expose detailed user storage stats + display them in the storage per user table
* chore: openapi & sql
* fix: fix test stubs
* fix: formatting errors, e2e test and server test
* fix: upper lower case typo in spec file
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fixed the local ids selecting issue
* code: updated impl inside deleteLocalOnlyAssets
* fix: used png instead of jpg to maintain picture quality
* Revert "fix: used png instead of jpg to maintain picture quality"
This reverts commit 04f2ed54e40b454a057f97872836d71af50b06de.
* fix: update logic from code-review perspective
* refractor (mobile) : Dart fix applied
* fix (mobile) : Updated multi grid as per requirement
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* refactor(mobile): DB repository for asset, backup, sync service
* review feedback
* fix bug found by Alex
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* add packages
* create download task
* show progress
* save video and image
* show progress info
* live photo wip
* download and link live photos
* Update list of assets
* wip
* correct progress
* add state to download
* revert unncessary change
* repository pattern
* translation
* remove unused code
* update method call from repository
* remove unused variable
* handle multiple livephotos download
* remove logging statement
* lint
* not removing all records
* feat: metadata in UserPreference
* feat: web metadata settings
* feat: web metadata settings
* fix: typo
* patch openapi
* fix: missing translation key
* new organization of preference strucutre
* feature settings on web
* localization
* added and used feature settings
* add default value to response dto
* patch openapi
* format en.json file
* implement helper method
* use tags preference logic
* Fix logic bug and add tests
* fix preference can be null in detail panel
* feat: tags
* fix: folder tree icons
* navigate to tag from detail panel
* delete tag
* Tag position and add tag button
* Tag asset in detail panel
* refactor form
* feat: navigate to tag page from clicking on a tag
* feat: delete tags from the tag page
* refactor: moving tag section in detail panel and add + tag button
* feat: tag asset action in detail panel
* refactor add tag form
* fdisable add tag button when there is no selection
* feat: tag bulk endpoint
* feat: tag colors
* chore: clean up
* chore: unit tests
* feat: write tags to sidecar
* Remove tag and auto focus on tag creation form opened
* chore: regenerate migration
* chore: linting
* add color picker to tag edit form
* fix: force render tags timeline on navigating back from asset viewer
* feat: read tags from keywords
* chore: clean up
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* Add proper colors to create album button
Allow creation of empty albums with names, or non-empty albums without names
* Add proper colors to create album button
Allow creation of empty albums with names, or non-empty albums without names
* Small changes
* Revert change
* Simplify logic
* lint
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* add root resource path '/' to mobile oauth scheme
* chore: add oauth-callback path
* add root resource path '/' to mobile oauth scheme
* chore: add oauth-callback path
* fix: make sure there are three forward slash in callback URL
---------
Co-authored-by: Jason Rasmussen <jason@rasm.me>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* curating assets with albums to upload
* sorting for background backup
* background upload works
* transform fields string array to javascript array
* send json array
* generate sql
* refactor upload callback
* remove albums info from upload payload
* mechanism to create album on album selection
* album creation
* Sync to upload album
* Remove unused service
* unify name changes
* Add mechanism to sync uploaded assets to albums
* Put add to album operation after updating the UI state
* clean up
* background album sync
* add to album in background context
* remove add to album in callback
* refactor
* refactor
* refactor
* fix: make sure all selected albums are selected for building upload candidate
* clean up
* add manual sync button
* lint
* revert server changes
* pr feedback
* revert time filtering
* const
* sync album on manual upload
* linting
* pr feedback and proper time filtering
* wording
* fix(web): align search filter behavior to show all camera models
* fix(mobile): align search filter behavior to clear camera model when make is set
* (mobile) correctly clear the model controller
* fix(mobile) re-add text controller to dropdown
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Fix null name
* Fix null name and Fix button
* Remove extension correctly
* Refactoring the code and formatting
* formatting
* Fix for the extension name
* feat: folder view poc
* fix(folder-view): ui modifications
* fix(folder-view): improves utility return types
* fix(folder-view): update getAssetsByOriginalPath
Endpoint now only returns direct children of the path instead of all images in all subfolders. Functions renamed and scoped to "folder", endpoints renamed
* fix(folder-view): improve typing
* fix(folder-view): replaces css with tailwind
* fix(folder-view): includes folders in main panel
* feat(folder-view): folder cache implementation
* fix(folder-view): can now search for absolute paths
* fix(folder-view): sets default sort to alphabetical by filename
* refactor/styling the browser view
* double click to navigate
* folder tree
* use correct side bar icon
* styling when selected
* correct open icon
* folder layout
* return assetReponseDto
* it's alive
* update new api
* more styling for folder tree
* use query params and path viewer
* use arrow up left for parent folder backward navigation
* use arrow up left for parent folder backward navigation
* encode URL
* handle long folder name
* refactor to the view controller
* remove unused code
* clear cache when logout
* cleaning up
* cleaning up web
* clean as new
* clean as new
* pr feedback + show asset name
* add tests
* add tests
* remove generated file
* lint
* revert docker-compose.dev file
* Update server/src/services/view.service.ts
Co-authored-by: Jason Rasmussen <jason@rasm.me>
* Update server/src/services/view.service.ts
Co-authored-by: Jason Rasmussen <jason@rasm.me>
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
* refactor: stacks
* mobile: get it built
* chore: feedback
* fix: sync and duplicates
* mobile: remove old stack reference
* chore: add primary asset id
* revert change to asset entity
* mobile: refactor mobile api
* mobile: sync stack info after creating stack
* mobile: update timeline after deleting stack
* server: update asset updatedAt when stack is deleted
* mobile: simplify action
* mobile: rename to match dto property
* fix: web test
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Add Exif-Rating
* Integrate star rating as own component
* Add e2e tests for rating and validation
* Rename component and async handleChangeRating
* Display rating can be enabled in app settings
* Correct i18n reference
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
* Star rating: change from slider to buttons
* Star rating for clarity
* Design updates.
* Renaming and code optimization
* chore: clean up
* chore: e2e formatting
* light mode border and default value
---------
Co-authored-by: Christoph Suter <christoph@suter-burri.ch>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* feat: keep screen active on backup
* show dialog
* improve dialog and use shared timer
* get rid of confirmation dialog
* fix timer logic
* fix: set timeout to 60 seconds
* fix: revert unwanted change
* fix: properly hide status bar
* remove unwanted change
* fix: properly restore status bar when waking up
* clean up
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* date time component
* rename to info_sheet
* simplify map info
* Edit datetime sheet
* fix janking when scroll on info sheet
* Location refactor
* refactor name
* Update date time after editing
* localize rebuild to smaller component
* restore advanced bottom sheet
* reassign EXIF back to local database
* remove print statements
* chore(server): remover get person asset limit
* sql
* remove getPersonAsset endpoint
* remove getPersonAsset endpoint
* use search endpoint to get people
* fix: server test
* mobile linter
* fix: server test
* remove debuglog
* deprecated endpoint
* change page size on mobile
* revert max size
* fix test
* feat(mobile): add support for material themes
Added support for custom theming and updated all elements accordingly.
* fix(mobile): Restored immich brand colors to default theme
* fix(mobile): make ListTile titles bold in settings main page
* feat(mobile): update bottom nav and appbar colors
* small tweaks
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Allow submission of null country
* Update searchAssetBuilder to handle nulls
andWhere({country:null}) produces `"exifInfo"."country" = NULL`. We want
`"exifInfo"."country" IS NULL`, so we have to treat NULL as a special
case
* Allow null country in frontend
* Make the query code a bit more straightforward
* Remove unused brackets import
* Remove log message
* Don't change whitespace for no reason
* Fix prettier style issue
* Update search.dto.ts validators per @jrasm91's recommendation
* Update api types
* Combine null country and state into one guard clause
* chore: clean up
* chore: add e2e for null/empty city, state, country search
* refactor: server returns suggestion for null values
* chore: clean up
---------
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
* fix(mobile): refactor splash screen to not require online connection
* chore: bump flutter sdk path for vscode
* refactor: authentication provider always try network calls and only fail if 401 or no local user
* lint
* fix: revert change to lookup serverendpoint from store the isar store implementation is very broken
* fix: clear serverUrl and serverEndpoint on logout, and await logout call
* refactor: remove unneeded extra conditions in splash screen useEffect
* revert change to remove serverEndpoint on logging out
* pr feedback
---------
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
* Added Crop Feature
* Using LayoutBuilder Fix
* Using Immich Colors
* Using Immich Text Theme
* Chnaging dynamic datatype to nullable
* Fix for the retrivel of the image from the cropscreen
* Using Hooks State
* Small edits
* Finals edits
* Saving to the mobile
* Commented final code
* Commented final code
* Comments and AutoRoute
* Fix AutoRoute Final
* Naming tools and Action when made no edits
* Updating timeline after edit
* chore: lint
* format
* Light Mode Compatible
* fix duplicate page name
* Fix Routing
* Hiding the Button
* lint
* remove unused code
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat: people infinite scroll
* add infinite scroll to show & hide modal
* update unit tests
* show total people count instead of currently loaded
* update personsearchdto
* fix(mobile): upgrade maplibre_gl package to fix issue with crash in ios7.4 above simulator
* chore: switch from deprecated widget and controller name to new name in latest sdk
* remove todo
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix: invalidate asset's description when asset details changed
* refactor(exif-sheet): use description from exif instead
* refactor(asset-description): remove asset_description.provider
* fix(asset-description): set is empty based on exifInfo.description
* chore: rename service to provider
* chore(server): optional originalMimeType in asset response payload
* lint
* Update web/src/lib/utils/asset-utils.ts
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
* fix permission of shared link
* test
* test
* test
* test server
---------
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>