mirror of
https://github.com/immich-app/immich.git
synced 2025-12-17 17:23:20 +03:00
Compare commits
2 Commits
release/ne
...
better-inf
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3efbda859b | ||
|
|
92f8ffe722 |
248
CHANGELOG.md
248
CHANGELOG.md
@@ -1,248 +0,0 @@
|
|||||||
|
|
||||||
# v2.4.0
|
|
||||||
|
|
||||||
# v2.4.0
|
|
||||||
|
|
||||||
## Highlights
|
|
||||||
|
|
||||||
Welcome to the release `v2.4.0` of Immich. This release focuses on bug fixes, QoL improvements, and polished UI components across mobile and the web. Let's dive right in.
|
|
||||||
|
|
||||||
* Show the owner's name in the shared album
|
|
||||||
* Command palette
|
|
||||||
* Change search type directly in the search bar
|
|
||||||
* Job details
|
|
||||||
* Simplify the top control bar in the mobile app
|
|
||||||
* Notable fix: fix an issue where metadata extraction could fail on high concurrency
|
|
||||||
|
|
||||||
### Show the owner's name in the shared album.
|
|
||||||
|
|
||||||
On the web, in shared albums, you can now toggle an option to display the asset's owner name at the bottom right corner of the thumbnail.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Command palette
|
|
||||||
|
|
||||||
The web app now has an integrated command palette, which can be opened `ctrl + k` on Windows/Linux or `cmd + k` on macOS. This first iteration of command pallets lets you quickly navigate between administration pages by typing the name of the page you want to go to.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Change search type directly in the search bar
|
|
||||||
|
|
||||||
<!-- Release notes generated using configuration in .github/release.yml at main -->
|
|
||||||
|
|
||||||
## What's Changed
|
|
||||||
|
|
||||||
### 🫥 Deprecated Changes
|
|
||||||
|
|
||||||
* feat: queues by @jrasm91 in <https://github.com/immich-app/immich/pull/24142>
|
|
||||||
|
|
||||||
### 🚀 Features
|
|
||||||
|
|
||||||
* feat: improve performance: don't sort timeline buckets from server by @midzelis in <https://github.com/immich-app/immich/pull/24032>
|
|
||||||
* feat: command palette by @danieldietzler in <https://github.com/immich-app/immich/pull/23693>
|
|
||||||
* feat(web): Shared album owner labels by @xCJPECKOVERx in <https://github.com/immich-app/immich/pull/21171>
|
|
||||||
* feat(mobile): persist album sorting & layout in settings by @YarosMallorca in <https://github.com/immich-app/immich/pull/22133>
|
|
||||||
* feat: queue detail page by @jrasm91 in <https://github.com/immich-app/immich/pull/24352>
|
|
||||||
* chore(mobile): add kebabu menu in asset viewer by @idubnori in <https://github.com/immich-app/immich/pull/24387>
|
|
||||||
|
|
||||||
### 🌟 Enhancements
|
|
||||||
|
|
||||||
* feat(web): allow navigating the map with arrow keys by @lukashass in <https://github.com/immich-app/immich/pull/24080>
|
|
||||||
* feat: separate camera and lens info in detail panel by @fabianbees in <https://github.com/immich-app/immich/pull/23670>
|
|
||||||
* feat(web): shared link card tweaks by @jrasm91 in <https://github.com/immich-app/immich/pull/24192>
|
|
||||||
* feat(server): exclude syncthing folders from external libraries by @SaphuA in <https://github.com/immich-app/immich/pull/24240>
|
|
||||||
* feat(web): search type selection dropdown by @YarosMallorca in <https://github.com/immich-app/immich/pull/24091>
|
|
||||||
* feat: header context menu by @jrasm91 in <https://github.com/immich-app/immich/pull/24374>
|
|
||||||
* feat(mobile): move top bar buttons into kebabu menu in AssetViewer by @idubnori in <https://github.com/immich-app/immich/pull/24461>
|
|
||||||
|
|
||||||
### 🐛 Bug fixes
|
|
||||||
|
|
||||||
* fix: effect loop by @jrasm91 in <https://github.com/immich-app/immich/pull/24014>
|
|
||||||
* fix: do not clear hash on updated_at change by @shenlong-tanwen in <https://github.com/immich-app/immich/pull/24039>
|
|
||||||
* fix: disable animation "add to" action menu by @bwees in <https://github.com/immich-app/immich/pull/24040>
|
|
||||||
* fix: Use correct app store link by @Mraedis in <https://github.com/immich-app/immich/pull/24062>
|
|
||||||
* fix: show archived assets in favorite page by @bwees in <https://github.com/immich-app/immich/pull/24052>
|
|
||||||
* fix(mobile): first video memory on page doesn't play by @YarosMallorca in <https://github.com/immich-app/immich/pull/23906>
|
|
||||||
* feat(web): show detected faces in spherical photos by @meesfrensel in <https://github.com/immich-app/immich/pull/23974>
|
|
||||||
* fix: add users to album by @danieldietzler in <https://github.com/immich-app/immich/pull/24133>
|
|
||||||
* fix(server): sanitize DB_URL for pg_dumpall to remove unknown query params by @lutostag in <https://github.com/immich-app/immich/pull/23333>
|
|
||||||
* fix: use proper updatedAt value in local assets by @shenlong-tanwen in <https://github.com/immich-app/immich/pull/24137>
|
|
||||||
* fix: albums page reactivity loops by @danieldietzler in <https://github.com/immich-app/immich/pull/24046>
|
|
||||||
* fix: getAspectRatio fallback to db width and height by @shenlong-tanwen in <https://github.com/immich-app/immich/pull/24131>
|
|
||||||
* fix(web): fix support & feedback modal wrapping by @Snowknight26 in <https://github.com/immich-app/immich/pull/24018>
|
|
||||||
* fix: don't get OCR data in shared link by @alextran1502 in <https://github.com/immich-app/immich/pull/24152>
|
|
||||||
* fix: duration extraction by @jrasm91 in <https://github.com/immich-app/immich/pull/24178>
|
|
||||||
* fix(ml): Upgrade ONNX Runtime to v1.22.1 to fix ROCm build failures by @LukaPrebil in <https://github.com/immich-app/immich/pull/24045>
|
|
||||||
* fix: update timeline-manager after archive actions by @midzelis in <https://github.com/immich-app/immich/pull/24010>
|
|
||||||
* fix: theme switcher by @jrasm91 in <https://github.com/immich-app/immich/pull/24209>
|
|
||||||
* fix: label 'for' attributes in user-api-key-grid by @kimsey0 in <https://github.com/immich-app/immich/pull/24232>
|
|
||||||
* fix(mobile): enable backup text overflows by @YarosMallorca in <https://github.com/immich-app/immich/pull/24227>
|
|
||||||
* fix(web): integrate zoom toggle button into panorama photo viewer by @meesfrensel in <https://github.com/immich-app/immich/pull/24189>
|
|
||||||
* fix(web): use full tag path when creating nested subtags by @NiklasvonM in <https://github.com/immich-app/immich/pull/24249>
|
|
||||||
* fix: only generate memory based on users assets by @alextran1502 in <https://github.com/immich-app/immich/pull/24151>
|
|
||||||
* fix(mobile): docs link by @mmomjian in <https://github.com/immich-app/immich/pull/24277>
|
|
||||||
* fix(server): use bigrams for cjk by @mertalev in <https://github.com/immich-app/immich/pull/24285>
|
|
||||||
* fix(ml): do not upscale preview by @mertalev in <https://github.com/immich-app/immich/pull/24322>
|
|
||||||
* fix(web): open onboarding documentation link in new tab by @carbonemys in <https://github.com/immich-app/immich/pull/24289>
|
|
||||||
* fix(mobile): use correct timezone displayed in the info sheet by @kao-byte in <https://github.com/immich-app/immich/pull/24310>
|
|
||||||
* fix(web): folder view sort oder by @etnoy in <https://github.com/immich-app/immich/pull/24337>
|
|
||||||
* fix(server): do not delete offline assets by @mertalev in <https://github.com/immich-app/immich/pull/24355>
|
|
||||||
* fix: exposure info and better readability by @alextran1502 in <https://github.com/immich-app/immich/pull/24344>
|
|
||||||
* fix: Adjust the zoom level by @jforseth210 in <https://github.com/immich-app/immich/pull/24353>
|
|
||||||
* fix: local full sync on Android on resume by @alextran1502 in <https://github.com/immich-app/immich/pull/24348>
|
|
||||||
* fix(web): Add minimum content size to logo for consistent visual on small screens by @kiloomar in <https://github.com/immich-app/immich/pull/24372>
|
|
||||||
* fix: use adjustment time in iOS for hash reset by @shenlong-tanwen in <https://github.com/immich-app/immich/pull/24047>
|
|
||||||
* fix(server): update exiftool-vendored to v34 for more robust metadata extraction by @skatsubo in <https://github.com/immich-app/immich/pull/24424>
|
|
||||||
* fix(mobile): cannot create album while name field is focused by @YarosMallorca in <https://github.com/immich-app/immich/pull/24449>
|
|
||||||
* fix(web): \[album table view\] long album title overflows table row by @simonkub in <https://github.com/immich-app/immich/pull/24450>
|
|
||||||
* fix(mobile): fix overflow text in backup card by @YarosMallorca in <https://github.com/immich-app/immich/pull/24448>
|
|
||||||
* fix(mobile): timeline bottom padding on selection by @YarosMallorca in <https://github.com/immich-app/immich/pull/24480>
|
|
||||||
* feat(mobile): Localized backup upload details page by @ArnyminerZ in <https://github.com/immich-app/immich/pull/21136>
|
|
||||||
|
|
||||||
### 📚 Documentation
|
|
||||||
|
|
||||||
* docs: DB_STORAGE_TYPE is only used by the database container by @dionysius in <https://github.com/immich-app/immich/pull/24215>
|
|
||||||
* fix(docs): build `cli` for e2e tests by @roschaefer in <https://github.com/immich-app/immich/pull/24184>
|
|
||||||
* docs(faq): add more info on archiving by @etnoy in <https://github.com/immich-app/immich/pull/24326>
|
|
||||||
* fix(docs): server and machine-learning use IMMICH_HOST and IMMICH_PORT by @dionysius in <https://github.com/immich-app/immich/pull/24335>
|
|
||||||
* fix: prevent OOM on nginx reverse proxy servers by @NicholasFlamy in <https://github.com/immich-app/immich/pull/24351>
|
|
||||||
* fix(docs): obsolete docs about rootless docker by @roschaefer in <https://github.com/immich-app/immich/pull/24376>
|
|
||||||
* fix(docs): websockets in nginx example by @fourthwall in <https://github.com/immich-app/immich/pull/24411>
|
|
||||||
|
|
||||||
### 🌐 Translations
|
|
||||||
|
|
||||||
* chore: add new language requests by @danieldietzler in <https://github.com/immich-app/immich/pull/23991>
|
|
||||||
|
|
||||||
## New Contributors
|
|
||||||
|
|
||||||
* @ujjwal123123 made their first contribution in <https://github.com/immich-app/immich/pull/24101>
|
|
||||||
* @lutostag made their first contribution in <https://github.com/immich-app/immich/pull/23333>
|
|
||||||
* @LukaPrebil made their first contribution in <https://github.com/immich-app/immich/pull/24045>
|
|
||||||
* @kimsey0 made their first contribution in <https://github.com/immich-app/immich/pull/24232>
|
|
||||||
* @SaphuA made their first contribution in <https://github.com/immich-app/immich/pull/24240>
|
|
||||||
* @dionysius made their first contribution in <https://github.com/immich-app/immich/pull/24215>
|
|
||||||
* @NiklasvonM made their first contribution in <https://github.com/immich-app/immich/pull/24249>
|
|
||||||
* @kao-byte made their first contribution in <https://github.com/immich-app/immich/pull/24098>
|
|
||||||
* @carbonemys made their first contribution in <https://github.com/immich-app/immich/pull/24289>
|
|
||||||
* @kiloomar made their first contribution in <https://github.com/immich-app/immich/pull/24372>
|
|
||||||
* @fourthwall made their first contribution in <https://github.com/immich-app/immich/pull/24411>
|
|
||||||
* @simonkub made their first contribution in <https://github.com/immich-app/immich/pull/24450>
|
|
||||||
* @ArnyminerZ made their first contribution in <https://github.com/immich-app/immich/pull/21136>
|
|
||||||
|
|
||||||
**Full Changelog**: <https://github.com/immich-app/immich/compare/v2.3.1...v2.4.0>
|
|
||||||
|
|
||||||
<!-- Release notes generated using configuration in .github/release.yml at main -->
|
|
||||||
|
|
||||||
## What's Changed
|
|
||||||
### 🫥 Deprecated Changes
|
|
||||||
* feat: queues by @jrasm91 in https://github.com/immich-app/immich/pull/24142
|
|
||||||
### 🚀 Features
|
|
||||||
* feat: improve performance: don't sort timeline buckets from server by @midzelis in https://github.com/immich-app/immich/pull/24032
|
|
||||||
* feat: command palette by @danieldietzler in https://github.com/immich-app/immich/pull/23693
|
|
||||||
* feat(web): Shared album owner labels by @xCJPECKOVERx in https://github.com/immich-app/immich/pull/21171
|
|
||||||
* feat(mobile): persist album sorting & layout in settings by @YarosMallorca in https://github.com/immich-app/immich/pull/22133
|
|
||||||
* feat: queue detail page by @jrasm91 in https://github.com/immich-app/immich/pull/24352
|
|
||||||
* chore(mobile): add kebabu menu in asset viewer by @idubnori in https://github.com/immich-app/immich/pull/24387
|
|
||||||
* feat(mobile): create new album from add to modal by @YarosMallorca in https://github.com/immich-app/immich/pull/24431
|
|
||||||
* feat(mobile): move buttons in the bottom sheet to the kebabu menu by @idubnori in https://github.com/immich-app/immich/pull/24175
|
|
||||||
### 🌟 Enhancements
|
|
||||||
* feat(web): allow navigating the map with arrow keys by @lukashass in https://github.com/immich-app/immich/pull/24080
|
|
||||||
* feat: separate camera and lens info in detail panel by @fabianbees in https://github.com/immich-app/immich/pull/23670
|
|
||||||
* feat(web): shared link card tweaks by @jrasm91 in https://github.com/immich-app/immich/pull/24192
|
|
||||||
* feat(server): exclude syncthing folders from external libraries by @SaphuA in https://github.com/immich-app/immich/pull/24240
|
|
||||||
* feat(web): search type selection dropdown by @YarosMallorca in https://github.com/immich-app/immich/pull/24091
|
|
||||||
* feat: header context menu by @jrasm91 in https://github.com/immich-app/immich/pull/24374
|
|
||||||
* feat(mobile): move top bar buttons into kebabu menu in AssetViewer by @idubnori in https://github.com/immich-app/immich/pull/24461
|
|
||||||
* feat(web): asset selection bar in tags view by @YarosMallorca in https://github.com/immich-app/immich/pull/24522
|
|
||||||
* feat(web): slideshow feature on shared albums by @YarosMallorca in https://github.com/immich-app/immich/pull/24598
|
|
||||||
* feat: replace heart icons to thumbs-up across activity by @idubnori in https://github.com/immich-app/immich/pull/24590
|
|
||||||
### 🐛 Bug fixes
|
|
||||||
* fix: effect loop by @jrasm91 in https://github.com/immich-app/immich/pull/24014
|
|
||||||
* fix: do not clear hash on updated_at change by @shenlong-tanwen in https://github.com/immich-app/immich/pull/24039
|
|
||||||
* fix: disable animation "add to" action menu by @bwees in https://github.com/immich-app/immich/pull/24040
|
|
||||||
* fix: Use correct app store link by @Mraedis in https://github.com/immich-app/immich/pull/24062
|
|
||||||
* fix: show archived assets in favorite page by @bwees in https://github.com/immich-app/immich/pull/24052
|
|
||||||
* fix(mobile): first video memory on page doesn't play by @YarosMallorca in https://github.com/immich-app/immich/pull/23906
|
|
||||||
* feat(web): show detected faces in spherical photos by @meesfrensel in https://github.com/immich-app/immich/pull/23974
|
|
||||||
* fix: add users to album by @danieldietzler in https://github.com/immich-app/immich/pull/24133
|
|
||||||
* fix(server): sanitize DB_URL for pg_dumpall to remove unknown query params by @lutostag in https://github.com/immich-app/immich/pull/23333
|
|
||||||
* fix: use proper updatedAt value in local assets by @shenlong-tanwen in https://github.com/immich-app/immich/pull/24137
|
|
||||||
* fix: albums page reactivity loops by @danieldietzler in https://github.com/immich-app/immich/pull/24046
|
|
||||||
* fix: getAspectRatio fallback to db width and height by @shenlong-tanwen in https://github.com/immich-app/immich/pull/24131
|
|
||||||
* fix(web): fix support & feedback modal wrapping by @Snowknight26 in https://github.com/immich-app/immich/pull/24018
|
|
||||||
* fix: don't get OCR data in shared link by @alextran1502 in https://github.com/immich-app/immich/pull/24152
|
|
||||||
* fix: duration extraction by @jrasm91 in https://github.com/immich-app/immich/pull/24178
|
|
||||||
* fix(ml): Upgrade ONNX Runtime to v1.22.1 to fix ROCm build failures by @LukaPrebil in https://github.com/immich-app/immich/pull/24045
|
|
||||||
* fix: update timeline-manager after archive actions by @midzelis in https://github.com/immich-app/immich/pull/24010
|
|
||||||
* fix: theme switcher by @jrasm91 in https://github.com/immich-app/immich/pull/24209
|
|
||||||
* fix: label 'for' attributes in user-api-key-grid by @kimsey0 in https://github.com/immich-app/immich/pull/24232
|
|
||||||
* fix(mobile): enable backup text overflows by @YarosMallorca in https://github.com/immich-app/immich/pull/24227
|
|
||||||
* fix(web): integrate zoom toggle button into panorama photo viewer by @meesfrensel in https://github.com/immich-app/immich/pull/24189
|
|
||||||
* fix(web): use full tag path when creating nested subtags by @NiklasvonM in https://github.com/immich-app/immich/pull/24249
|
|
||||||
* fix: only generate memory based on users assets by @alextran1502 in https://github.com/immich-app/immich/pull/24151
|
|
||||||
* fix(mobile): docs link by @mmomjian in https://github.com/immich-app/immich/pull/24277
|
|
||||||
* fix(server): use bigrams for cjk by @mertalev in https://github.com/immich-app/immich/pull/24285
|
|
||||||
* fix(ml): do not upscale preview by @mertalev in https://github.com/immich-app/immich/pull/24322
|
|
||||||
* fix(web): open onboarding documentation link in new tab by @carbonemys in https://github.com/immich-app/immich/pull/24289
|
|
||||||
* fix(mobile): use correct timezone displayed in the info sheet by @kao-byte in https://github.com/immich-app/immich/pull/24310
|
|
||||||
* fix(web): folder view sort oder by @etnoy in https://github.com/immich-app/immich/pull/24337
|
|
||||||
* fix(server): do not delete offline assets by @mertalev in https://github.com/immich-app/immich/pull/24355
|
|
||||||
* fix: exposure info and better readability by @alextran1502 in https://github.com/immich-app/immich/pull/24344
|
|
||||||
* fix: Adjust the zoom level by @jforseth210 in https://github.com/immich-app/immich/pull/24353
|
|
||||||
* fix: local full sync on Android on resume by @alextran1502 in https://github.com/immich-app/immich/pull/24348
|
|
||||||
* fix(web): Add minimum content size to logo for consistent visual on small screens by @kiloomar in https://github.com/immich-app/immich/pull/24372
|
|
||||||
* fix: use adjustment time in iOS for hash reset by @shenlong-tanwen in https://github.com/immich-app/immich/pull/24047
|
|
||||||
* fix(server): update exiftool-vendored to v34 for more robust metadata extraction by @skatsubo in https://github.com/immich-app/immich/pull/24424
|
|
||||||
* fix(mobile): cannot create album while name field is focused by @YarosMallorca in https://github.com/immich-app/immich/pull/24449
|
|
||||||
* fix(web): [album table view] long album title overflows table row by @simonkub in https://github.com/immich-app/immich/pull/24450
|
|
||||||
* fix(mobile): fix overflow text in backup card by @YarosMallorca in https://github.com/immich-app/immich/pull/24448
|
|
||||||
* fix(mobile): timeline bottom padding on selection by @YarosMallorca in https://github.com/immich-app/immich/pull/24480
|
|
||||||
* feat(mobile): Localized backup upload details page by @ArnyminerZ in https://github.com/immich-app/immich/pull/21136
|
|
||||||
* fix(mobile): iOS local permission dialog extra whitespace by @kurtmckee in https://github.com/immich-app/immich/pull/24491
|
|
||||||
* fix(mobile): versionStatus.message text overflow by @idubnori in https://github.com/immich-app/immich/pull/24504
|
|
||||||
* fix(server): prevent metadata extraction failures on large video files by @hubert-taieb in https://github.com/immich-app/immich/pull/24094
|
|
||||||
* fix(web): show inferred timezone in date editor by @skatsubo in https://github.com/immich-app/immich/pull/24513
|
|
||||||
* fix(mobile): local videos with '#' don't play on android by @YarosMallorca in https://github.com/immich-app/immich/pull/24373
|
|
||||||
* fix: refresh appear in list after asset is added to a current or new album by @alextran1502 in https://github.com/immich-app/immich/pull/24523
|
|
||||||
* fix(mobile): birthday off by one day on remote by @YarosMallorca in https://github.com/immich-app/immich/pull/24527
|
|
||||||
* fix(web): download panel being hidden by admin sidebar by @diogotcorreia in https://github.com/immich-app/immich/pull/24583
|
|
||||||
* fix(web): recent search doesn't use search type by @YarosMallorca in https://github.com/immich-app/immich/pull/24578
|
|
||||||
* fix(server): only extract image's duration if format supports animation by @meesfrensel in https://github.com/immich-app/immich/pull/24587
|
|
||||||
* fix(mobile): local delete missing from sheet on some routes by @YarosMallorca in https://github.com/immich-app/immich/pull/24505
|
|
||||||
* fix(mobile): better UI for metadata panel by @kao-byte in https://github.com/immich-app/immich/pull/24428
|
|
||||||
* fix: shared link expiration and small styling by @alextran1502 in https://github.com/immich-app/immich/pull/24566
|
|
||||||
### 📚 Documentation
|
|
||||||
* docs: DB_STORAGE_TYPE is only used by the database container by @dionysius in https://github.com/immich-app/immich/pull/24215
|
|
||||||
* fix(docs): build `cli` for e2e tests by @roschaefer in https://github.com/immich-app/immich/pull/24184
|
|
||||||
* docs(faq): add more info on archiving by @etnoy in https://github.com/immich-app/immich/pull/24326
|
|
||||||
* fix(docs): server and machine-learning use IMMICH_HOST and IMMICH_PORT by @dionysius in https://github.com/immich-app/immich/pull/24335
|
|
||||||
* fix: prevent OOM on nginx reverse proxy servers by @NicholasFlamy in https://github.com/immich-app/immich/pull/24351
|
|
||||||
* fix(docs): obsolete docs about rootless docker by @roschaefer in https://github.com/immich-app/immich/pull/24376
|
|
||||||
* fix(docs): websockets in nginx example by @fourthwall in https://github.com/immich-app/immich/pull/24411
|
|
||||||
* fix(docs): slow upload speed with example nginx reverse proxy config by @goalie2002 in https://github.com/immich-app/immich/pull/24490
|
|
||||||
* fix(docs): typo in maintenance mode command by @bartvanvelden in https://github.com/immich-app/immich/pull/24518
|
|
||||||
### 🌐 Translations
|
|
||||||
* chore: add new language requests by @danieldietzler in https://github.com/immich-app/immich/pull/23991
|
|
||||||
|
|
||||||
## New Contributors
|
|
||||||
* @ujjwal123123 made their first contribution in https://github.com/immich-app/immich/pull/24101
|
|
||||||
* @lutostag made their first contribution in https://github.com/immich-app/immich/pull/23333
|
|
||||||
* @LukaPrebil made their first contribution in https://github.com/immich-app/immich/pull/24045
|
|
||||||
* @kimsey0 made their first contribution in https://github.com/immich-app/immich/pull/24232
|
|
||||||
* @SaphuA made their first contribution in https://github.com/immich-app/immich/pull/24240
|
|
||||||
* @dionysius made their first contribution in https://github.com/immich-app/immich/pull/24215
|
|
||||||
* @NiklasvonM made their first contribution in https://github.com/immich-app/immich/pull/24249
|
|
||||||
* @kao-byte made their first contribution in https://github.com/immich-app/immich/pull/24098
|
|
||||||
* @carbonemys made their first contribution in https://github.com/immich-app/immich/pull/24289
|
|
||||||
* @kiloomar made their first contribution in https://github.com/immich-app/immich/pull/24372
|
|
||||||
* @fourthwall made their first contribution in https://github.com/immich-app/immich/pull/24411
|
|
||||||
* @simonkub made their first contribution in https://github.com/immich-app/immich/pull/24450
|
|
||||||
* @ArnyminerZ made their first contribution in https://github.com/immich-app/immich/pull/21136
|
|
||||||
* @kurtmckee made their first contribution in https://github.com/immich-app/immich/pull/24491
|
|
||||||
* @hubert-taieb made their first contribution in https://github.com/immich-app/immich/pull/24094
|
|
||||||
* @bartvanvelden made their first contribution in https://github.com/immich-app/immich/pull/24518
|
|
||||||
|
|
||||||
**Full Changelog**: https://github.com/immich-app/immich/compare/v2.3.1...v2.4.0
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@immich/cli",
|
"name": "@immich/cli",
|
||||||
"version": "2.2.104",
|
"version": "2.2.103",
|
||||||
"description": "Command Line Interface (CLI) for Immich",
|
"description": "Command Line Interface (CLI) for Immich",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"exports": "./dist/index.js",
|
"exports": "./dist/index.js",
|
||||||
|
|||||||
4
docs/static/archived-versions.json
vendored
4
docs/static/archived-versions.json
vendored
@@ -1,8 +1,4 @@
|
|||||||
[
|
[
|
||||||
{
|
|
||||||
"label": "v2.4.0",
|
|
||||||
"url": "https://docs.v2.4.0.archive.immich.app"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"label": "v2.3.1",
|
"label": "v2.3.1",
|
||||||
"url": "https://docs.v2.3.1.archive.immich.app"
|
"url": "https://docs.v2.3.1.archive.immich.app"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "immich-e2e",
|
"name": "immich-e2e",
|
||||||
"version": "2.4.0",
|
"version": "2.3.1",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -1286,6 +1286,7 @@
|
|||||||
"link_to_oauth": "Link to OAuth",
|
"link_to_oauth": "Link to OAuth",
|
||||||
"linked_oauth_account": "Linked OAuth account",
|
"linked_oauth_account": "Linked OAuth account",
|
||||||
"list": "List",
|
"list": "List",
|
||||||
|
"live": "Live",
|
||||||
"loading": "Loading",
|
"loading": "Loading",
|
||||||
"loading_search_results_failed": "Loading search results failed",
|
"loading_search_results_failed": "Loading search results failed",
|
||||||
"local": "Local",
|
"local": "Local",
|
||||||
@@ -1415,6 +1416,7 @@
|
|||||||
"month": "Month",
|
"month": "Month",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
"more": "More",
|
"more": "More",
|
||||||
|
"motion": "Motion",
|
||||||
"move": "Move",
|
"move": "Move",
|
||||||
"move_off_locked_folder": "Move out of locked folder",
|
"move_off_locked_folder": "Move out of locked folder",
|
||||||
"move_to": "Move to",
|
"move_to": "Move to",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "immich-ml"
|
name = "immich-ml"
|
||||||
version = "2.4.0"
|
version = "2.3.1"
|
||||||
description = ""
|
description = ""
|
||||||
authors = [{ name = "Hau Tran", email = "alex.tran1502@gmail.com" }]
|
authors = [{ name = "Hau Tran", email = "alex.tran1502@gmail.com" }]
|
||||||
requires-python = ">=3.10,<4.0"
|
requires-python = ">=3.10,<4.0"
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ platform :android do
|
|||||||
task: 'bundle',
|
task: 'bundle',
|
||||||
build_type: 'Release',
|
build_type: 'Release',
|
||||||
properties: {
|
properties: {
|
||||||
"android.injected.version.code" => 3029,
|
"android.injected.version.code" => 3028,
|
||||||
"android.injected.version.name" => "2.4.0",
|
"android.injected.version.name" => "2.3.1",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')
|
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_stack.widg
|
|||||||
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_viewer.state.dart';
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_viewer.state.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/asset_viewer/bottom_bar.widget.dart';
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/bottom_bar.widget.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/asset_viewer/bottom_sheet.widget.dart';
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/bottom_sheet.widget.dart';
|
||||||
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/motion_photo_button.widget.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/asset_viewer/top_app_bar.widget.dart';
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/top_app_bar.widget.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/asset_viewer/video_viewer.widget.dart';
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/video_viewer.widget.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/images/image_provider.dart';
|
import 'package:immich_mobile/presentation/widgets/images/image_provider.dart';
|
||||||
@@ -692,6 +693,7 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
|
|||||||
backgroundDecoration: BoxDecoration(color: backgroundColor),
|
backgroundDecoration: BoxDecoration(color: backgroundColor),
|
||||||
enablePanAlways: true,
|
enablePanAlways: true,
|
||||||
),
|
),
|
||||||
|
const Positioned(top: -40, left: 0, right: 0, child: MotionPhotoPlayButton()),
|
||||||
if (!showingBottomSheet)
|
if (!showingBottomSheet)
|
||||||
const Positioned(
|
const Positioned(
|
||||||
bottom: 0,
|
bottom: 0,
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:immich_mobile/extensions/platform_extensions.dart';
|
||||||
|
import 'package:immich_mobile/extensions/translate_extensions.dart';
|
||||||
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_viewer.state.dart';
|
||||||
|
import 'package:immich_mobile/providers/asset_viewer/is_motion_video_playing.provider.dart';
|
||||||
|
import 'package:immich_mobile/providers/infrastructure/asset_viewer/current_asset.provider.dart';
|
||||||
|
|
||||||
|
class MotionPhotoPlayButton extends ConsumerWidget {
|
||||||
|
const MotionPhotoPlayButton({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final asset = ref.watch(currentAssetNotifier);
|
||||||
|
final isPlaying = ref.watch(isPlayingMotionVideoProvider);
|
||||||
|
final showControls = ref.watch(assetViewerProvider.select((state) => state.showingControls));
|
||||||
|
final isShowingSheet = ref.watch(assetViewerProvider.select((state) => state.showingBottomSheet));
|
||||||
|
|
||||||
|
if (asset == null || !asset.isMotionPhoto || isShowingSheet) {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
|
||||||
|
return IgnorePointer(
|
||||||
|
ignoring: !showControls,
|
||||||
|
child: AnimatedOpacity(
|
||||||
|
opacity: showControls ? 1.0 : 0.0,
|
||||||
|
duration: Durations.short2,
|
||||||
|
child: SafeArea(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(top: 60),
|
||||||
|
child: Center(
|
||||||
|
child: _MotionButton(
|
||||||
|
isPlaying: isPlaying,
|
||||||
|
onPressed: ref.read(isPlayingMotionVideoProvider.notifier).toggle,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MotionButton extends StatelessWidget {
|
||||||
|
final bool isPlaying;
|
||||||
|
final VoidCallback onPressed;
|
||||||
|
|
||||||
|
const _MotionButton({required this.isPlaying, required this.onPressed});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Material(
|
||||||
|
color: Colors.grey[800]!.withValues(alpha: 0.4),
|
||||||
|
borderRadius: const BorderRadius.all(Radius.circular(24)),
|
||||||
|
child: InkWell(
|
||||||
|
onTap: onPressed,
|
||||||
|
borderRadius: const BorderRadius.all(Radius.circular(24)),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 6),
|
||||||
|
child: Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
isPlaying ? Icons.motion_photos_pause_outlined : Icons.play_circle_outline_rounded,
|
||||||
|
color: Colors.white,
|
||||||
|
size: 16,
|
||||||
|
),
|
||||||
|
const SizedBox(width: 8),
|
||||||
|
Text(
|
||||||
|
CurrentPlatform.isAndroid ? 'motion'.t(context: context) : 'live'.t(context: context),
|
||||||
|
style: const TextStyle(color: Colors.white, fontSize: 14, fontWeight: FontWeight.w500),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:immich_mobile/constants/enums.dart';
|
import 'package:immich_mobile/constants/enums.dart';
|
||||||
@@ -7,7 +8,6 @@ import 'package:immich_mobile/domain/models/events.model.dart';
|
|||||||
import 'package:immich_mobile/domain/utils/event_stream.dart';
|
import 'package:immich_mobile/domain/utils/event_stream.dart';
|
||||||
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/action_buttons/favorite_action_button.widget.dart';
|
import 'package:immich_mobile/presentation/widgets/action_buttons/favorite_action_button.widget.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/action_buttons/motion_photo_action_button.widget.dart';
|
|
||||||
import 'package:immich_mobile/presentation/widgets/action_buttons/unfavorite_action_button.widget.dart';
|
import 'package:immich_mobile/presentation/widgets/action_buttons/unfavorite_action_button.widget.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_viewer.state.dart';
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_viewer.state.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/asset_viewer/viewer_kebab_menu.widget.dart';
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/viewer_kebab_menu.widget.dart';
|
||||||
@@ -50,7 +50,6 @@ class ViewerTopAppBar extends ConsumerWidget implements PreferredSizeWidget {
|
|||||||
final originalTheme = context.themeData;
|
final originalTheme = context.themeData;
|
||||||
|
|
||||||
final actions = <Widget>[
|
final actions = <Widget>[
|
||||||
if (asset.isMotionPhoto) const MotionPhotoActionButton(iconOnly: true),
|
|
||||||
if (album != null && album.isActivityEnabled && album.isShared)
|
if (album != null && album.isActivityEnabled && album.isShared)
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.chat_outlined),
|
icon: const Icon(Icons.chat_outlined),
|
||||||
@@ -77,6 +76,8 @@ class ViewerTopAppBar extends ConsumerWidget implements PreferredSizeWidget {
|
|||||||
child: AppBar(
|
child: AppBar(
|
||||||
backgroundColor: isShowingSheet ? Colors.transparent : Colors.black.withAlpha(125),
|
backgroundColor: isShowingSheet ? Colors.transparent : Colors.black.withAlpha(125),
|
||||||
leading: const _AppBarBackButton(),
|
leading: const _AppBarBackButton(),
|
||||||
|
centerTitle: true,
|
||||||
|
title: isShowingSheet ? null : _AssetInfoTitle(asset: asset),
|
||||||
iconTheme: const IconThemeData(size: 22, color: Colors.white),
|
iconTheme: const IconThemeData(size: 22, color: Colors.white),
|
||||||
actionsIconTheme: const IconThemeData(size: 22, color: Colors.white),
|
actionsIconTheme: const IconThemeData(size: 22, color: Colors.white),
|
||||||
shape: const Border(),
|
shape: const Border(),
|
||||||
@@ -120,3 +121,27 @@ class _AppBarBackButton extends ConsumerWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class _AssetInfoTitle extends StatelessWidget {
|
||||||
|
final BaseAsset asset;
|
||||||
|
|
||||||
|
const _AssetInfoTitle({required this.asset});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final dateTime = asset.createdAt.toLocal();
|
||||||
|
final currentYear = DateTime.now().year;
|
||||||
|
final isCurrentYear = dateTime.year == currentYear;
|
||||||
|
|
||||||
|
final dateFormatted = isCurrentYear ? DateFormat.MMMd().format(dateTime) : DateFormat.yMMMd().format(dateTime);
|
||||||
|
final timeFormatted = DateFormat.jm().format(dateTime);
|
||||||
|
|
||||||
|
return Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Text(dateFormatted, style: context.textTheme.bodyMedium?.copyWith(color: Colors.white)),
|
||||||
|
Text(timeFormatted, style: context.textTheme.labelMedium?.copyWith(color: Colors.white70)),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
2
mobile/openapi/README.md
generated
2
mobile/openapi/README.md
generated
@@ -3,7 +3,7 @@ Immich API
|
|||||||
|
|
||||||
This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
||||||
|
|
||||||
- API version: 2.4.0
|
- API version: 2.3.1
|
||||||
- Generator version: 7.8.0
|
- Generator version: 7.8.0
|
||||||
- Build package: org.openapitools.codegen.languages.DartClientCodegen
|
- Build package: org.openapitools.codegen.languages.DartClientCodegen
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ name: immich_mobile
|
|||||||
description: Immich - selfhosted backup media file on mobile phone
|
description: Immich - selfhosted backup media file on mobile phone
|
||||||
|
|
||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
version: 2.4.0+3029
|
version: 2.3.1+3028
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=3.8.0 <4.0.0'
|
sdk: '>=3.8.0 <4.0.0'
|
||||||
|
|||||||
@@ -14268,7 +14268,7 @@
|
|||||||
"info": {
|
"info": {
|
||||||
"title": "Immich",
|
"title": "Immich",
|
||||||
"description": "Immich API",
|
"description": "Immich API",
|
||||||
"version": "2.4.0",
|
"version": "2.3.1",
|
||||||
"contact": {}
|
"contact": {}
|
||||||
},
|
},
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@immich/sdk",
|
"name": "@immich/sdk",
|
||||||
"version": "2.4.0",
|
"version": "2.3.1",
|
||||||
"description": "Auto-generated TypeScript SDK for the Immich API",
|
"description": "Auto-generated TypeScript SDK for the Immich API",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./build/index.js",
|
"main": "./build/index.js",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Immich
|
* Immich
|
||||||
* 2.4.0
|
* 2.3.1
|
||||||
* DO NOT MODIFY - This file has been generated using oazapfts.
|
* DO NOT MODIFY - This file has been generated using oazapfts.
|
||||||
* See https://www.npmjs.com/package/oazapfts
|
* See https://www.npmjs.com/package/oazapfts
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "immich",
|
"name": "immich",
|
||||||
"version": "2.4.0",
|
"version": "2.3.1",
|
||||||
"description": "",
|
"description": "",
|
||||||
"author": "",
|
"author": "",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "immich-web",
|
"name": "immich-web",
|
||||||
"version": "2.4.0",
|
"version": "2.3.1",
|
||||||
"license": "GNU Affero General Public License version 3",
|
"license": "GNU Affero General Public License version 3",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
Reference in New Issue
Block a user