Commit graph

13549 commits

Author SHA1 Message Date
Theresa Gresch
543a7c4258 Tests: Adapt tests to changes 2026-07-08 16:13:02 +02:00
Michael Mayer
4acbfd3d1b Frontend: Recompile translation JSON
Recompile the frontend translation JSON files from the current .po
catalogs (the pulled Weblate updates plus the German/French/Hebrew
refinements) via `make gettext-compile`.
2026-07-08 12:34:13 +00:00
Michael Mayer
d08d136ce8 Frontend: Refine German, French, and Hebrew settings translations #5429
- German: use „Bereich" for the Folders hint to match the sibling
  sections, and phrase the Open on Hover hint as an imperative.
- French: switch the new Accessibility and feature hints from informal
  tutoiement to the infinitive/vouvoiement used elsewhere in the UI.
- Hebrew: use the singular imperative for Reduce Motion, „קטע" (section)
  for the Albums hint, and align the Open on Hover hint with the label's
  hover wording.
2026-07-08 12:34:13 +00:00
Weblate
af7e06e5d1 Weblate: Update frontend translations 2026-07-08 14:17:58 +02:00
Ömer Duran
6dc0acac13
Settings: Reorganize UI and add an Accessibility section #848 #799 #5429
* Frontend: Add settings for albums, favorites, folders, and media features

* Frontend: Enhance download settings for files and albums #848

* Frontend: Enhance download settings for files and albums #848

* Frontend: Update album download settings to restrict access to super admins

* Frontend: Add album sorting options to settings for super admins

* Frontend: Update download settings visibility

* Frontend: Refine download settings access control for user roles

* Tests: Add album, folder, moment, state, and month order selection options to page-model

* Frontend: Update access control for super admins in settings to include scope check

* Tests: Add new tests for download name and album order settings persistence

* Tests: Implement new tests for default album sort order persistence in settings

* Frontend: Move default album order settings

* Frontend: Add zoom accessibility option in settings #799

* Frontend: Update download name from "Share Identifier" to "Share Friendly" and refine hints for download options in settings

* Tests: Add new acceptance test for disabling album downloads while allowing file downloads in settings

* Frontend: Improve download options layout and hints

* Frontend: Refactor download options condition in settings page

* Frontend: Implement native zoom control in lightbox component

* Settings: Add Collections tab and move Services to its own page #848 #5429

- Add a super-admin Collections tab after Content holding the album
  Download and Sort Order settings; remove those cards from Content.
- Move Services from a settings tab to a dedicated page
  (page/services.vue) with a search toolbar and a Reload / Learn More
  action menu; link it from the navigation settings menu.
- Implement server-side services search (acc_name filter) with tests.
- De-duplicate the picture sort-order options into a shared
  SortOrderOptions builder in options.js.
- Update acceptance/unit tests and page models to match.

* Frontend: Regenerate translation catalogs #848 #5429

Ran `make gettext-extract` to pick up the new settings strings
(Collections, Features, Disable Downloads, and related messages) so
Weblate can translate them. Existing translations are preserved.

* Frontend: Move lightbox viewport-zoom handling into the view helper

- Move the viewport pinch-zoom lock/restore (disableNativeZoom /
  restoreNativeZoom + savedViewportContent) from lightbox.vue onto the
  View singleton in common/view.js.
- Drive it passively from View.apply() via a disableViewportZoom flag in
  the PLightbox case, alongside hideScrollbar / disableScrolling /
  disableNavigationGestures; lightbox.vue no longer references zoom.
- Make save/restore idempotent and extract the viewport constants.
- Cover the helpers and the apply() wiring in view.test.js.

* Settings: Add Accessibility section to General with Reduce Motion #848 #5429

- Move the page-zoom checkbox out of the feature-flags grid into a
  dedicated Accessibility card (super-admin only) with four toggles:
  Open on Hover, Reduce Motion, Hide Scrollbar, and Allow Page Zoom.
