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


Ignore:
Timestamp:
08/13/2026 01:08:32 PM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
f59a46c
Parents:
5300652
git-author:
Robin <roboburr@…> (08/13/2026 12:16:47 PM)
git-committer:
Robin <roboburr@…> (08/13/2026 01:08:32 PM)
Message:

Het paneel hoort bij wie je bent, niet bij je bestanden (Robins correctie)

Verhuisd van Beheer -> Audio naar het profielscherm van de site-eigenaar, en
daar staat het NAAST de aliassen -- want dat is dezelfde vraag. Een alias zegt
wie je elders in de fediverse bent, een MBID zegt wie je in het muziekregister
bent. Bij de audiobestanden ging het over beheer van spullen; hier gaat het over
identiteit, en daar hoort het thuis.

DE VERHUIZING VERANDERDE DE VORM, en dat is de moeite waard om te weten. Het
profielscherm IS een formulier, en een formulier in een formulier bestaat niet
in HTML. Dus geen eigen opslaan-knop meer: de keuze zet een verborgen veld en
gaat mee met de Opslaan van de pagina, precies zoals de profielfoto. Dat leest
ook beter -- een halve wijziging die je nog kunt herzien voor je opslaat.

Ontkoppelen is nu het veld leegmaken, geen aparte route. Minder oppervlak.

Het zoek-endpoint ging mee naar /admin/sites/:slug/api/musicbrainz. Een endpoint
onder /admin/audio laten staan voor een scherm in /admin/sites is precies zo'n
naad die later niemand meer kan plaatsen. De teksten heten nu asite.mb_* in
plaats van aaud.mb_*, in alle drie de talen, met een placeholder erbij.

Wat NIET veranderde: de zoekopdracht draait server-side (hun regel geldt per
applicatie), wij kiezen niet voor de artiest, en alleen een echte MBID komt de
kolom in.

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

File:
1 edited

Legend:

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

    r5300652 r6401681  
    2323import { audioUrl } from '../services/AudioStreamService.js';
    2424import { mediaDir } from '../config/paths.js';
    25 import MusicBrainz from '../services/MusicBrainzService.js';
    2625
    2726const __dirname = path.dirname(fileURLToPath(import.meta.url));
     
    384383
    385384/** GET /admin/audio/api/albums — distinct list of album names (for datalist) */
    386 /**
    387  * "Ben jij dit?" -- kandidaten uit MusicBrainz (shaer-mbz, stap 1).
    388  *
    389  * De zoekopdracht draait HIER en niet in de browser: MusicBrainz staat een
    390  * verzoek per seconde toe per APPLICATIE, en dat is alleen af te dwingen als
    391  * alles langs een plek gaat. Bovendien eisen ze een User-Agent met contact, en
    392  * die kan een browser niet zetten.
    393  *
    394  * De keuze blijft van de artiest. Wij tonen kandidaten met hun toelichting; we
    395  * kiezen er niet zelf een, ook niet als er maar een treffer is -- een verkeerd
    396  * geraden MBID koppelt iemand aan het werk van een ander.
    397  */
    398 router.get('/api/musicbrainz', requireGod, async (req, res) => {
    399   const site = res.locals.site;
    400   if (!site) return res.status(404).json({ error: 'no_site' });
    401   // Standaard de artiestennaam die al in de site staat: negen van de tien keer
    402   // is dat precies waar iemand op zou zoeken.
    403   const q = String(req.query.q || site.author || site.title || '').trim();
    404   if (!q) return res.json({ ok: true, q: '', kandidaten: [] });
    405   const kandidaten = await MusicBrainz.zoekArtiesten(q);
    406   res.json({
    407     ok: true,
    408     q,
    409     gekoppeld: site.mb_artist_id
    410       ? { mbid: site.mb_artist_id, naam: site.mb_artist_name || '', url: MusicBrainz.artiestUrl(site.mb_artist_id) }
    411       : null,
    412     kandidaten,
    413   });
    414 });
    415 
    416 /**
    417  * De keuze vastleggen. Alleen een echte MBID komt de kolom in: de naam die we
    418  * ernaast bewaren is voor het scherm, de MBID is het enige dat naar buiten gaat.
    419  */
    420 router.post('/musicbrainz/link', requireGod, (req, res) => {
    421   const site = res.locals.site;
    422   if (!site) return res.status(404).end();
    423   const mbid = String(req.body.mbid || '').trim().toLowerCase();
    424   const naam = String(req.body.naam || '').trim().slice(0, 200);
    425   const terug = (res.locals.siteUrlBase || '') + '/admin/audio';
    426   if (!MusicBrainz.isMbid(mbid)) return res.redirect(`${terug}?error=` + encodeURIComponent('Geen geldige MusicBrainz-id.'));
    427   db.prepare('UPDATE sites SET mb_artist_id = ?, mb_artist_name = ? WHERE id = ?').run(mbid, naam || null, site.id);
    428   res.redirect(`${terug}?success=` + encodeURIComponent('Gekoppeld aan MusicBrainz.'));
    429 });
    430 
    431 /** Terugdraaien. Een verkeerde koppeling zet jouw naam onder andermans werk. */
    432 router.post('/musicbrainz/unlink', requireGod, (req, res) => {
    433   const site = res.locals.site;
    434   if (!site) return res.status(404).end();
    435   db.prepare('UPDATE sites SET mb_artist_id = NULL, mb_artist_name = NULL WHERE id = ?').run(site.id);
    436   res.redirect((res.locals.siteUrlBase || '') + '/admin/audio?success=' + encodeURIComponent('Ontkoppeld.'));
    437 });
    438 
    439385router.get('/api/albums', requireGod, (req, res) => {
    440386  const site = res.locals.site;
Note: See TracChangeset for help on using the changeset viewer.