* fix(mobile): remove dialog wrapper around share asset
* removed from multiple share and delete share dialog class
* Revert change to ShareDialog and useRootNavigator: false for showDialog
* Add a user setting for default album sort order.
Add a user setting under "Features" to control the initial sort order
when creating an album. Default to the existing behavior of
"newest first".
* chore: patch openapi
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* fix: regression: sort day by fileCreatedAt again
* lint
* e2e test
* inline function
* e2e
* Address comments. Drop dayGroup and timezone in favor of localOffsetMinutes
* lint and some api-doc
* lint, more api-doc
* format
* Move minutes to fractional hours
* make sql
* merge/conflict
* merge fallout, review comments
* spelling
* drop offset from returned date
* move description into decorator where possible, regen api
* feat: display number of likes
* fix: properly decrement like count on unlike
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
* chore: pr feedback
* chore: updated related test
* chore: formatter run
* chore: force numberOfLikes to null in album context to pass lint
* chore: open-api updated
* fix: use undefined, not null
* styling tweaks
* chore: updated sql
---------
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* feat(mobile): add album description functionality
- Introduced a new optional `description` field in the `Album` entity.
- Updated `AlbumViewerPageState` to manage `editDescriptionText`.
- Created `AlbumDescription` and `AlbumViewerEditableDescription` widgets for displaying and editing album descriptions.
- Enhanced `CreateAlbumPage` to include a description input field.
- Implemented backend support for updating album descriptions in `AlbumApiRepository` and `AlbumService`.
- Updated sync logic to handle album descriptions during data synchronization.
- Adjusted UI components to accommodate the new description feature.
* fix dart analysis error
* remove comment that shouldn't be there
* Album header styling
* fix: disable edit after album creation
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat(mobile): add bulk download functionality and update UI messages
- Added `downloadAll` method to `IDownloadRepository` and its implementation in `DownloadRepository` to handle multiple asset downloads.
- Implemented `downloadAllAsset` in `DownloadStateNotifier` to trigger bulk downloads.
- Updated `DownloadService` to create download tasks for all selected assets.
- Enhanced UI with new download success and failure messages in `en.json`.
- Added download button to `ControlBottomAppBar` and integrated download functionality in `MultiselectGrid`.
* translations use i18n method t()
* Update mobile/lib/services/download.service.dart
Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>
* fix(mobile): update download logic in DownloadService
- Changed the download method to utilize downloadAll for handling multiple tasks.
- Simplified remoteId check by removing unnecessary condition.
* sort i18n keys
* remove the download signature from interface and logic as we use the downloadAll now
---------
Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>
fix(mobile): prevent upload intent replacement in splash screen
- Added a check in the SplashScreenPage to ensure that the route is only replaced when it's not a share intent
- Added lifecycle event to reset the isUpload.value when minimize the app
* improve language ui
* fix lint
* add search language, add safe area, fix button in dark
* hide apply button when search not found
---------
Co-authored-by: dvbthien <dvbthien@gmail.com>
* wip
* added user metadata key
* wip
* restructure onboarding system and add initial locale
* update language card and fix translation updating
* remove prints
* new card formattings
* fix cursed unmount effect
* add OAuth route onboarding
* remove required admin auth for onboarding
* delete the hotwire button
* update open-api files
* delete import
* fix failing oauth onboarding fields
* fix e2e test
* fix web e2e test
* add onboarding to user registration e2e test
* remove todo
this was a holdover during dev and didn't get deleted
* fix server small tests
* use onDestroy to save settings rather than a bind:this
* change to false for isOnboarded
* fix other auth small test
* provide type annotation in user factory metadata field
* remove onboardingCompelted from UserDto
* move translations to onboarding steps array and mark as derived so they update
* break language selector out into its own component as per @danieldietzler suggestion
* remove hello header on card
* fix flixkering on server privacy card
* label/id fixes
* openapi
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* Update locked folder text and remove unused translations
* uppercase Locked folder in Menu
* convert some translates to icu and improve
* add iOS debug info translations for background processes
* fix lint
---------
Co-authored-by: dvbthien <dvbthien@gmail.com>
* feat: delta sync
* fix: ignore iCloud assets
* feat: dev logs
* add full sync button
* remove photo_manager dep for sync
* misc logs and fix
* add time taken to DLog
* fix: build release iOS
* ios sync go brrr
* rename local sync service
* update isar fork
* rename to platform assets / albums
* fix ci check
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Change photo zoom logic
To properly zoom to current position and pan at the correct speed
TODO: zoom to current pinch position
* zoom to current pinch position
* Clean unused variable
* Formatting
* fix: lint
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* add setting switch
this isnt bound to anything yet
* make google casting opt-in
* doc updates
* lint docs
* remove unneeded translation items
* update mobile openai defs
* fix failing test
we need to mock user prefs since CastButton uses it
* feat: api access control
* feat(web): granular api access controls
* fix test
* fix e2e test
* fix: lint
* pr feedback
* merge main + new design
* finalize styling
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Add class to apply SSL options
* Apply client certificate for native Android code
* Refactor self-signed check
* Allow self-signed certificates
* Fix Dart analysis
* Add HostnameVerifier
Android explicitly does NOT check the Common Name of a certificate,
only the Subject Alt Names. Chances are that someone who self-signs a
certificate doesn't go through the extra steps to add a SAN, and in
that case the connection would be prevented by the HostnameVerifier
even thought the TrustManager was fine with the certificate itself.
* Rename parameter like in Dart
* Fix NPE
* Catch all native errors in HttpSSLOptionsPlugin
* Workaround for too early onChanged() callback
* Fix formatting
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat: private view
* pr feedback
* sql generation
* feat: visibility column
* fix: set visibility value as the same as the still part after unlinked live photos
* fix: test
* pr feedback
* Remove small thumbnail and cache generated thumbnails
* Creating the small thumbnails takes quite some time, which should not be underestimated.
* The time needed to generate the small or big thumbnail is not too different from each other. Therefore there is no real benefit of the small thumbnail and it only adds frustration to the end user experience. That is because the image appeared to have loaded (the visual move from blur to something better) but it's still so bad that it is basically a blur. The better solution is therefore to stay at the blur until the actual thumbnail has loaded.
* Additionaly to the faster generation of the thumbnail, it now also gets cached similarly to the remote thumbnail which already gets cached. This further speeds up the all over usage of the app and prevents a repeatet thumbnail generation when opening the app.
* Decreased the quality from the default 95 to 80 to provide similar quality with much reduces thumbnail size.
* Use try catch around the read of the cache file.
* Use the key provided in the loadImage method instead of the asset of the constructor.
* Use userId instead of ownerId
* Remove import
* Add checksum to thumbnail cache key
* fix: ensure oauth state param matches before finishing oauth flow
Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>
* chore: upgrade openid-client to v6
Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>
* feat: use PKCE for oauth2 on supported clients
Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>
* feat: use state and PKCE in mobile app
Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>
* fix: remove obsolete oauth repository init
Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>
* fix: rewrite callback url if mobile redirect url is enabled
Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>
* fix: propagate oidc client error cause when oauth callback fails
Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>
* fix: adapt auth service tests to required state and PKCE params
Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>
* fix: update sdk types
Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>
* fix: adapt oauth e2e test to work with PKCE
Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>
* fix: allow insecure (http) oauth clients
Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>
---------
Signed-off-by: Tin Pecirep <tin.pecirep@gmail.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
Remove loading of thumbnail in the image provider
* Removed the load of the thumbnail from the local and remote image provider as they shall provide the image, not the thumbnail. The thumbnail gets provided by the thumbnail provider.
* The thumbnail provider is used as the loadingBuilder and the image provider as the imageProvider. Therefore loading the thumbnail in the image provider loads it a second time which is completely redundant, uses precious time and yields no results.
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Revert "fix(mobile): use immutable cache keys for local images (#17736)"
This reverts commit 010b144754.
* Revert "perf(mobile): remove small thumbnail and cache generated thumbnails (#17682)"
This reverts commit b71039e83c.
* Remove small thumbnail and cache generated thumbnails
* Creating the small thumbnails takes quite some time, which should not be underestimated.
* The time needed to generate the small or big thumbnail is not too different from each other. Therefore there is no real benefit of the small thumbnail and it only adds frustration to the end user experience. That is because the image appeared to have loaded (the visual move from blur to something better) but it's still so bad that it is basically a blur. The better solution is therefore to stay at the blur until the actual thumbnail has loaded.
* Additionaly to the faster generation of the thumbnail, it now also gets cached similarly to the remote thumbnail which already gets cached. This further speeds up the all over usage of the app and prevents a repeatet thumbnail generation when opening the app.
* Decrease quality and use try catch
* Decreased the quality from the default 95 to 80 to provide similar quality with much reduces thumbnail size.
* Use try catch around the read of the cache file.
* Replace ImmutableBuffer.fromUint8List with ImmutableBuffer.fromFilePath
* Removed unnecessary comment
* Replace debugPrint with log.severe for catch of error
---------
Co-authored-by: Alex <alex.tran1502@gmail.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
* 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>
* fix(server,mobile): proper asset sync
* fix CI issues
* only use id instead of createdAt+id
* remove createdAt index
* fix typo
* cleanup createdAt usage
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* added unassigned faces to people edit
* svelte fix
* fix format
* Captialized unassigned person name, removed person id from alttext, fixed problem with multiple faces per person
* Added faces to the getAssetInfo API endpoint
* Updated openApi clients
* Readded the photoeditor dependency
* fixed lint/format
* fixed photoViewer type
* changes getAssetInfo.faces to only include unassigned faces
* fix: bad merge
* title
* logic
---------
Co-authored-by: Jan108 <dasJan108@gmail.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* refactor: asset media endpoints
* refactor: mobile upload livePhoto as separate request
* refactor: change mobile backup flow to use new asset upload endpoints
* chore: format and analyze dart code
* feat: mark motion as hidden when linked
* feat: upload video portion of live photo before image portion
* fix: incorrect assetApi calls in mobile code
* fix: download asset
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
* move markers and style to dedicated map endpoint
* chore: open api
* chore: clean up repos
---------
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
* refactor(server): user endpoints
* feat(server): user preferences
* mobile: user preference
* wording
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Animated out top bar added, currenlty need to move up current app bar as it is too far down
* album viewer appBar animates out and does not cause screen shift
* Formatting
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* refactor(server): user endpoints
* fix repos
* fix unit tests
---------
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* duplicate detection job, entity, config
* queueing
* job panel, update api
* use embedding in db instead of fetching
* disable concurrency
* only queue visible assets
* handle multiple duplicateIds
* update concurrent queue check
* add provider
* add web placeholder, server endpoint, migration, various fixes
* update sql
* select embedding by default
* rename variable
* simplify
* remove separate entity, handle re-running with different threshold, set default back to 0.02
* fix tests
* add tests
* add index to entity
* formatting
* update asset mock
* fix `upsertJobStatus` signature
* update sql
* formatting
* default to 0.03
* optimize clustering
* use asset's `duplicateId` if present
* update sql
* update tests
* expose admin setting
* refactor
* formatting
* skip if ml is disabled
* debug trash e2e
* remove from web
* remove from sidebar
* test if ml is disabled
* update sql
* separate duplicate detection from clip in config, disable by default for now
* fix doc
* lower minimum `maxDistance`
* update api
* Add and Use Duplicate Detection Feature Flag (#9364)
* Add Duplicate Detection Flag
* Use Duplicate Detection Flag
* Attempt Fixes for Failing Checks
* lower minimum `maxDistance`
* fix tests
---------
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
* chore: fixes and additions after rebase
* chore: update api (remove new Role enum)
* fix: left join smart search so getAll works without machine learning
* test: trash e2e go back to checking length of assets is zero
* chore: regen api after rebase
* test: fix tests after rebase
* redundant join
---------
Co-authored-by: Nicholas Flamy <30300649+NicholasFlamy@users.noreply.github.com>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
Co-authored-by: Zack Pollard <zack@futo.org>
* First version of video looping for the web
* Use prop for slideshow state
* refactor asset settings and add autoloop video setting
* rename variables and adjust description
* loop videos based on user settings in gallery viewer
* make asset viewer setting a stateless widget
* do not update video playback value if looping is enabled
* add some translations
* adjust description
* add missing id
* WIP
* chore: clean up
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
* feat(mobile): use efficient sync
review feedback
* adapt to changed server endpoints
* formatting
* fix memory lane bug
* fix: bad merge
* fix call not returning correct number of asset
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* feat(server, web): include pictures of shared albums on map
* run prettier
* re-create api clients
* implement suggestions from code review
* shared from partner -> shared from partners
* rename to 'include shared partner assets'
* chore: fix tsc error in server and prettier in web
* fix: include assets shared via owner albums
---------
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
* set derived inputs as null if source input changes
* format
---------
Co-authored-by: Tushar Harsora <tushar.harsora.harsora@oracle.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* refactor: remove isReadOnly and isExternal usages
* chore: open api
* fix: linting
* remove mobile isReadOnly dependency
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* feat(server): add `react-mail` as mail template engine and `nodemailer`
* feat(server): add `smtp` related configs to `SystemConfig`
* feat(web): add page for SMTP settings
* feat(server): add `react-email.adapter`
This adapter render the React-Email into HTML and plain/text email.
The output is set as the body of the email.
* feat(server): add `MailRepository` and `MailService`
Allow to use the NestJS-modules-mailer module to send SMTP emails.
This is the base transport for the `NotificationRepository`
* feat(server): register the job dispatcher and Job for async email
This allows to queue email sending jobs for the `EmailService`.
* feat(server): add `NotificationRepository` and `NotificationService`
This act as a middleware to properly route the notification to the right transport.
As POC I've only implemented a simple SMTP transport.
* feat(server): add `welcome` email template
* feat(server): add the first notification on `createUser` in `UserService`
This trigger an event for the `NotificationRepository` that once processes
by using the global config and per-user config will carry the payload to the right notification transport.
* chore: clean up
* chore: clean up web
* fix: type errors"
* fix package lock
* fix mail sending, option to ignore certs
* chore: open api
* chore: clean up
* remove unused import
* feat: email feature flag
* chore: remove unused interface
* small styling
---------
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fix(server): stacked assets for full sync, userIds as array for delta sync
* refactor(server): sync
* fix getDeltaSync after partner removal
---------
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Add Toast for download started
Add Toast notification for mobile download started.
Added new placeholder in each language file - populated with best estimate translations.
* fix:(mobile): spell error in top_control_app_bar.dart in function buildAddToAlbumButtom
* fix(mobile): add restore button to individual image view of trashed assets
* formatting
* Fixes equality operator for immich local image provider
* Changes image cache manager to no longer be image cache managers
* Updates large image cache to 12 images
format
* Try 5 Image cache
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* rename albums_shared_users_users to album_permissions and add readonly column
* disable synchronize on the original join table
* remove unnecessary FK names
* set readonly=true as default for new album shares
* separate and implement album READ and WRITE permission
* expose albumPermissions on the API, deprecate sharedUsers
* generate openapi
* create readonly view on frontend
* ??? move slideshow button out from ellipsis menu so that non-owners can have access too
* correct sharedUsers joins
* add album permission repository
* remove a log
* fix assetCount getting reset when adding users
* fix lint
* add set permission endpoint and UI
* sort users
* remove log
* Revert "??? move slideshow button out from ellipsis menu so that non-owners can have access too"
This reverts commit 1343bfa31125f7136f81db28f7aa4c5ef0204847.
* rename stuff
* fix db schema annotations
* sql generate
* change readonly default to follow migration
* fix deprecation notice
* change readonly boolean to role enum
* fix joincolumn as primary key
* rename albumUserRepository in album service
* clean up userId and albumId
* add write access to shared link
* fix existing tests
* switch to vitest
* format and fix tests on web
* add new test
* fix one e2e test
* rename new API field to albumUsers
* capitalize serverside enum
* remove unused ReadWrite type
* missed rename from previous commit
* rename to albumUsers in album entity as well
* remove outdated Equals calls
* unnecessary relation
* rename to updateUser in album service
* minor renamery
* move sorting to backend
* rename and separate ALBUM_WRITE as ADD_ASSET and REMOVE_ASSET
* fix tests
* fix "should migrate single moving picture" test failing on European system timezone
* generated changes after merge
* lint fix
* fix correct page to open after removing user from album
* fix e2e tests and some bugs
* rename updateAlbumUser rest endpoint
* add new e2e tests for updateAlbumUser endpoint
* small optimizations
* refactor album e2e test, add new album shared with viewer
* add new test to check if viewer can see the album
* add new e2e tests for readonly share
* failing test: User delete doesn't cascade to UserAlbum entity
* fix: handle deleted users
* use lodash for sort
* add role to addUsersToAlbum endpoint
* add UI for adding editors
* lint fixes
* change role back to editor as DB default
* fix server tests
* redesign user selection modal editor selector
* style tweaks
* fix type error
* Revert "style tweaks"
This reverts commit ab604f4c8f3a6f12ab0b5fe2dd2ede723aa68775.
* Revert "redesign user selection modal editor selector"
This reverts commit e6f344856c6c05e4eb5c78f0dffb9f52498795f4.
* chore: cleanup and improve add user modal
* chore: open api
* small styling
---------
Co-authored-by: mgabor <>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* implemented jump to date from memory
* Changed implementation to a ValueNotifier & fixes
* remove debug code
* feat(mobile):
- Added index bound checks
- Handled edge cases when scrolling to the very bottom of the grid-view
- removing the listener on dispose
* feat(mobile): fixed debug index offset & added debug toast for scroll errors
* feat(mobile): added more debug toasts...
* feat(mobile): scroll to month, if timeline is not grouped by days
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* Create zh-TW.json for Traditional Chinese Language Support
zh-TW for Traditional Chinese (Used in Taiwan and Hong Kong)
* Update zh-TW.json for missed translation.
Update missed translation at line 25.
* add zh-TW to localizely
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Check that server is reachable before starting backup work
* Fix iOS not starting background service
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fix: Removes old IMMICH text from the mobile settings modal
Removed old Snowburst One font from the pubspec
Removes SnowburstOne.ttf file
* Uses immich text now
* Add AV1 transcoding support
- AV1 encoding on CPU via SVT-AV1 (libsvtav1 in ffmpeg)
- Supports CRF and optionally capped CRF (max bitrate)
- Tested playback successfully in Chrome Win+Android, Firefox Win+Linux, Android app
* AV1: Add support for encoding threads option
* Revert previous commit; specifying params multiple times is bad
We need to specify all svtav1-params at once, so putting the thread option into getThreadOptions is not possible.
* AV1: Override VAAPI getSupportedCodecs as it does not yet support AV1 unlike nvenc, qsv, amf
* Change BaseHWConfig supported codecs to only H264/HEVC
Configs that support VP9 and/or AV1 need to override getSupportedCodecs()
* Set SVT-AV1 threads with svtav1-params, remove duplicate block in NVENCConfig
* AV1Config: Fix empty svtav1-params array being added to options
* add tests
* update api
* allow crf-based two-pass mode
* formatting
* suggest 35
---------
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
* add longer expirity for share link
* add longer expirity for web UI, add months and year option, add translation
* dart format
---------
Co-authored-by: NAGY Akos (external) <akos.nagy@frequentis.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat(mobile): select locale in the mobile app
* add additional locale
* use the same locale variable across the app
* using different data structure
* drop down with button
* update pull locales
* open app ios
* remove dependency
* format fix
* Use new logo for Android monochrome adaptive icon
* Use new logo for Android adaptive icon
* Add Android monochrome adaptive icon
* Remove ic_launch_foreground.png from drawable res
- The mipmap res directories have an ic_launcher.png file that will be used on versions lower than 26
- The adaptive icon will be used over versions 26 and above
* Bump to Flutter 3.19.0
* Ran pub upgrade --major-versions and removed isar_version alias
Wrong http version
* Updated share_plus to fix android build
* Updates github actions to 3.19.0
* upgrade to 3.19.3
* upgrade to 3.19.3
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* feat(mobile): include album with 0 assets as album option for backup
* Show icon instead of thumbnail
* Handle backupProgress state transition correctly to always load the backup info
* remove todo comment
* Fixes remote full / thumbnail provider
* Adds image cache manager to both remote image providers
format
format
Fix typo in equals
remove unused import
renames image loader
* Adds height and width to the image cache for thumbs
format
* Uses a separate remote and thumbnail cache
format
* Fixes key name
* Changes uri to string, fixes comment
* Chunk events are optional and remote thumbnails don't report chunk events
* better exception handling
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* feat(mobile): Adds file upload progress stats: current upload file size uploaded, current file size and formatted bytes per second upload speed. Closes#7379
* chore(mobile): Fix stan issues
* chore(mobile): Remove non-'en-US' translations, as I saw on another PR review (just looking around) that localisation is done via Localizely and this was the instruction (to only provide the en-US localisation).
* fix(mobile): Provide boundary checks to ensure overflow issues are accounted for on erroneous upload speed calculation, sometimes the numbers received back from the upload handler can be a bit wild.
* fix(mobile): Some heuristic bug fixing. Whilst thinking what could trigger overflow issues or 'zero' readouts, left over values from the previous file may do that. So adding the last upload sent bytes to the values to be reset may help! The time isn't necessary, as the period/cycle is inconsequential in this circumstance, well it should be anyway.
* fix(mobile): Actually, in combination to the last commit, some more heuristic bug fixing. I was thinking it would be advantageous not to reset the update time, as it would trigger a quicker first upload speed calculation. However, I realised that could also cause the calculation to be incorrect on the first cycle as the period wouldn't align. Not really sure if it would be a big deal, but I'm taking wild guesses in the dark here. Again, some purely heuristic debugging as I can't re-produce the underlying issue. This is mainly just ensuring that the state is fully reset and is a known state at the beginning of each file as a common strategy to reduce issues.
* refactor(mobile): Move the UI for the file progress to underneath the progress bar, it makes more sense there than in the file information table which contains only static information pertaining to the file itself. Switching to a monospace font to keep the UI from jumping around as the numbers change.
* refactor(mobile): In order to have the UI always present an 'active' upload speed (as per the discussion on PR #7760), this stores the 'upload speeds' (capped at the latest 10) in a list and calculates the current upload speed as the average over them. This way the UI can always display a 'constant' upload speed during uploading, instead of starting a fresh when each file starts uploading. Limiting it to the 10 latest keeps the average somewhat recent and ensures some level of sensible memory allocation.
* Removes analysis options for openapi directory
* Updates the generate open api script to remove the analysis_options.yaml file from the mobile/openapi directory
* feat(server,web): add force delete to immediately remove user
* update wording on force delete confirmation
* fix force delete css
* PR feedback
* cleanup user service delete for force
* adding user status column
* some cleanup and tests
* more test fixes
* run npm run sql:generate
* chore: cleanup and websocket
* chore: linting
* userRepository.restore
* removed bad color class from delete-confirm-dialoge
* additional confirmation for user force delete
* shorten confirmation message
---------
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
* Refactors exif bottom sheet to use widgets and fixes slow sliding up experience
format
* Refactors exif bottom sheet to use widgets and fixes slow sliding up experience
format
* Fixes people
* removes wrong exif bottom sheet
format
format
* Moved more widgets out of exit bottom sheet
format
* small styling
---------
Co-authored-by: Marty Fuhry <marty@fuhry.farm>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* feat(mobile): Define constants as 'const'
* feat(mobile): Add people list to asset bottom sheet
Add a list of people per asset in the exif bottom sheet, like on the
web.
Currently the list of people is loaded by making a request each time to
the server. This is the MVP approach.
In the future, the people information can be synced like we're doing
with the assets.
* styling
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* feat(server,web): make user deletion delay configurable
* alphabetical order
* add min for user.deleteDelay in SettingInputField
* make config.user.deleteDelay SettingInputField min consistent format
* fix e2e test
* update description on user delete delay
* fix(server): stack info in asset response for mobile
* fix(server): getAllAssets - do not filter by stack ID
* tet(server): GET /assets stack e2e
* chore(server): fix checks
* stack asset height
---------
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
* Fixes double video auto initialize issue and placeholder for video controller
* WIP unravel stack index
* Refactors video player controller
format
fixing video
format
Working
format
* Fixes hide on pause
* Got hiding when tapped working
* Hides controls when video starts and fixes placeholder for memory card
Remove prints
* Fixes show controls with microtask
* fix LivePhotos not playing
* removes unused function callbacks and moves wakelock
* Update motion video
* Fixing motion photo playing
* Renames to isPlayingVideo
* Fixes playing video on change
* pause on dispose
* fixing issues with sync between controls
* Adds gallery app bar
* Switches to memoized
* Fixes pause
* Revert "Switches to memoized"
This reverts commit 234e6741dea05aa0b967dde746f1d625f15bed94.
* uses stateful widget
* Fixes double video play by using provider and new chewie video player
wip
format
Fixes motion photos
format
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* alt text
* memory lane alt text
* revert sql generator change
* use getAltText
* oops
* handle large number of people in asset
* nit
* add aria-label to search button
* update api
* fixed tests
* fixed typing
* fixed spacing
* fix displaying null
* 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>