Ignore:
Timestamp:
08/14/2026 12:03:55 AM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
eb071a7
Parents:
9529d7b
Message:

Hoezen en playlists reisden nog niet mee

Robin, na de vorige ronde: "de audio tracks hadden images, die zijn niet
meegegaan, de playlists zijn ook nog niet meegegaan via peer to peer."

Allebei terecht, en de eerste is dezelfde fout als bij de audio zelf, een laag
hoger. cover_url ging wel mee als STRING en het bestand niet. Dus kwam een
nummer aan met een verwijzing naar een plaatje dat er niet was: precies de
halve waarheid die deze hele reeks moest opruimen, en ik liep er zelf opnieuw
in.

De playlists gingen wel via de zip en niet via de ophaalknop. Die liep de
tracks-collectie af en de playlist-collectie niet, en dan heb je alle muziek
en geen enkele plaat. De volgorde staat nergens anders.

Wat er nog meer boven kwam bij het naspelen: over AP komt de duur als
ISO-8601 ("PT212S") binnen en de database wil seconden, en de artiest zit in
summary, niet in een artist-veld. Zonder die twee kwamen nummers naamloos en
zonder duur aan.

En de bronkant moest ook hier open: playlistOpenTracks filtert op fedi_open,
dus de doel-actor kreeg een plaat met gaten. Nu geldt daar dezelfde regel als
bij de outbox en de tracks.

Bewezen op twee draaiende instanties, 3 nummers met hoes plus een plaat in de
volgorde c-a-b:

peer to peer mp3 2503b, hoes 74b, artiest, duur, plaat C -> A -> B
zip idem, plus kind=album

Changed files:
src/services/ArchiveExportService.js

  • hoesToevoegen(): de BYTES van een hoes in het archief, voor tracks en playlists, met shaer:coverFile ernaast

src/services/ArchiveImportService.js

  • hoesTerug(): de hoes op schijf en cover_url daarheen; geen bestand betekent geen cover_url, liever niets dan een img die 404't

src/services/MigrationService.js

  • de ingest haalt de hoes op uit icon/image, ONDERTEKEND
  • de playlists erbij, met hun volgorde en een kaart bron-URI -> nieuw id
  • duurSeconden(): PT212S naar 212; artiest uit summary

src/services/music/index.js

  • playlistOpenTracks({ alles }) voor de doel-actor van een Move

src/routes/activitypub.js

  • de playlist-route geeft die doel-actor de volledige plaat

remarks: over AP komt kind (album/playlist) niet mee, want de AP-collectie
draagt dat veld niet; via de zip wel. Klein verschil, apart te repareren als het
hindert.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/ArchiveExportService.js

    r9529d7b r98acb97  
    182182 * @returns {Map<string,string>} trackId -> pad in het archief
    183183 */
    184 function audioBibliotheek(site, bestanden, tellingen, ontbrekend) {
     184/**
     185 * Een hoes in het archief leggen.
     186 *
     187 * cover_url reisde wel mee als STRING en het bestand niet, dus kwam een track
     188 * aan met een verwijzing naar een plaatje dat er niet was. Precies dezelfde
     189 * fout als bij de audio zelf, een laag hoger: een verwijzing zonder bytes.
     190 *
     191 * @returns {string|null} het pad in het archief, of null
     192 */
     193function hoesToevoegen(url, origin, bestanden, tellingen) {
     194  const schijf = localMediaPath(url, origin);
     195  if (!schijf) return null;
     196  let bytes = null;
     197  try { bytes = fs.readFileSync(schijf); } catch { return null; }
     198  const hash = sha256(bytes);
     199  const naam = `media/${hash}${extOf(url) ? `.${extOf(url)}` : ''}`;
     200  if (!bestanden.has(naam)) { bestanden.set(naam, bytes); tellingen.media += 1; }
     201  return naam;
     202}
     203
     204function audioBibliotheek(site, origin, bestanden, tellingen, ontbrekend) {
    185205  const kaart = new Map();
    186206  let tracks = [];
     
    217237      credit: t.credit || undefined, license: t.license || undefined,
    218238      'shaer:coverUrl': t.cover_url || undefined,
     239      // De BYTES van de hoes, niet alleen de verwijzing.
     240      'shaer:coverFile': hoesToevoegen(t.cover_url, origin, bestanden, tellingen) || undefined,
    219241      'shaer:downloadable': t.downloadable ? 1 : 0,
    220242      'shaer:fediOpen': t.fedi_open ? 1 : 0,
     
    243265        id: p.id, name: p.title || '', artist: p.artist || undefined, year: p.year || undefined,
    244266        'shaer:kind': p.kind || undefined, 'shaer:coverUrl': p.cover_url || undefined,
     267        'shaer:coverFile': hoesToevoegen(p.cover_url, origin, bestanden, tellingen) || undefined,
    245268        'shaer:tracks': db.prepare('SELECT track_id, position FROM playlist_tracks WHERE playlist_id = ? ORDER BY position')
    246269          .all(p.id).map((r) => ({ id: r.track_id, position: r.position })),
     
    459482  // De audiobibliotheek EERST. De posts verwijzen ernaar met [[track:]], dus de
    460483  // kaart moet klaar zijn voor de eerste post gebouwd wordt.
    461   const audioKaart = audioBibliotheek(site, bestanden, tellingen, ontbrekend);
     484  const audioKaart = audioBibliotheek(site, origin, bestanden, tellingen, ontbrekend);
    462485
    463486  // Vaste volgorde: eerst op publicatiedatum, dan op id. Zonder tweede sleutel
Note: See TracChangeset for help on using the changeset viewer.