Changeset 8ed36de in Klonkt for src/routes/admin-audio.js


Ignore:
Timestamp:
08/21/2026 04:57:20 PM (3 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
b0ccd0d
Parents:
4e5fe29
Message:

Een verwijderde track kondigt zichzelf aan, net als een post

Een post stuurt bij verwijderen een Delete(Tombstone) naar zijn volgers; een
track deed dat niet. De rij ging weg, het Audio-object gaf 404, en elke server
die hem had geindexeerd bleef ernaar wijzen. Op de hub stond het er vandaag als
een kaartje met een dode link, en het viel alleen op doordat robo het zag.

Sinds shaer-0nh is een track een eersterangs Audio-object met een eigen id, dus
hij hoort ook een eigen afmelding te krijgen.

  • deliverObjectDelete(site, objectId) is de gedeelde romp; deliverDelete en het nieuwe deliverTrackDelete leunen er allebei op. Het object-id komt van de aanroeper, want bij verwijderen is de rij vaak al weg.
  • trackUri() staat nu op EEN plek in music/index.js. Het formaat werd eerder alleen door de bouwkant gekend, en een tweede plek die het opnieuw in elkaar zet is precies hoe je een Delete stuurt die de ontvanger niet herkent.
  • Beide verwijderroutes in admin-audio melden af: de losse verwijdering en de opruiming van wezen. Een wees is voor ONS een track zonder bestand, maar de buitenwereld heeft een gewoon Audio-object opgeslagen.

Twee tests door de echte route. Een testhaak op deliver() bestaat niet, dus de
proef kijkt in ap_delivery: de volger krijgt een inbox op een dichte poort, de
directe poging faalt, en de activiteit hoort in de wachtrij te belanden. Die
tabel was in het echte geval leeg, dus dat is precies het bewijs. Controleproef
gedraaid: zonder de aankondiging valt de test om.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/admin-audio.js

    r4e5fe29 r8ed36de  
    2323import { audioUrl } from '../services/AudioStreamService.js';
    2424import { mediaDir } from '../config/paths.js';
     25import * as ActivityPubService from '../services/ActivityPubService.js';
    2526
    2627const __dirname = path.dirname(fileURLToPath(import.meta.url));
     
    301302  if (!track) return res.redirect('/admin/audio?error=Not+found');
    302303
     304  // Zeg de fediverse dat de track weg is, VOOR de rij verdwijnt -- zelfde
     305  // volgorde en zelfde reden als bij een post (posts.js). Zonder dit blijft
     306  // elke server die hem indexeerde ernaar wijzen terwijl het object 404 geeft;
     307  // op de hub stond daardoor op 21-8 een track met een dode link.
     308  ActivityPubService.deliverTrackDelete(site, track.track_id).catch(() => { /* best-effort */ });
     309
    303310  db.prepare('DELETE FROM audio_tracks WHERE id = ?').run(track.track_id);
    304311  if (track.media_id) {
     
    371378    if (o.media_id) db.prepare('DELETE FROM media WHERE id = ?').run(o.media_id);
    372379  });
    373   for (const o of orphans) deleteOne(o);
     380  for (const o of orphans) {
     381    // Ook hier aankondigen. Een wees is voor ONS een track zonder bestand, maar
     382    // voor de buitenwereld was het een gewoon Audio-object dat zij hebben
     383    // opgeslagen; stil weggooien laat hun kopie staan.
     384    ActivityPubService.deliverTrackDelete(site, o.track_id).catch(() => { /* best-effort */ });
     385    deleteOne(o);
     386  }
    374387
    375388  res.json({ ok: true, deleted: orphans.length });
Note: See TracChangeset for help on using the changeset viewer.