Changeset 9026de5 in Klonkt for src/services/music/index.js
- Timestamp:
- 08/16/2026 02:25:04 PM (3 weeks ago)
- Branches:
- main
- Children:
- 749605a
- Parents:
- 7090fd2
- File:
-
- 1 edited
-
src/services/music/index.js (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/music/index.js
r7090fd2 r9026de5 485 485 if (!pl) return null; 486 486 const abs = (u) => !u ? null : (/^https?:/i.test(u) ? u : `${base}${u.startsWith('/') ? '' : '/'}${u}`); 487 // GEEN epoch als terugval. `published` is bij hen verplicht, maar 1970 is een 488 // ANTWOORD en geen ontbrekend veld -- en dat is erger: een lezer kan een gat 489 // opmerken, een leugen niet. playlists.created_at heeft een default, dus als 490 // hij hier ontbreekt is er een leespad dat de kolom laat vallen. Dat willen we 491 // zien, niet maskeren. (Zo kwam op 16-8 de route boven water die id, title, 492 // artist, year, cover_url en kind selecteerde en de rest niet.) 493 const wanneer = pl.created_at ? new Date(pl.created_at).toISOString() : null; 487 // WANNEER IS DEZE PLAAT GEPUBLICEERD. De post die hem uitbrengt gaat voor, en 488 // niet als noodgreep maar omdat hij het beter weet: playlists.created_at is 489 // het moment waarop de RIJ is aangemaakt, en dat kan weken eerder zijn terwijl 490 // je nog aan het samenstellen was. AS2 `published` vraagt wanneer het object 491 // openbaar werd, en dat is de post. 492 // 493 // GEEN epoch als laatste terugval. `published` is bij hen verplicht, maar 1970 494 // is een ANTWOORD en geen ontbrekend veld -- en dat is erger: een lezer kan een 495 // gat opmerken, een leugen niet. Zo kwam op 16-8 de route boven water die id, 496 // title, artist, year, cover_url en kind selecteerde en de rest niet. 497 // 498 // OOK VOOR `released`, en daar had ik het eerst mis (Robin, 16-8). Mijn 499 // bezwaar was: post je vandaag een plaat uit 2018, dan beweert dit dat hij 500 // vandaag uitkwam. Dat gebeurt ook -- maar bij de meeste Klonkt-sites IS de 501 // post het uitbrengen, en GEEN datum is slechter dan een datum die op het 502 // gewone geval klopt. Het handmatige veld is precies het gereedschap voor de 503 // uitzondering: bij een heruitgave vul je hem in en die wint. 504 const postDatum = (pl._post && pl._post.uit_wanneer) ? new Date(pl._post.uit_wanneer) : null; 505 const wanneer = postDatum ? postDatum.toISOString() 506 : (pl.created_at ? new Date(pl.created_at).toISOString() : null); 494 507 // Dezelfde lening als in buildPlaylistCollection: de post die de plaat 495 508 // uitbrengt geeft zijn titel, en de eigen titel blijft als alsoKnownAs staan. … … 504 517 }; 505 518 if (titel !== pl.title) album.alsoKnownAs = pl.title; 506 // `released` alleen als er een ECHTE datum is. `year` vult hem niet aan: een 507 // jaartal is geen dag, en dat is de reden dat release_date bestaat. 519 // Het ingevulde veld wint altijd; anders de DAG waarop de post verscheen. 520 // `year` vult hem nog steeds niet aan, en dat is geen inconsequentie: een 521 // jaartal is geen dag, terwijl de postdatum een gebeurtenis is die werkelijk 522 // heeft plaatsgevonden. Het verschil is verzinnen versus afleiden. 508 523 if (pl.release_date) album.released = pl.release_date; 524 else if (postDatum) album.released = postDatum.toISOString().slice(0, 10); 509 525 if (pl.mb_release_id) album.musicbrainzId = pl.mb_release_id; 510 526 const hoes = abs(pl.cover_url || null); … … 522 538 const hostPosts = site.id ? trackHostPosts(site.id) : null; 523 539 const albums = site.id ? trackAlbums(site.id) : null; 540 // EEN keer opzoeken en twee keer gebruiken: het Album leent er zijn datums en 541 // titel van, leenVanPost onderaan zijn tekst en tags. Twee losse aanroepen 542 // zouden niet alleen dubbel werk zijn maar ook uiteen kunnen lopen -- en dan 543 // staat er weer iets anders op het ingesloten object dan op zijn eigen URI. 544 const post = site.id ? uitgavePost(site.id, playlist.id) : null; 524 545 const items = (rows || []).map((r) => buildTrackAudio(base, site, r, { coverFallback: playlist.cover_url || null, hostPosts, albums })); 525 546 const out = pagedCollection(`${actorId(base, site.slug)}/playlists/${playlist.id}`, items, { … … 547 568 // staat toch al ingesloten op de track. 548 569 if ((playlist.kind || 'album') === 'album') { 549 const album = buildAlbumObject(base, site, playlist);570 const album = buildAlbumObject(base, site, { ...playlist, _post: post }); 550 571 for (const veld of ['published', 'released', 'musicbrainzId', 'artist_credit', 'image']) { 551 572 if (album[veld] !== undefined) out[veld] = album[veld]; 552 573 } 553 574 } 554 return leenVanPost(base, site, out, uitgavePost(site.id, playlist.id));575 return leenVanPost(base, site, out, post); 555 576 } 556 577 … … 577 598 try { 578 599 const rijen = db.prepare(` 579 SELECT id, slug, title, excerpt, content, cover_image_url, tags 600 SELECT id, slug, title, excerpt, content, cover_image_url, tags, 601 COALESCE(published_at, created_at) AS uit_wanneer 580 602 FROM posts 581 603 WHERE site_id = ? AND status = 'published'
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)