* 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>
* 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>
* 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>
* Add a new setting to toggle autoplay when showing the slideshow.
* Fix an issue where the slideshow would restart automatically when
navigating after it was paused.
* Add a keyboard shortcut 's' to start the slideshow from the asset
viewer.
* Add a keyboard shortcut ' ' to toggle the slideshow play/paused.
* Change the timeout for hiding the slideshow controls from 10 to 2.5
seconds.
* Add English translation for the 'autoplay_slideshow' setting.
Co-authored-by: Alex <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>
* 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>
* recreate #13966
* gcast button works
* rewrote gcast-player to be GCastDestination and CastManager manages the interface between UI and casting destinations
* remove unneeded imports
* add "Connected to" translation
* Remove css for cast launcher
* fix tests
* fix doc tests
* fix the receiver application ID
* remove casting app ID
* remove cast button from nav bar
It is now present at the following locations:
- shared link album and single asset views
- asset viewer (normal user)
- album view (normal user)
* part 1 of fixes from @danieldietzler code review
* part 2 of code review changes from @danieldietzler and @jsram91
* cleanup documentation
* onVideoStarted missing callback
* add token expiry validation
* cleanup logic and logging
* small cleanup
* rename to ICastDestination
* cast button changes
* feat: expand/collapse sidebar
* fix: general PR cleanup
- add skip link unit test
- remove unused tailwind styles
- adjust asset grid spacing
- fix event propogation
* fix: cleaning up event listeners
* fix: purchase modal and button on small screens
* fix: explicit tailwind classes
* fix: no animation on initial page load
* fix: sidebar spacing and reactivity
* chore: reverting changes to icons in nav and account info panel
* fix: remove left margin from the asset grid after merging in new timeline
* chore: extract search-bar changes for a separate PR
* fix: add margin to memories
* 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>
* 16712: Proper intialisation of the memory store to avoid loading up duplicate object refs of the same asset.
* 16712: Add auth to memory mapping so isFavorite is actually return correctly from the server.
* 16712: Move logic that belongs in the store into the store.
* 16712: Cleanup.
* 16712: Fix init behaviour.
* 16712: Add comment.
* 16712: Make method private.
* 16712: Fix import.
* 16712: Fix format.
* 16712: Cleaner if/else and fix typo.
* fix: icon size mismatch
* 16712: Fixed up state machine managing memory playback:
* Updated to `Tween` (`tweened` was deprecated)
* Removed `resetPromise`. Setting progressController to 0 had the same effect, so not really sure why it was there?
* Removed the many duplicate places the `handleAction` method was called. Now we just called it on `afterNavigate` as well as when `galleryInView` or `$isViewing` state changes.
* 16712: Add aria tag.
* 16712: Fix memory player duplicate invocation bugs. Now we should only call 'reset' and 'play' once, after navigate/page load. This should hopefully fix all the various bugs around playback.
* 16712: Cleanup
* 16712: Cleanup
* 16712: Cleanup
* 16712: Cleanup
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* 15712: Added keyboard shortcuts for opening add to album modal and highlighting/selecting an album to add to.
* 15712: Re-factored logic from template code into script. Extracted new album button into separate cmponent.
* 15712: Document new keyboard shortucts now that they work everywhere.
* 15712: Extract some constants/helper functions.
* 15712: Missing comma.
* 15712: Pulled logic out into separate unit testable class.
* 15712: Added a unit test.
* 15712: Move the modal back up to keep the github PR happy.
* 15712: PR feedback - renamed typescript files and switch to class bind directive.
* 15712:Move selection modal into correct package.
* 15712: Better naming of module and files.
* 15712: Add asset highlight using arrow keys.
* 15172: Add escape behaviour everywhere.
* 15712: Don't allow highlighting past start or end.
* 15712: Clear the highlight on changes to the component state.
* 15712: Use focus to track highlighted element.
* 15712: Rename highlight -> focussed.
* 15712: Better naming.
* 15712: Cleanup.
* 15712: Cleanup & simplify.
* 15712: bugfix for clicking on button.
* 15712: Cleanup.
* 15712: Rollback unnecessary changes.
* 15712: Add unit test.
* 15712: Add thumbnail unit test.
* 15712: Prettier.
* 15712: Fix merge issue.
* 15712: Add shortcut info.
* 15712: Fix linter.
* feat(web): show birthdate on person page
* shorten null check
Co-authored-by: Jason Rasmussen <jason@rasm.me>
* directly use birthDate
---------
Co-authored-by: Jason Rasmussen <jason@rasm.me>
Co-authored-by: Alex <alex.tran1502@gmail.com>