Changeset a982e7e in Klonkt
- Timestamp:
- 08/16/2026 12:53:33 PM (3 weeks ago)
- Branches:
- main
- Children:
- daa8eb8
- Parents:
- abd2093
- Files:
-
- 1 added
- 2 edited
-
src/services/ap-core.js (modified) (1 diff)
-
src/services/music/index.js (modified) (1 diff)
-
test/ap-fw-track.test.js (added)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ap-core.js
rabd2093 ra982e7e 57 57 // zou een verhuizing kunnen laten mislukken. 58 58 sameAs: { '@id': 'schema:sameAs', '@type': '@id' }, 59 // ── De ENIGE term die we uit Funkwhale's eigen vocabulaire overnemen──59 // ── Wat we uit Funkwhale's vocabulaire overnemen, en waarom ── 60 60 // 61 // Waarom deze wel en track/ArtistCredit niet (shaer-0nh): die twee vragen62 // ENTITEITEN waar wij tekst hebben -- een artiest en een album zijn bij ons63 // kolommen, en er een id voor verzinnen zou beloven wat we niet kunnen64 // waarmaken. Een Library is iets anders: het is precies wat we AL hebben,65 // een verzameling van onze eigen open tracks met een echte telling.61 // LIBRARY. Gemeten op 13-8: open.audio had onze vier tracks binnengehaald 62 // via hun AP-id, met een artist_credit dat het zelf uit onze attributedTo 63 // afleidde -- maar uploads LEEG en is_playable false. Bij Funkwhale hangt 64 // een upload aan een library; zonder die bak blijft een track een naam 65 // zonder geluid. 66 66 // 67 // En hij doet iets. Gemeten op 13-8: open.audio heeft onze vier tracks 68 // binnengehaald via hun AP-id, met artist_credit dat het zelf uit onze 69 // attributedTo afleidde -- maar uploads is LEEG en is_playable false. Bij 70 // Funkwhale hangt een upload aan een library; zonder library is er geen bak 71 // om het bestand in te hangen, en blijft een track een naam zonder geluid. 67 // TRACK. Hier stond dat we deze NIET namen, met als reden: hij vraagt een 68 // entiteit waar wij tekst hebben, en er een id voor verzinnen belooft wat 69 // we niet waarmaken. Die redenering klopte half, en de Emissary-meting van 70 // 16-8 (shaer-3f8a) laat zien welke helft. Een TRACK heeft bij ons wel 71 // degelijk een eigen identiteit -- het is een rij met een titel en een 72 // plaats in een uitgave. Wat wij niet hebben is een ALBUM als entiteit, en 73 // dat is een andere vraag (shaer-k37k). Emissary stuurt precies die kleine 74 // vorm: type, id, name, position. Wij ook, en album blijft eruit tot het 75 // een echt object is -- een verzonnen album-URI is nu juist wel de belofte 76 // die we niet kunnen waarmaken. 77 // 78 // Twee onafhankelijke implementaties zenden dit nu, en het is de kant waar 79 // FEP-be68 heen beweegt. ArtistCredit blijft eruit: dat is nog steeds een 80 // entiteit die wij niet hebben. 81 // 82 // De vorm van de termen is letterlijk die van hun contexts.py (regel 83 // 293-306), zodat een lezer die hun context laadt en een lezer die de onze 84 // leest op dezelfde IRI's uitkomen. 72 85 fw: 'https://funkwhale.audio/ns#', 73 86 Library: 'fw:Library', 74 87 library: { '@id': 'fw:library', '@type': '@id' }, 88 Track: 'fw:Track', 89 track: { '@id': 'fw:track', '@type': '@id' }, 75 90 position: 'schema:position', 76 91 bitrate: 'schema:bitrate', -
src/services/music/index.js
rabd2093 ra982e7e 182 182 // van te maken. 183 183 if (post) a.context = noteId(base, post.id); 184 // Het NUMMER, los van dit bestand (shaer-3f8a, spoor B). Funkwhale en 185 // Emissary lezen allebei `fw:track`, en petitminion noemde het ontbreken 186 // ervan als eerste wat hem opviel aan onze objecten. 187 // 188 // EIGEN ID MET #track, en niet hetzelfde id als de Audio. Emissary hergebruikt 189 // daar het object-id, maar dan zijn in JSON-LD de Audio en de Track EEN knoop 190 // met twee typen -- en een bestand is geen werk. Dat verschil moeten we straks 191 // toch maken, want een album verzamelt nummers en geen mp3's. Een fragment is 192 // een geldige IRI en wijst naar hetzelfde document. 193 // 194 // GEEN `album`. Dat veld is bij hen een URI naar een Album-object en bij ons 195 // een tekstkolom; er hier een adres van maken zou een ding beloven dat niet 196 // bestaat. Zie shaer-k37k -- dat is de keuze die daarvoor eerst moet vallen. 197 a.track = { 198 type: 'Track', 199 id: `${a.id}#track`, 200 name: a.name, 201 ...(Number(r.position) ? { position: Number(r.position) } : {}), 202 }; 184 203 if (r.duration) a.duration = `PT${Math.round(r.duration)}S`; 185 204 if (r.created_at) a.published = new Date(r.created_at).toISOString();
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)