- Add a UI.ReduceMotion flag (defaults false) that toggles an
  html.reduce-motion class via config.setReduceMotion and suppresses map
  fly-to animations non-destructively (util.mapAnimateDuration).
- Make Open on Hover apply live by reading shouldOpenOnHover() through a
  reactive computed in the action/auth/lightbox menus; Zoom and Hide
  Scrollbar reload since they are baked into the server-rendered HTML.
- Reword two feature-grid hints to the "pictures" convention and cover
  the new helpers with Go and Vitest tests.

* Frontend: Regenerate translation catalogs #848 #5429

Ran `make gettext-extract` to pick up the new Accessibility settings
strings (Accessibility, Allow Page Zoom, Open on Hover, Hide Scrollbar,
Reduce Motion, and their hints) and the reworded feature-grid hints.
Existing translations are preserved.

---------

Co-authored-by: Michael Mayer <michael@photoprism.app>
2026-07-08 14:11:36 +02:00
Michael Mayer
a22c99dd12 Frontend: Upgrade Vitest, Vite, browserslist & Vue language server
- @vitest/coverage-v8 ^4.1.9 => ^4.1.10
- @vue/language-server ^3.3.5 => ^3.3.6
- browserslist ^4.28.4 => ^4.28.5
- vite ^8.1.0 => ^8.1.3
- vitest ^4.1.9 => ^4.1.10

Dev dependencies only; NOTICE (prod-only) unchanged.
2026-07-08 00:04:29 +00:00
Michael Mayer
138075fc0a Dependencies: Upgrade klauspost, geo, x/text & x/tools Go modules
- github.com/klauspost/compress v1.18.6 => v1.19.0
- github.com/klauspost/cpuid/v2 v2.3.0 => v2.4.0
- github.com/golang/geo => 20260706204034
- golang.org/x/text v0.38.0 => v0.39.0
- golang.org/x/tools v0.45.0 => v0.47.0 (indirect)

Run go mod tidy and regenerate NOTICE.
2026-07-07 23:57:52 +00:00
Michael Mayer
c9f21cd965 Server: Derive WebDAV proxy test paths from proxy.PathPrefix
TestIsWebDAVPath hardcoded the "/i/" proxy prefix, so it failed when
proxy.DefaultPathPrefix changed. Build the proxy cases from proxy.PathPrefix,
the same value IsWebDAVPath uses, so they track the configured prefix.
2026-07-07 23:47:57 +00:00
Michael Mayer
a693df1eaa WebDAV: Route favorite-flag sidecar errors to the system log #5715
WebDAVSetFavoriteFlag logged sidecar mkdir/write failures at error level on
the UI log stream with the raw error, leaking the absolute sidecar path.
Route them through event.SystemError with clean.Error, matching the request
error handling in the WebDAV logger.
2026-07-07 23:47:57 +00:00
Michael Mayer
7bea2dccfe WebDAV: Route request errors to the system log, not the UI #5715
All WebDAV write-method errors (PUT/DELETE/MOVE/COPY/MKCOL/...) now go to
the console-only system log instead of the in-app errors table and browser
log viewer, because golang.org/x/net/webdav embeds absolute server paths in
its messages. Operators still see full detail in the container/service logs.

A MKCOL against an already-existing collection is a benign probe used by
sync clients such as PhotoSync to test for a directory before creating it;
it returns 405 and is logged at debug rather than as an error.
2026-07-07 23:27:52 +00:00
Michael Mayer
d33bca4f48 Metadata: Fix XMP body serial and add tiff: field fallbacks #2260
Read the standard exifEX:BodySerialNumber property, which ExifTool and
Adobe emit; the previous exifEX:SerialNumber matched no compliant XMP
sidecar and silently fell through to aux:SerialNumber.

