Commit Graph
3505 Commits
Author SHA1 Message Date
aiongg 0ebcca0a82 Merge PR #3392: LRC-LIB-MISSING: settling waits for the Missing Photos count, which can't panic on spawn 2026-10-31 02:09:27 +00:00
aiongg 9c471f3934 Merge PR #3383: PERF-SMART: a File path rule over a non-ASCII path folds case in stack buffers instead of allocating two strings per photo 2026-10-31 02:09:27 +00:00
aiongg dc946d9876 Merge PR #3265: LR-BEHAV-ACCESS: the grid's Thumbnail size reads as a slider
crates/ui-egui/tests/it/main.rs: all mod lines kept. docs: both sides kept; header keeps the newer date.
2026-10-31 02:09:27 +00:00
aiongg 69eaf50db9 Merge PR #3262: LR-BEHAV-ACCESS: the photo in Detail is named with its file name
crates/ui-egui/tests/it/main.rs: all mod lines kept. docs: both sides kept; header keeps the newer date.
2026-10-31 02:09:11 +00:00
aiongg 13b2534f80 Merge PR #3221: LR-VIEW-PHOTOGRID: the grid's empty view names Import Photos' shortcut as the keymap has it
docs/whats-new.md, docs/parity-checklist.md: both sides' entries; header keeps the newer date.
2026-10-31 02:08:54 +00:00
aiongg e2d750ca0e Merge PR #3212: LR-BEHAV-ACCESS: a date header in the photo grid is named with the text it shows
crates/ui-egui/tests/it/main.rs: both mod lines kept. docs/whats-new.md, docs/parity-checklist.md: both sides' entries, header and LR-BEHAV-ACCESS row combined.
2026-10-31 02:08:33 +00:00
aiongg 6b99e96207 Merge PR #3209: LR-BEHAV-ACCESS: the sidebar's disclosure triangles name their row
docs/whats-new.md: both entries kept under their dates. docs/parity-checklist.md: header and revision rows carry both sides.
2026-10-31 02:08:16 +00:00
aiongg 8cbd95ef89 Merge PR #2991: KEYC-METADATA: Cmd+Alt+Shift+K / Ctrl+Alt+Shift+K sets the keyword shortcut, and Shift+K adds or removes it
docs/parity-checklist.md, docs/ui-parity.md: headers, the KEYC-METADATA and LRC-LIB-KEYWORDS rows carry both sides' changes; revision rows kept from both.
2026-10-31 02:07:47 +00:00
aiongg c250fa0c11 Merge PR #2986: Issue #2980: Clear Color Label can be given a keyboard shortcut 2026-10-31 02:07:12 +00:00
aiongg 1167de60d7 Merge PR #2879: KEYC-METADATA: Cmd+Shift+K / Ctrl+Shift+K edits the keyword picked in the Keyword List
docs/parity-checklist.md, docs/ui-parity.md: header lines and the KEYC-METADATA row carry both sides' changes; revision rows kept from both.
2026-10-31 02:07:10 +00:00
aiongg 33403b171d Merge PR #2856: Keywords: start and stop painting with the keyboard shortcut 2026-10-31 02:06:48 +00:00
aiongg 6871d49c96 Merge PR #2830: LR-BEHAV-MULTISELECT: replacing the selection with a repeated id keeps each photo once
docs/parity-checklist.md: kept both revision rows.
2026-10-31 02:06:47 +00:00
x-labb edcc801a9c Issue #2980: Clear Color Label's toast ignores a label parameter
photo.clearLabel takes no colour, but the toast code read params[label] for
it as for photo.label, so photo.clearLabel {label: red} cleared the photo and
showed 'Red Label'. The colour is read for photo.label only.
2026-10-30 21:03:50 +01:00
x-labb cc8a9f3d3d Issue #2980: Clear Color Label can be given a keyboard shortcut
Setting a colour label is photo.label with the colour as a parameter, and the
keyboard shortcuts editor binds a key to a command, not to a parameter, so
only 6-9 had keys and clearing a label could not be given one. photo.clearLabel
is the same as photo.label with none, as a command of its own. The Photo >
Set Color Label > None row runs it and shows its key.
2026-10-30 21:03:50 +01:00
Brandon Thomas c7d7d3c0fd Merge PR #2540 (maintainer follow-up) 2026-10-30 15:26:31 -04:00
Brandon ThomasandClaude Opus 5.5 831d724b87 Reject .cube data lines that start with nan or inf
A data line such as `nan 0 0` starts with a letter and was skipped as an
unknown keyword, so a file with enough other entries still parsed.
(CodeRabbit review on #2540.)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:26:29 -04:00
Brandon Thomas b854bbb94e Merge PR #2835 2026-10-30 15:24:59 -04:00
Brandon Thomas ac4a98bc2d Merge PR #3147 2026-10-30 15:24:59 -04:00
Brandon Thomas cfdf63c6e4 Merge PR #2917
# Conflicts:
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-30 15:24:59 -04:00
Brandon Thomas 13711ace2b Merge PR #2155 2026-10-30 15:24:41 -04:00
Brandon Thomas c1fb95dfc0 Merge PR #3225 2026-10-30 15:24:30 -04:00
Brandon Thomas 273e9078de Merge PR #2969 2026-10-30 15:24:30 -04:00
Brandon Thomas 5693a3aeaa Merge PR #2540 2026-10-30 15:24:30 -04:00
Brandon Thomas bdb146be43 Merge PR #2833 2026-10-30 15:24:30 -04:00
Brandon Thomas ef83f30327 Merge PR #2834 2026-10-30 15:24:30 -04:00
Brandon Thomas 19eb08dc25 Merge PR #2909 2026-10-30 15:24:30 -04:00
Brandon Thomas b7c52c5032 Merge PR #2918 2026-10-30 15:24:30 -04:00
Brandon Thomas 181a580579 Merge PR #3366 2026-10-30 15:24:30 -04:00
Brandon Thomas 9140e8cd38 Merge PR #3267 2026-10-30 15:24:30 -04:00
mpratsakiandClaude Opus 5.5 eb693b33b0 LRC-LIB-MISSING: restore the album-menu labels' … and – characters
The previous commit's sections.rs went through a PowerShell read and
write in the Windows ANSI code page, which turned …, – and ▸ into
mojibake in five album-menu labels (Create Album…, Sort Albums A–Z, …)
and two doc comments, so the labels missed their translation keys
(CodeRabbit on #3392). The file's text outside missing_count is now
byte for byte what it was before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 18:49:51 +02:00
mpratsakiandClaude Opus 5.5 1def7587f5 LRC-LIB-MISSING: a catalog change during a timed refresh is pending at once
A catalog change seen while a timed refresh of the Missing Photos count
is running cannot start its recount until the refresh ends, and the
refresh is not pending work, so settle() could return before either
finished and the row the recount adds moved the folder rows afterwards
(CodeRabbit on #3392).

The change is now counted as pending from the frame it is seen
(`owed`); the recount takes that entry over when it starts and drops it
once its count is stored. settling_waits_for_a_recount_owed_during_a_timed_refresh
adds a missing photo while a slow refresh runs and fails without this.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 18:16:05 +02:00
mpratsakiandClaude Opus 5.5 9f7936c3c6 LRC-LIB-MISSING: a slow count's timed refresh doesn't hold up settling
While a headless run settles, its simulated clock runs several times
faster than wall time, so with every Missing Photos count pending, a
count that takes about a second started the next 5 s refresh before the
last one finished and settle() never ended (120 s timeout with a 1 s
count, 48 s with 600 ms). That would also stall lightcraft-cli snapshot
on a library on a slow share.

Only the first count and a recount after a catalog change, which add or
take away the Missing Photos row, are pending work now; the timed
refresh is not. Settling takes as long as the count (1.0 s for 1 s,
3.0 s for 3 s). The regression test also checks that settling ends
while a slow count refreshes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:32:15 +02:00
Nathaniel Ledford 07db9568ef LR-BEHAV-ACCESS: the grid's Thumbnail size reads as a slider to screen readers 2026-10-30 09:28:07 -04:00
Nathaniel Ledford c208859ec2 PERF-SMART: a filePath rule over a non-ASCII path folds case in stack buffers instead of allocating two strings per photo 2026-10-30 09:09:43 -04:00
mpratsakiandClaude Opus 5.5 142ddcff29 LRC-LIB-MISSING: the Missing Photos count is pending sidebar work
The sidebar's Missing Photos row appears when the background count of
missing files lands, and moves every row below it down. That worker was
not counted in fs_cached_running, so Headless::settle() did not wait for
it: on a busy machine the row appeared after settling, and a click aimed
at a folder row from the settled layout landed on the row above it
(a_folder_menu_locates_its_missing_tree_only located `other` instead of
`trip`).

- missing_count adds itself to the fs_cached_running counter before it
  starts and takes itself off after the count is stored, as fs_cached does
- the worker starts with thread::Builder::spawn instead of thread::spawn,
  which panics when the OS refuses a thread; on failure the last count
  stays and the next refresh tries again
- settling_waits_for_the_missing_photos_count delays the worker by 1 s
  (test-only field on LightcraftApp, which ui.set does not rebuild) and
  fails without the fix

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 14:05:18 +02:00
Max MittelstädtandGPT-6-Luna b25808686d Reject mismatched XML closing tags
Found while testing crates/lensdb/src/xml.rs:77

Co-Authored-By: GPT-6-Luna <noreply@openai.com>
2026-10-30 06:10:13 +00:00
Dylan M. Taylor 445dd3106e Update prompt shows the app icon and accent color instead of a letter (#3362)
UPDATE_APP (native builds; craft-update is a native-only dependency) carries our 128 px icon and accent (#f2a516, its colour in ArtCraft Launcher). The updater, the self-update
helper and craft-update's startup prompt all get them through crate::UPDATE_APP; the
prompt draws the icon, the accent and "by ArtCraft" (craft-update's default developer).

craft-update is pinned to storytold/craft-libs main at 1065653e7 (#434).
Clippy fixes for Rust 1.99 in untouched code (same logic):
- crates/engine/src/cmd/export.rs
- crates/ui-egui/src/dialogs/rules_editor/rules_move.rs
- crates/ui-egui/src/panels/detail.rs
2026-10-30 01:27:49 -04:00
Nathaniel Ledford 5fe7a46f58 LR-BEHAV-ACCESS: the photo in Detail is named with its file name for screen readers 2026-10-29 13:38:03 -04:00
dotCooCoo 831f4dd5f3 KEYC-METADATA: Enable Painting leaves the full-screen preview and turns off adjustment tools
Cmd+Alt+K / Ctrl+Alt+K ends the full-screen preview before it opens the
Keywords panel or starts painting. With an empty keyword box it also turns
off an active targeted-adjustment tool and ends the current edit
interaction, as opening a panel from the menu does.
2026-10-28 22:00:46 -07:00
dotCooCoo fed2423f2c Merge commit 'refs/check/bf2856-main' into resume-2856
# Conflicts:
#	crates/ui-egui/src/menus/run.rs
2026-10-28 16:42:47 -07:00
dotCooCoo b5c36b53aa Merge main into feat/keyword-shortcut-keys
Follows main's split of menus.rs into menus/ and of the keyword tests into
keywords/tests.rs: Set Keyword Shortcut moves to menus/ui_commands.rs and
menus/run.rs, its catalog test to keywords/tests.rs, and the docs name the
moved test files.
2026-10-28 14:29:26 -07:00
Nathaniel Ledford 7d8b2d7e0e LR-BEHAV-ACCESS: a month's disclosure triangle names its year 2026-10-28 15:28:31 -04:00
radialmonsterandClaude Opus 5.5 20c1f3c057 raw: test the grey JPEG XL restore through decode
The existing synthetic lossy RGB fixture tiles are re-declared grey by a
header edit (colour space RGB to Grey, dropping the 6-bit primaries field
a grey encoding does not carry, per the ColourEncoding bundle). Their XYB
frame data is unchanged, so they decode as one grey plane whose rendered
channels differ. The test checks decode against the gradient's BT.2100
luminance in the linear and sRGB curves.

Refs #275

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014ti8KemZbjE2ZgHgV1q1BM
2026-10-28 13:44:42 -04:00
radialmonsterandClaude Opus 5.5 953c4ee5fc raw: decode lossy single-plane (grey) JPEG XL tiles in LinearRaw DNGs
Lightroom Classic's HDR and panorama merges of monochrome raws store a
one-plane LinearRaw image as lossy (XYB) JPEG XL tiles whose codestream
declares a grey colour encoding (16-bit float with a linear curve, or
16-bit integer with the sRGB curve). Those were refused as "lossy JPEG XL
tile with a single colour plane", so the files opened preview-only.

A lossy grey tile is still coded as three XYB channels. It is now
restored like the RGB case: jxl-oxide renders linear sRGB (never the
declared encoding, which would clip), the single plane is the luminance
(CIE Y, D65) of that, then the declared transfer curve is applied.
One plane must be declared grey and three RGB; HDR curves, other white
points and intensity targets above 255 stay unsupported.

RENDER_CACHE_VERSION 70 -> 71: files that showed their embedded preview
before render from raw data now, under the same content key.

Refs #275

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014ti8KemZbjE2ZgHgV1q1BM
2026-10-28 13:44:42 -04:00
Max MittelstädtandGPT-6-Luna 7ab2575505 Reject ZIP entries with inconsistent decoded sizes
Found while testing crates/geocode/src/unzip.rs:64

Co-Authored-By: GPT-6-Luna <noreply@openai.com>
2026-10-28 16:41:59 +00:00
Nathaniel Ledford 1263557666 LR-VIEW-PHOTOGRID: the grid's empty view names Import Photos' shortcut as the keymap has it, on its own line under a wrapping sentence 2026-10-28 07:53:41 -04:00
Nathaniel Ledford 5ce5e96da1 LR-BEHAV-ACCESS: a test that the Keyword List's triangles name their keyword 2026-10-28 07:13:45 -04:00
Nathaniel Ledford 98b2f6de9d LR-BEHAV-ACCESS: the sidebar's disclosure triangles name their row 2026-10-28 07:13:44 -04:00
dotCooCoo 71a5fbc7c3 Keywords: opening another library clears the keyword picked in the Keyword List
A keyword picked in one library stayed picked after another library opened, so Cmd+Shift+K edited a keyword with the same path in the new library without a new pick.
2026-10-28 03:49:58 -07:00
dotCooCoo 95d2faf53d Merge commit 'refs/check/mw-lightcraft-main' into feat/edit-keywords-key
# Conflicts:
#	crates/ui-egui/src/menus.rs
#	docs/parity-checklist.md
2026-10-28 01:06:33 -07:00