De spelende track komt in beeld als de lijst opengaat #48

Merged
roelof merged 1 commit from show-playing-track into main 2026-08-05 11:14:05 +02:00
Owner

Closes #40

Een volume is honderd regels en de Top 2000 tweeduizend, dus een lijst die bovenaan opent, opent nergens in de buurt van de ene regel waarvoor de luisteraar kwam. Alle drie de spelers brengen die regel nu in beeld zodra een lijst geladen wordt.

Het is de lijst die geladen wordt die beslist, niet de wachtrij. Naar een ander volume bladeren ontregelt bewust niet wat er speelt, en mag de lijst dus ook niet verslepen: staat de spelende track er niet in, dan blijft alles staan waar het stond.

Per client

  • DesktopShowPlayingTrack, aangeroepen vanuit drie plekken en alle drie nodig: na een laadbeurt (het geval uit de issue), vanuit OnPlayingTrackChanged omdat hervatten de lijst vult vóór het iets start en de laadbeurt dus niets vindt dat speelt, en vanuit OnIsGridViewChanged omdat de verborgen lijst nooit gescrold is — een control zonder indeling heeft niets om te scrollen, wat ook de reden is dat BringTrackIntoView alleen die op het scherm doet en niet allebei. Het venster vult die haak in zoals het de dialogen invult: waar een regel staat is de lijst zijn zaak en een view model heeft geen lijst. Gepost op Background-prioriteit, want de regels zijn net toegevoegd en een lijst die ze nog niet ingedeeld heeft scrolt naar niets.
  • WebshowPlaying(), met block: 'center' in plaats van nearest: die lijst is net opnieuw opgebouwd en staat toch bovenaan, dus er is geen scrollpositie te bewaren, en een regel met wat buren eromheen leest beter dan een tegen de rand.
  • TelefoonTracksPage scrolt zodra de index van de spelende track in de lijst op het scherm verandert. onScrollToIndexFailed is daarbij de route die echt loopt, geen randgeval: een FlatList kan alleen naar een regel die hij gemeten heeft, en van tweeduizend heeft hij er een handvol. De gemiddelde regelhoogte uit die melding brengt hem dichtbij, en de tweede sprong is exact. Geen getItemLayout in plaats daarvan — de regels groeien mee met de systeemletter, en een beloofde hoogte die niet meer klopt zou élke sprong in de lijst scheeftrekken, niet alleen deze.

Eén fout die meekwam

renderTracks zette de playing-klasse niet terug. De rijen worden bij elke laadbeurt opnieuw opgebouwd, dus weg bladeren van het spelende volume en terugkomen liet een lijst achter waarin niets meer als spelend gemarkeerd stond — geen ▶, en niets om naartoe te scrollen.

Nagemeten, draaiend

Lokale server tegen de echte database, met een track diep in de lijst: nummer 500 van de Top 2000, dat is regel 1500 van de 2000.

  • Web, in een echte Chromium: de spelende regel op index 1500 van 2000, gemeten tegen de trackkolom visible: true en ongeveer gecentreerd. Daarna weg gebladerd naar een artiest (niets gemarkeerd, lijst met rust gelaten) en terug op de collectie — weer gemarkeerd én in beeld, het geval dat eerst helemaal stuk was.
  • Telefoon, dev-client, koud opgestart: de Tracks-tab toont 505 tot en met 495 met 500 - Little Lion Man in het midden. Ook nagedaan met RockHeaven volume 5 (nummer 492 van de honderd): zelfde plek op het scherm.
  • Desktop: door jou bevestigd — de spelende regel staat in beeld in plaats van dat de lijst bovenaan begint.

Je afspeelpositie is daarna weer teruggezet op wat hij was (track 424, 92,6 s).

🤖 Generated with Claude Code