Add deprecated TIFF-schema fallbacks still emitted by some writers:
tiff:Software (Software), tiff:ImageDescription (Description), and
tiff:Copyright (Copyright).
2026-07-07 11:44:33 +00:00
Michael Mayer
b7e758c607 PWA: Only emit maskable icons when the variant exists #5696 2026-07-06 10:58:16 +00:00
Ömer Duran
4b33d3bd1a
PWA: Add maskable icons, lang/dir, and install screenshots #5696 2026-06-30 19:53:52 +02:00
Michael Mayer
25b99b3ec4 Convert: Gate RAW render rejection by file format #5673
Apply the RawTherapee stderr rejection (raw.DecoderErrors) only for a
gated set of formats (default .cr3) instead of every RAW format.
RawTherapee prints "Cannot use camera white balance" for any sensor it
cannot read, including bodies whose default-WB render is fine, so for
formats it alone can decode (e.g. .raw, .kdc) the warning-based discard
left nothing to index. CR3 is unchanged: a magenta render warns and
falls back to the embedded preview.
2026-06-30 14:04:59 +00:00
Michael Mayer
6dc3ecbf25 Metadata: Map XMP dc:subject to Subject field, not Keywords #2075 #2260
dc:subject is Adobe's "Keywords" panel, but PhotoPrism's Keywords,
Labels, and Subject fields serve distinct purposes. Route dc:subject to
the descriptive Details.Subject field only (matching the embedded/
ExifTool path, where data.Subject comes from the dc:subject-backed
Subject tag and data.Keywords from IPTC Keywords), never the Keywords
field. Multi-word entries keep their spaces; the value stays searchable
via IndexKeywords and still drives label matching.
2026-06-30 10:12:45 +00:00
Michael Mayer
38b50724f5 Convert: Prefer embedded preview over untrustworthy RAW render #5673 2026-06-30 07:49:32 +00:00
Michael Mayer
9f3d958b02 Frontend: Update deps in package.json and package-lock.json
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-30 01:55:38 +02:00
Michael Mayer
1b572c0da7 Auth: Store session login_at as NULL when no client IP is set #5707 2026-06-29 23:28:12 +00:00
Cathie Integra
b2116154d3 Docker: Bump dev base image to develop:260629-resolute 2026-06-30 01:13:20 +02:00
Michael Mayer
b1a7a5d147 HEIC: Allow install-libheif.sh to upgrade held package #5708 2026-06-29 22:30:23 +00:00
Michael Mayer
50d4256b71 Frontend: Regenerate src/locales/json/fr.json
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-30 00:25:18 +02:00
Michael Mayer
5eeb0d6291 Convert: Verify RAW previews and prefer djxl for JPEG XL #5673 #5693 2026-06-29 21:59:48 +00:00
Michael Mayer
d330f0e05c Users: Apply 2FA changes for the cluster service principal 2026-06-29 21:59:48 +00:00
Michael Mayer
3e5ea71fb6 Users: Strengthen Add Account and built-in super-admin form gating 2026-06-29 21:59:48 +00:00
Cathie Integra
fd02897278 HEIC: Default install-libheif.sh to v1.23.1 #5708 2026-06-29 23:29:22 +02:00
Cathie Integra
95603b8f64 HEIC: Upgrade libheif from v1.23.0 to v1.23.1 #5708 2026-06-29 22:22:37 +02:00
Weblate
35caddae32 Weblate: Update backend translations 2026-06-28 19:14:37 +02:00
Weblate
fa4596883d Weblate: Update frontend translations 2026-06-28 19:14:10 +02:00
Cathie Integra
75e08934b8 AI: Add GPU/CUDA option to ONNX Runtime install script #5703 2026-06-28 15:53:46 +02:00
Cathie Integra
021bdeb428 Setup: Default to MariaDB 12.3 (LTS) in compose examples #5705 2026-06-28 15:15:27 +02:00
Michael Mayer
71c14fc68b Docs: Update tagline in README.md
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-28 10:36:59 +02:00
Michael Mayer
ba82cefb83 Setup: Add PHOTOPRISM_OIDC_PROMPT to compose & Helm examples #5698
Lists the new OIDC authorization prompt option alongside the other
PHOTOPRISM_OIDC_ settings (in flag order) in the dev compose files and the
Plus Helm chart values/questions. Empty default preserves current behavior.
2026-06-27 12:39:25 +00:00
Michael Mayer
9d0aca64b8 OIDC: Add configurable authorization prompt option #5698
Add PHOTOPRISM_OIDC_PROMPT (--oidc-prompt) to forward the OpenID Connect
"prompt" parameter (login, select_account, consent) on the authorization
request, so a rejected user can re-authenticate or pick another account
instead of being silently signed in again. Unsupported values (including
"none", which would break interactive login) are dropped with a warning;
empty preserves the seamless-SSO default.
2026-06-27 12:35:04 +00:00
Michael Mayer
063f3c1245 Backend: Update Go deps in go.mod and go.sum
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-27 13:41:03 +02:00
Michael Mayer
b1318d57fa Frontend: Update deps in package.json and package-lock.json
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-27 13:38:53 +02:00
Michael Mayer
f351d5a5a7 Frontend: Recompile translation JSON for new auth messages #5699 #5682 2026-06-27 11:34:54 +00:00
Michael Mayer
0575659c08 Frontend: Render auth error toasts in the current UI locale #5699 #5682 2026-06-27 11:34:54 +00:00
Michael Mayer
a2e8592dd5 Auth: Localize login/session/OIDC error responses via messageId #5699 #5682 2026-06-27 11:34:54 +00:00
Weblate
0293736a08 Weblate: Update frontend translations 2026-06-27 12:29:30 +02:00
Weblate
4c86c71417 Weblate: Update backend translations 2026-06-27 12:29:16 +02:00
Michael Mayer
68a6ad24f4 Translations: Regenerate .po and .pot files from source #5699
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-27 12:27:09 +02:00
Michael Mayer
d081997cff Frontend: Move batch edit dialog close button to toolbar start 2026-06-27 08:19:00 +00:00
Michael Mayer
03c22ca66c UX: Fix 404 page logo text rendering under RTL locales 2026-06-27 08:19:00 +00:00
Michael Mayer
69de3d7a05 Tests: Alias "app.vue" so Portal hooks.test.js resolves the root component 2026-06-26 13:45:38 +00:00
Ömer Duran
b2b1785126
Tests: Add unit tests for recent metadata, auth, and config changes #5697 2026-06-26 14:12:59 +02:00
Michael Mayer
9fe532914d Update tagline in README.md
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-26 09:48:44 +02:00
Michael Mayer
d13b9e50ca Frontend: Update deps in package.json and package-lock.json
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-25 20:46:45 +02:00
Cathie Integra
16eb3fb708 Frontend: Revert dep bump that broke options.js in prod bundle
Reverts 0182c46bb. The webpack 5.107.2->5.108.0 bump changed prod-bundle
scope-hoisting so option-builders in src/options/options.js (Languages,
TimeZones, StartPages, MapsAnimate) threw "Cannot read properties of
undefined", breaking the login and Settings pages on all editions.
Re-apply the photo-sphere-viewer/tar patch bumps separately.
2026-06-25 20:11:57 +02:00
Michael Mayer
7654e676b7 Frontend: Remove unused babel-plugin-istanbul and dead Karma config #5659
The babel-plugin-istanbul coverage plugin was only wired into the retired karma.conf.js; Vitest measures coverage via @vitest/coverage-v8 (.babelrc has no plugins). Dropping it removes the orphaned @istanbuljs/load-nyc-config -> js-yaml@3 subtree and clears the GHSA-h67p-54hq-rp68 DoS advisory; npm audit now reports 0 vulnerabilities.
2026-06-25 16:29:40 +00:00
Michael Mayer
d2a2597ab6 Users: Centralize Add Account auth field gating in the user model 2026-06-25 16:24:55 +00:00