Changeset 7090fd2 in Klonkt
- Timestamp:
- 08/16/2026 02:12:14 PM (3 weeks ago)
- Branches:
- main
- Children:
- 9026de5
- Parents:
- aebde2b
- Files:
-
- 4 edited
-
scripts/funkwhale-gat.mjs (modified) (1 diff)
-
src/routes/activitypub.js (modified) (1 diff)
-
src/services/PlaylistService.js (modified) (1 diff)
-
src/services/music/index.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
scripts/funkwhale-gat.mjs
raebde2b r7090fd2 52 52 const items = pagina.items || pagina.orderedItems || []; 53 53 if (!items.length) { console.log('geen items in de bibliotheek'); process.exit(1); } 54 const a = items[0];55 54 56 console.log(`bron: ${BRON}\nitem: ${a.name}\n`); 55 // ALLE items, niet het eerste. De eerste versie keek naar items[0] en gaf 56 // daarover een oordeel alsof het over de bibliotheek ging -- op 16-8 meldde hij 57 // zo `track.album` als GAT terwijl drie van de vier tracks hem wel hadden: het 58 // ene nummer dat hij toevallig pakte stond niet op een plaat. Een steekproef 59 // van een is geen meting, en een meting die je vertrouwt moet zeggen hoeveel. 60 console.log(`bron: ${BRON}\nitems: ${items.length}\n`); 61 57 62 let gaten = 0; 58 const toon = (lijst, waarde) => { 63 const toon = (kop, lijst, kies) => { 64 console.log(kop); 59 65 for (const [naam, test] of lijst) { 60 let ok = false; 61 try { ok = !!test(waarde); } catch { ok = false; } 62 if (!ok) gaten++; 63 console.log(` ${ok ? 'OK ' : 'GAT'} ${naam}`); 66 let ok = 0; 67 for (const a of items) { try { if (test(kies(a))) ok++; } catch { /* telt als niet ok */ } } 68 const staat = ok === items.length ? 'OK ' : (ok === 0 ? 'GAT' : 'DEELS'); 69 if (ok !== items.length) gaten++; 70 console.log(` ${staat.padEnd(5)} ${naam}${ok !== items.length ? ` (${ok}/${items.length})` : ''}`); 64 71 } 65 72 }; 66 console.log('UploadSerializer (regel 1741):'); 67 toon(UPLOAD, a); 68 console.log('\nTrackSerializer (regel 1569 + MusicEntity 1278):'); 69 toon(TRACK, a.track); 73 toon('UploadSerializer (regel 1741):', UPLOAD, (a) => a); 74 console.log(); 75 toon('TrackSerializer (regel 1569 + MusicEntity 1278):', TRACK, (a) => a.track); 70 76 71 console.log(`\n${gaten === 0 ? 'niets meer nodig voor hun ingest' : gaten + ' veld(en) te gaan'}`);77 console.log(`\n${gaten === 0 ? 'niets meer nodig voor hun ingest' : gaten + ' veld(en) nog niet op ELK item'}`); -
src/routes/activitypub.js
raebde2b r7090fd2 1202 1202 const site = publicSite(req.params.slug); 1203 1203 if (!site) return res.status(404).end(); 1204 const pl = db.prepare('SELECT id, title, artist, year, cover_url, kind FROM playlists WHERE id = ? AND site_id = ?')1204 const pl = db.prepare('SELECT id, title, artist, year, cover_url, kind, release_date, mb_release_id, created_at FROM playlists WHERE id = ? AND site_id = ?') 1205 1205 .get(req.params.id, site.id); 1206 1206 if (!pl) return res.status(404).end(); -
src/services/PlaylistService.js
raebde2b r7090fd2 155 155 cover: p.cover_url || fallbackCover, 156 156 kind: (p.kind === 'playlist') ? 'playlist' : 'album', 157 // created_at hoort erbij omdat de AP-kant er `published` van maakt. Zonder 158 // dit veld viel buildAlbumObject terug op 1970, en dat stond op 16-8 159 // gewoon op de federatie. 160 created_at: p.created_at, 157 161 // Leeg als het een afspeellijst is -- de opslag houdt ze daar al leeg, 158 162 // maar dit is de plek waar de editor leest en die mag niet afhangen van -
src/services/music/index.js
raebde2b r7090fd2 451 451 const uit = new Map(); 452 452 for (const r of rijen) if (!uit.has(r.tid)) uit.set(r.tid, r); 453 // De post die deze plaat uitbrengt, EEN keer per album opgezocht en niet per 454 // track: uitgavePost() doet er echt werk voor (hij leest de typering van de 455 // post) en een site heeft veel meer nummers dan platen. 456 // 457 // WAAROM DIT ERBIJ MOET: buildPlaylistCollection laat leenVanPost de naam van 458 // de post overnemen -- de post IS de uitgave. Zonder dezelfde lening hier zou 459 // het ingesloten Album "Cartoon Epic" heten en zijn eigen URI "Geen koffie, 460 // wel thee!". Een id met twee namen, en dat is precies wat op 16-8 uit de 461 // meting rolde. 462 const perAlbum = new Map(); 463 for (const r of uit.values()) { 464 if (perAlbum.has(r.id)) continue; 465 perAlbum.set(r.id, uitgavePost(siteId, r.id)); 466 } 467 for (const r of uit.values()) r._post = perAlbum.get(r.id) || null; 453 468 return uit; 454 469 } … … 470 485 if (!pl) return null; 471 486 const abs = (u) => !u ? null : (/^https?:/i.test(u) ? u : `${base}${u.startsWith('/') ? '' : '/'}${u}`); 472 const wanneer = pl.created_at ? new Date(pl.created_at).toISOString() : new Date(0).toISOString(); 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; 494 // Dezelfde lening als in buildPlaylistCollection: de post die de plaat 495 // uitbrengt geeft zijn titel, en de eigen titel blijft als alsoKnownAs staan. 496 const titel = (pl._post && pl._post.title) || pl.title; 473 497 const album = { 474 498 type: 'Album', 475 499 id: `${actorId(base, site.slug)}/playlists/${pl.id}`, 476 name: pl.title,477 published: wanneer,500 name: titel, 501 ...(wanneer ? { published: wanneer } : {}), 478 502 attributedTo: actorId(base, site.slug), 479 artist_credit: artistCredit(base, site, pl.artist, wanneer ),503 artist_credit: artistCredit(base, site, pl.artist, wanneer || new Date().toISOString()), 480 504 }; 505 if (titel !== pl.title) album.alsoKnownAs = pl.title; 481 506 // `released` alleen als er een ECHTE datum is. `year` vult hem niet aan: een 482 507 // jaartal is geen dag, en dat is de reden dat release_date bestaat.
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)