Closes #40 Een volume is honderd regels en de Top 2000 tweeduizend, dus een lijst die bovenaan opent, opent nergens in de buurt van de ene regel waarvoor de luisteraar kwam. Alle drie de spelers brengen die regel nu in beeld zodra een lijst geladen wordt. **Het is de lijst die geladen wordt die beslist, niet de wachtrij.** Naar een ander volume bladeren ontregelt bewust niet wat er speelt, en mag de lijst dus ook niet verslepen: staat de spelende track er niet in, dan blijft alles staan waar het stond. ### Per client - **Desktop** — `ShowPlayingTrack`, aangeroepen vanuit drie plekken en alle drie nodig: na een laadbeurt (het geval uit de issue), vanuit `OnPlayingTrackChanged` omdat **hervatten de lijst vult vóór het iets start** en de laadbeurt dus niets vindt dat speelt, en vanuit `OnIsGridViewChanged` omdat de verborgen lijst nooit gescrold is — een control zonder indeling heeft niets om te scrollen, wat ook de reden is dat `BringTrackIntoView` alleen die op het scherm doet en niet allebei. Het venster vult die haak in zoals het de dialogen invult: waar een regel staat is de lijst zijn zaak en een view model heeft geen lijst. Gepost op `Background`-prioriteit, want de regels zijn net toegevoegd en een lijst die ze nog niet ingedeeld heeft scrolt naar niets. - **Web** — `showPlaying()`, met `block: 'center'` in plaats van `nearest`: die lijst is net opnieuw opgebouwd en staat toch bovenaan, dus er is geen scrollpositie te bewaren, en een regel met wat buren eromheen leest beter dan een tegen de rand. - **Telefoon** — `TracksPage` scrolt zodra de index van de spelende track in de lijst op het scherm verandert. `onScrollToIndexFailed` is daarbij **de route die echt loopt**, geen randgeval: een FlatList kan alleen naar een regel die hij gemeten heeft, en van tweeduizend heeft hij er een handvol. De gemiddelde regelhoogte uit die melding brengt hem dichtbij, en de tweede sprong is exact. Geen `getItemLayout` in plaats daarvan — de regels groeien mee met de systeemletter, en een beloofde hoogte die niet meer klopt zou élke sprong in de lijst scheeftrekken, niet alleen deze. ### Eén fout die meekwam **`renderTracks` zette de playing-klasse niet terug.** De rijen worden bij elke laadbeurt opnieuw opgebouwd, dus weg bladeren van het spelende volume en terugkomen liet een lijst achter waarin niets meer als spelend gemarkeerd stond — geen ▶, en niets om naartoe te scrollen. ### Nagemeten, draaiend Lokale server tegen de echte database, met een track diep in de lijst: nummer 500 van de Top 2000, dat is regel 1500 van de 2000. - **Web**, in een echte Chromium: de spelende regel op index 1500 van 2000, gemeten tegen de trackkolom `visible: true` en ongeveer gecentreerd. Daarna weg gebladerd naar een artiest (niets gemarkeerd, lijst met rust gelaten) en terug op de collectie — weer gemarkeerd én in beeld, het geval dat eerst helemaal stuk was. - **Telefoon**, dev-client, koud opgestart: de Tracks-tab toont 505 tot en met 495 met **500 - Little Lion Man in het midden**. Ook nagedaan met RockHeaven volume 5 (nummer 492 van de honderd): zelfde plek op het scherm. - **Desktop**: door jou bevestigd — de spelende regel staat in beeld in plaats van dat de lijst bovenaan begint. Je afspeelpositie is daarna weer teruggezet op wat hij was (track 424, 92,6 s). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Een volume is honderd regels en de Top 2000 tweeduizend, dus een lijst die
bovenaan opent, opent nergens in de buurt van de ene regel waarvoor de
luisteraar kwam. Alle drie de spelers brengen die regel nu in beeld zodra een
lijst geladen wordt.

Het is de lijst die geladen wordt die beslist, niet de wachtrij: naar een ander
volume bladeren ontregelt bewust niet wat er speelt, en mag de lijst dus ook
niet verslepen. Staat de spelende track er niet in, dan blijft alles staan.

Op de desktop is dat ShowPlayingTrack, vanuit drie plekken en alle drie nodig:
na een laadbeurt, vanuit OnPlayingTrackChanged omdat hervatten de lijst vult
vóór het iets start, en bij het wisselen tussen tabel en tegels, omdat een
verborgen lijst geen indeling heeft om te scrollen. Het venster vult de haak in,
net als bij de dialogen: waar een regel staat is de lijst zijn zaak.

In de webspeler zette renderTracks de playing-klasse niet terug — weg bladeren
en terugkomen liet een lijst achter waarin niets meer speelde, zonder ▶ en
zonder iets om naartoe te scrollen. Dat is meteen mee opgelost.

Op de telefoon is onScrollToIndexFailed de route die echt loopt: een FlatList
kan alleen naar een regel die hij gemeten heeft, en van tweeduizend heeft hij er
een handvol. De gemiddelde regelhoogte uit die melding brengt hem dichtbij, en
de tweede sprong is exact. Geen getItemLayout, want de regels groeien mee met de
systeemletter.

Draaiend nagemeten op alle drie de clients.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
roelof merged commit 34c23223e7 into main 2026-08-05 11:14:05 +02:00
roelof deleted branch show-playing-track 2026-08-05 11:14:41 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
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
KavalirOS/RockHeaven!48
No description provided.