feat(slideshow): folder-navigatie en doorlopend afspelen over folders #67

Merged
janpeter merged 2 commits from feat/slideshow-folder-navigatie into main 2026-07-31 13:08:46 +02:00
Owner

PBI-13 — ST-020 + ST-021

ST-020 — vanuit de diashow naar de vorige/volgende folder

  • ⏮/⏭-knoppen in de lightbox-controls (foldernaam in tooltip/aria-label)
  • toetsenbord: n volgende folder, p vorige folder
  • harde navigatie naar ?slideshow=1 zodat de show direct verder speelt
  • helper adjacentSlideshowAlbums() + tests

ST-021 — aan het einde van een folder automatisch verder
Volgorde zoals afgestemd: eerst volgende batch, dan pas volgende folder.

  • nieuwe route /api/slideshow/albums/[category]/[album]/images (?page=N, 500 per batch) + DB-backed route-test
  • Slideshow laadt batches als state, prefetch 5 items voor het einde, dedupe op key
  • einde-afhandeling (autoplay én video onEnded): batch → folder → stop

Verificatie

  • 324/326 tests groen; eslint schoon op alle gewijzigde bestanden
  • de 2 falende tests + tsc/build-fouten zitten in ongecommit immich-duplicates-werk op main, buiten dit spoor (deze branch raakt die bestanden niet)
## PBI-13 — ST-020 + ST-021 **ST-020 — vanuit de diashow naar de vorige/volgende folder** - ⏮/⏭-knoppen in de lightbox-controls (foldernaam in tooltip/aria-label) - toetsenbord: `n` volgende folder, `p` vorige folder - harde navigatie naar `?slideshow=1` zodat de show direct verder speelt - helper `adjacentSlideshowAlbums()` + tests **ST-021 — aan het einde van een folder automatisch verder** Volgorde zoals afgestemd: eerst volgende batch, dan pas volgende folder. - nieuwe route `/api/slideshow/albums/[category]/[album]/images` (`?page=N`, 500 per batch) + DB-backed route-test - Slideshow laadt batches als state, prefetch 5 items voor het einde, dedupe op key - einde-afhandeling (autoplay én video `onEnded`): batch → folder → stop ## Verificatie - 324/326 tests groen; eslint schoon op alle gewijzigde bestanden - de 2 falende tests + tsc/build-fouten zitten in ongecommit immich-duplicates-werk op `main`, buiten dit spoor (deze branch raakt die bestanden niet)
feat(slideshow): folder-navigatie en doorlopend afspelen over folders
All checks were successful
CI / docker-build (pull_request) Successful in 5m23s
ca0619c4e3
Vanuit de diashow-lightbox naar de vorige/volgende folder (PBI-13 / ST-020):
- knoppen in de controlsbalk met foldernaam in tooltip/aria-label
- toetsenbord: n = volgende folder, p = vorige folder
- harde navigatie naar ?slideshow=1 zodat de show direct verder speelt
- helper adjacentSlideshowAlbums() + tests

Aan het einde van een folder automatisch verder (ST-021), in de met JP
afgestemde volgorde: eerst volgende batch, dan pas volgende folder:
- nieuwe route /api/slideshow/albums/[category]/[album]/images (?page=N,
  500 per batch) + DB-backed route-test
- Slideshow laadt batches als state met prefetch 5 items voor het einde
- einde-afhandeling (autoplay én video onEnded): batch → folder → stop

Verificatie: 324/326 tests groen; de 2 failures en de tsc/build-fouten
zitten in ongecommit immich-duplicates-werk buiten dit spoor.
s4m-codex-reviewer requested changes 2026-07-31 12:21:14 +02:00
Dismissed
s4m-codex-reviewer left a comment

Verdict: REQUEST_CHANGES

Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.

Findings

  • ERRORsrc/components/Slideshow.tsx:155loadMoreItems() retourneert 0 voor zowel "geen items meer" als voor fetch-/JSON-/serverfouten. advanceAtEnd() behandelt die 0 daarna als einde van de huidige folder en navigeert naar nextFolder (src/components/Slideshow.tsx:183). Daardoor kan de slideshow bij een tijdelijke API-fout of malformed response stil alle resterende beelden van de huidige folder overslaan en doorgaan naar de volgende folder. Maak onderscheid tussen "succesvol geladen maar leeg/einde" en "laden mislukt", en navigeer bij failure niet automatisch naar de volgende folder.

Reviewlog

De diff voegt foldernavigatie, keyboard-shortcuts, een JSON-batchroute en tests toe. De aanpak sluit globaal aan op bestaande slideshow/lib-patronen en de MD3-stylingdoc bevat geen conflicterende stylingregels voor deze wijziging. Bovenstaande fout raakt echter het kernpad van doorlopend afspelen over folders en is daarom blokkerend.

