Changeset cae7bfc in Klonkt
- Timestamp:
- 08/08/2026 10:48:16 PM (4 weeks ago)
- Branches:
- main
- Children:
- c49808e
- Parents:
- 6fab3f3
- Files:
-
- 1 added
- 1 edited
-
src/services/music/index.js (modified) (1 diff)
-
test/music-type.test.js (added)
Legend:
- Unmodified
- Added
- Removed
-
src/services/music/index.js
r6fab3f3 rcae7bfc 332 332 } catch { return null; } 333 333 } 334 335 // ── Welk soort muzikale uitgave is deze post? (shaer-cyg) ───────────────── 336 337 /** 338 * Het type van een post afleiden uit de muziek die erin staat. 339 * 340 * DE REGEL GAAT OVER IDENTITEIT, NIET OVER TELLEN (Robins herformulering, 9-8): 341 * een post neemt het type van zijn muziek over als hij precies EEN muzikale 342 * eenheid bevat. Zijn het er meer, dan is de post een post die naar muziek 343 * verwijst, en houden de collecties hun eigen identiteit. 344 * 345 * losse track(s) -> playlist metadata van de post geleend 346 * een collectie -> die soort metadata van de post geleend 347 * een collectie + losse tracks -> album de losse zijn BONUS-TRACKS 348 * twee of meer collecties -> post NIETS geleend 349 * 350 * Waarom de lening bij de laatste vervalt: die bestaat omdat een collectie soms 351 * dun is -- geen eigen hoes, geen eigen titel. Bij twee is de post niet meer de 352 * drager van EEN identiteit, en vervalt de reden vanzelf. Dezelfde regel zet 353 * zichzelf uit. 354 * 355 * EEN COLLECTIE IS EEN PLAYLIST OF EEN ALBUM-INSLUITING. Robins regel noemde 356 * alleen playlists, maar [[album:naam]] groepeert net zo goed tracks en is 357 * letterlijk een album; hem als losse tracks tellen zou een albumpost tot 358 * playlist maken. Telt hij straks anders, dan is dat hier een regel. 359 */ 360 export function postMusicType(content) { 361 const c = String(content || ''); 362 const uniek = (re) => [...new Set([...c.matchAll(re)].map((m) => m[1].trim()))]; 363 364 const playlists = uniek(/\[\[playlist:([A-Za-z0-9_-]+)\]\]/g); 365 const albums = uniek(/\[\[album:([^\]]+)\]\]/g); 366 const tracks = uniek(/\[\[track:([A-Za-z0-9_-]+)\]\]/g); 367 368 const collecties = [ 369 ...playlists.map((id) => ({ soort: 'playlist', id })), 370 ...albums.map((naam) => ({ soort: 'album', naam })), 371 ]; 372 373 if (!collecties.length && !tracks.length) return null; // geen muziek 374 375 if (!collecties.length) { 376 // Ook EEN losse track wordt een playlist: naar buiten toe is er dan altijd 377 // een collectie om naar te wijzen. Hoe Klonkt dat toont is een aparte vraag. 378 return { type: 'playlist', collectie: null, tracks, bonus: [], leentMetadata: true }; 379 } 380 381 if (collecties.length === 1) { 382 const c0 = collecties[0]; 383 // Losse tracks naast een collectie zijn geen rommelrestje maar bonus-tracks, 384 // en dat maakt het geheel een album. 385 if (tracks.length) return { type: 'album', collectie: c0, tracks: [], bonus: tracks, leentMetadata: true }; 386 return { type: c0.soort, collectie: c0, tracks: [], bonus: [], leentMetadata: true }; 387 } 388 389 return { type: 'post', collecties, tracks, bonus: [], leentMetadata: false }; 390 }
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)