Changeset 5300652 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:
6401681
Parents:
a117862
git-author:
Robin <roboburr@…> (08/13/2026 12:10:40 PM)
git-committer:
Robin <roboburr@…> (08/13/2026 01:08:32 PM)
Message:

Stap 2: "Ben jij dit?" in Beheer -> Audio (shaer-mbz)

Een paneel bovenaan het audioscherm: zoek op je artiestennaam (voorgevuld met
wat er al in de site staat), kies je eigen pagina, klaar. Drie talen.

DE TOELICHTING IS HET HELE PUNT. Elke kandidaat toont MusicBrainz'
disambiguation naast soort, land en jaren -- er zijn drie bands die Nirvana
heten, en met alleen een naam kiest iemand de verkeerde. Wij kiezen NIET voor
de artiest, ook niet als er precies een treffer is: een verkeerd geraden MBID
zet jouw naam onder andermans werk.

ONTKOPPELEN KAN. Om dezelfde reden: zo'n vergissing hoort met een klik terug
te draaien te zijn, niet met een databasebewerking.

Alleen een echte MBID komt de kolom in; de route weigert een URL of een handle.
De naam bewaren we ernaast zodat het scherm kan tonen WAT er hangt zonder
ervoor te netwerken -- en zodat een verkeerde koppeling opvalt.

TWEE DINGEN UIT DE HUISREGELS. De kandidaten gaan met textContent het scherm op
en niet als HTML: dat is tekst uit een vreemd register. En het blok hangt in
run() en niet op moduleniveau -- deze modules krijgen bij elke paginawissel
opnieuw init(), en een blok dat maar een keer per sessie draait is precies wat
shaer-5s1 opleverde. Ik had hem er eerst buiten gezet.

Als iemand niet in MusicBrainz staat zegt het scherm dat hij zich daar kan
aanmelden -- en erbij dat dat alleen dáár kan, niet vanuit Klonkt. Dat is geen
bescheidenheid maar hun API: artiesten zijn er niet mee aan te maken.

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

File:
1 edited

Legend:

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

    ra117862 r5300652  
    414414});
    415415
     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 */
     420router.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. */
     432router.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
    416439router.get('/api/albums', requireGod, (req, res) => {
    417440  const site = res.locals.site;
Note: See TracChangeset for help on using the changeset viewer.