# Verdict: REQUEST_CHANGES Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden. ## Findings - **ERROR** — `src/components/Slideshow.tsx:155` — `loadMoreItems()` retourneert `0` voor zowel "geen items meer" als voor fetch-/JSON-/serverfouten. `advanceAtEnd()` behandelt die `0` daarna als einde van de huidige folder en navigeert naar `nextFolder` (`src/components/Slideshow.tsx:183`). Daardoor kan de slideshow bij een tijdelijke API-fout of malformed response stil alle resterende beelden van de huidige folder overslaan en doorgaan naar de volgende folder. Maak onderscheid tussen "succesvol geladen maar leeg/einde" en "laden mislukt", en navigeer bij failure niet automatisch naar de volgende folder. ## Reviewlog De diff voegt foldernavigatie, keyboard-shortcuts, een JSON-batchroute en tests toe. De aanpak sluit globaal aan op bestaande slideshow/lib-patronen en de MD3-stylingdoc bevat geen conflicterende stylingregels voor deze wijziging. Bovenstaande fout raakt echter het kernpad van doorlopend afspelen over folders en is daarom blokkerend.
fix(slideshow): bij laadfout nooit stil naar de volgende folder gaan
All checks were successful
CI / docker-build (pull_request) Successful in 1m19s
910ba87ca2
Verwerkt review-finding (REQUEST_CHANGES) op PR #67: loadMoreItems()
gaf 0 terug voor zowel "folder uitgeput" als fetch-/server-/parsefouten,
waardoor advanceAtEnd() bij een tijdelijke API-fout de resterende beelden
van de huidige folder stilletjes oversloeg en doorging naar de volgende
folder.

- loadMoreItems() geeft nu een expliciete uitkomst: loaded | empty | error
- in-flight promise gedeeld tussen prefetch en einde-afhandeling (dedupe)
- pure beslisfunctie slideshowEndAction() in slideshow-media.ts + tests:
  error => stop op huidige dia, empty => pas dan next-folder
Author
Owner

Verwerkt in 910ba87 — finding ERROR (loadMoreItems behandelde laadfouten als einde-folder):

  • loadMoreItems() geeft nu een expliciete uitkomst terug: loaded | empty | error (fetch-/server-/parsefout zijn niet langer hetzelfde als een legitieme lege batch)
  • nieuwe pure beslisfunctie slideshowEndAction() in src/lib/slideshow-media.ts: bij error stopt de show op de huidige dia — er wordt niet naar de volgende folder genavigeerd; alleen bij empty (succesvol geladen, folder uitgeput) volgt next-folder
  • prefetch en einde-afhandeling delen nu dezelfde in-flight fetch-promise (dedupe), zodat een lopende prefetch nooit als "leeg" kan worden geïnterpreteerd
  • tests toegevoegd voor alle vier de paden (loaded/empty/error × wel/geen volgende folder)

Verificatie: 330/330 tests groen, eslint schoon, tsc schoon op de slideshow-bestanden.

**Verwerkt in `910ba87`** — finding ERROR (loadMoreItems behandelde laadfouten als einde-folder): - `loadMoreItems()` geeft nu een expliciete uitkomst terug: `loaded` | `empty` | `error` (fetch-/server-/parsefout zijn niet langer hetzelfde als een legitieme lege batch) - nieuwe pure beslisfunctie `slideshowEndAction()` in `src/lib/slideshow-media.ts`: bij `error` stopt de show op de huidige dia — er wordt **niet** naar de volgende folder genavigeerd; alleen bij `empty` (succesvol geladen, folder uitgeput) volgt `next-folder` - prefetch en einde-afhandeling delen nu dezelfde in-flight fetch-promise (dedupe), zodat een lopende prefetch nooit als "leeg" kan worden geïnterpreteerd - tests toegevoegd voor alle vier de paden (`loaded`/`empty`/`error` × wel/geen volgende folder) Verificatie: 330/330 tests groen, eslint schoon, tsc schoon op de slideshow-bestanden.
s4m-codex-reviewer left a comment

Verdict: APPROVED

Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.

Findings

Geen blokkerende of noemenswaardige findings gevonden.

De wijziging blijft binnen de bestaande slideshow-architectuur, gebruikt bestaande helpers/patronen voor paginering en slideshow-items, voegt gerichte tests toe voor album-adjacentie, toetsenbordnavigatie, eindgedrag en de nieuwe API-route, en raakt geen product-doc hardstops zoals de proxy-ADR of MD3-tokenconventies.

# Verdict: APPROVED Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden. ## Findings Geen blokkerende of noemenswaardige findings gevonden. De wijziging blijft binnen de bestaande slideshow-architectuur, gebruikt bestaande helpers/patronen voor paginering en slideshow-items, voegt gerichte tests toe voor album-adjacentie, toetsenbordnavigatie, eindgedrag en de nieuwe API-route, en raakt geen product-doc hardstops zoals de proxy-ADR of MD3-tokenconventies.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/Media-Organizer!67
No description provided.