Ignore:
Timestamp:
08/22/2026 08:14:01 AM (3 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
25dd08f
Parents:
8ed36de
Message:

De mixtape als eigen soort: data en draad

Een bandje is geen album en geen afspeellijst. Een album is een uitgave -- de
nummers bestaan er los van. Bij een mixtape is de VOLGORDE het werk en zijn de
nummers onderdelen. Vandaar een eigen soort, en op de draad een enkel object
met de nummers erin.

De valkuil zat in de vorm die er al stond. De keuze album/playlist stond vijf
keer als x === 'playlist' ? 'playlist' : 'album' verspreid over drie
bestanden, en zo'n vorm valt bij een derde soort niet om -- hij slikt hem. Een
mixtape zou stilzwijgend een album zijn geworden en als Album de deur uit gaan.
De lijst staat nu een keer, in de pure gedeelde module, want die kent de
browser ook.

Op de draad:

  • type is de STRING 'Mixtape'. Geen array, en dat is geleerd: bij de playlist-collectie stond ooit ['OrderedCollection','Album'] -- geldig AS2 en werkelijk allebei -- en een lezer die type als tekst uitpakt (Shaer) verloor daarmee stil het hele object.
  • orderedItems op het object zelf, niet een collectie ernaast.
  • Geen released en geen musicbrainzId: die zouden beweren dat dit een uitgave is.
  • Geen eigen url. Robins keuze: het bandje is een omhulling, geen gerenderd bestand. Prijs ervan is opgeschreven bij de functie -- wie het type niet kent heeft geen stream, al staan de nummers er stuk voor stuk in.

Een mixtape met losse tracks erbij blijft een mixtape. De oude regel maakte
daar een album van met bonustracks; dat klopt voor een plaat en niet voor een
bandje. Album en playlist houden bewust hun oude gedrag, want dat zijn
bestaande posts.

Acht tests, waaronder de weg door de database heen in plaats van langs een
handgemaakte opzoeker.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/assets/js/shared/post-music-type.js

    r8ed36de rb0ccd0d  
    2121 *   een collectie                 -> die soort  metadata van de post geleend
    2222 *   een collectie + losse tracks  -> album      de losse zijn BONUS-TRACKS
     23 *   een MIXTAPE + losse tracks    -> mixtape    de losse zijn BONUS-TRACKS
    2324 *   twee of meer collecties       -> post       NIETS geleend
     25 *
     26 * Die vierde regel is de uitzondering op de derde en staat er met opzet naast:
     27 * bonustracks maken van een uitgave een album, maar een bandje is geen uitgave.
    2428 *
    2529 * Waarom de lening bij de laatste vervalt: die bestaat omdat een collectie soms
     
    3943// insluit, telt hier niet mee. Anders zou een shortcode die niets oplevert wel
    4044// het type van de post kunnen bepalen.
     45// De soorten die een playlist kan zijn, en dit is de ENIGE lijst. PlaylistService
     46// en music/index.js halen hem hier op, precies omdat het andersom niet kan:
     47// deze module draait ook in de browser en mag niets van de database weten.
     48//
     49// Waarom dat uitmaakt: bij twee soorten stond de keuze vijf keer als
     50// `x === 'playlist' ? 'playlist' : 'album'` verspreid over drie bestanden. Zo'n
     51// vorm valt niet om bij een derde soort, hij slikt hem -- een mixtape werd
     52// stilzwijgend een album en ging als Album de deur uit.
     53export const SOORTEN = ['album', 'playlist', 'mixtape'];
     54
    4155const RE_PLAYLIST = /\[\[playlist:([a-z0-9][a-z0-9-]*)\]\]/gi;
    4256const RE_ALBUM    = /\[\[album:([^\]]+)\]\]/g;
     
    6478  const uitPlaylists = playlists.map((id) => {
    6579    const kind = zoek(id);
    66     if (kind !== 'album' && kind !== 'playlist') { onbekend.push(id); return null; }
     80    if (!SOORTEN.includes(kind)) { onbekend.push(id); return null; }
    6781    return { soort: kind, id };
    6882  }).filter(Boolean);
     
    87101  if (collecties.length === 1) {
    88102    const c0 = collecties[0];
     103    // EEN MIXTAPE BLIJFT EEN MIXTAPE, ook met losse tracks erbij. De regel
     104    // hieronder maakt van collectie + losse tracks een album met bonustracks, en
     105    // dat klopt voor een uitgave: extra nummers bij een plaat zijn bonus. Een
     106    // bandje is geen uitgave. Er een album van maken omdat er een los nummer
     107    // naast staat zou het ding hernoemen op grond van iets wat er niet bij
     108    // hoort. Album en playlist houden bewust hun oude gedrag: dat zijn
     109    // bestaande posts en die mogen hier niet stilletjes van soort wisselen.
     110    if (c0.soort === 'mixtape') {
     111      return { type: 'mixtape', collectie: c0, tracks: [], bonus: tracks, leentMetadata: true };
     112    }
    89113    // Losse tracks naast een collectie zijn geen rommelrestje maar bonus-tracks,
    90114    // en dat maakt het geheel een album.
Note: See TracChangeset for help on using the changeset viewer.