Changeset cae7bfc in Klonkt for src/services/music/index.js


Ignore:
Timestamp:
08/08/2026 10:48:16 PM (4 weeks ago)
Author:
Robin <robin@…>
Branches:
main
Children:
c49808e
Parents:
6fab3f3
Message:

De afleiding: welk soort uitgave is een post? (shaer-cyg)

Robins regel gaat over identiteit en niet over tellen -- een post neemt het
type van zijn muziek over als hij precies EEN muzikale eenheid bevat. Zijn het
er meer, dan is de post een post die naar muziek verwijst en houden de
collecties hun eigen identiteit; daarmee vervalt de reden om de posttitel en
-cover te lenen vanzelf.

postMusicType() leest de shortcodes uit de post en geeft type, collectie,
bonus-tracks en leentMetadata terug. Een losse track naast een collectie is
geen rommelrestje maar een bonus-track, en dat maakt het geheel een album.

Een keuze die Robins formulering niet maakte: [[album:naam]] telt als
collectie, net als een playlist. Hem als losse tracks tellen zou een albumpost
stilletjes tot playlist maken.

Alleen de afleiding, nog niet aangesloten op de editor of op wat er federeert.

Co-Authored-By: Claude Opus 5 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/music/index.js

    r6fab3f3 rcae7bfc  
    332332  } catch { return null; }
    333333}
     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 */
     360export 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.