fix(library): a reading that never finished no longer says nought

`saveWalkedDirs` filled in a nought beside every folder a reading had listed but
never opened. A reading stopped by a closed tab, and one kept to a branch, list
the rest of the roll before they have been into any of it — 484 folders of one
real roll read empty over tens of thousands of frames — and the record is folded
back into itself, so the noughts stayed.

Only a reading that met the whole roll may say nought now (`WalkedDirs.full`), and
the screen drops a nought from a record that does not say so. An old record has no
word to give, so its rows fall back on the catalogue instead.

feat(library): search Immich from the filter row

One box, one query, one node: the backend reads what is typed as a tag name when
the key can see one and as a file name otherwise, and the answer is filed under the
node itself. A share link searches its one album in place. The box is not a filter —
it leaves the shelf, which is what the md's search permission is for.

feat(ui): a shorter status line, and a wall that keeps its own row height

The status line is one short 12px row at the foot of the library. A wall with fewer
frames than there are columns no longer stretches its one row — and the cards' own
borders with it — down to the stage.
This commit is contained in:
2026-10-10 18:27:49 +07:00
parent edd7b8497b
commit b3b9ed0193
8 changed files with 267 additions and 34 deletions
+4
View File
@@ -293,6 +293,10 @@ export const en: Dict = {
'lib.rating': 'RATING',
'lib.ratingAll': 'Any rating',
'lib.ratingAtLeast': '{n}★ and up',
'lib.search.label': 'Search Immich',
'lib.search.placeholder': 'Name or tag…',
'lib.search.hint': 'Immich: type a file name or a tag, then Enter — the answer becomes a node of its own in the tree.',
'lib.search.noServer': 'No Immich server yet — add one first.',
'lib.starHint': 'Give this frame {n} stars',
'lib.rotateLeft': 'Turn this frame left',
'lib.rotateRight': 'Turn this frame right',
+4
View File
@@ -305,6 +305,10 @@ export const vi = {
'lib.rating': 'XẾP HẠNG',
'lib.ratingAll': 'Mọi mức sao',
'lib.ratingAtLeast': 'Từ {n} sao',
'lib.search.label': 'Tìm trên Immich',
'lib.search.placeholder': 'Tên ảnh hoặc tag…',
'lib.search.hint': 'Immich: gõ tên ảnh hoặc tên tag rồi Enter — kết quả thành một mục riêng trong cây.',
'lib.search.noServer': 'Chưa có máy chủ Immich nào — thêm một cái trước.',
'lib.starHint': 'Cho ảnh này {n} sao',
'lib.rotateLeft': 'Xoay ảnh sang trái',
'lib.rotateRight': 'Xoay ảnh sang phải',