Changeset ea3e722 in Klonkt for src/services/music/index.js


Ignore:
Timestamp:
08/09/2026 08:34:57 AM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
5ae4d61
Parents:
d60c498
Message:

Een hashtag hoort te staan zoals hij geschreven is (Robins punt, 9-8)

Stond een tag zowel in het tagveld als in het lijf van de post, dan won de vorm
uit het veld. Die gaat door tagParts, want een hashtag mag geen spaties
bevatten en "Doen we Niet" wordt daar #DoenWeNiet van. Nodig voor een tag die
alleen in het veld staat -- maar als iemand in zijn tekst #DoenweNiet heeft
getypt is dat geen benadering meer maar de tag zelf, en die verdween als
duplicaat van de genormaliseerde vorm.

Nu gaat het lijf voor: de geschreven vorm wint, en het tagveld vult aan wat er
niet staat. De slug in de href blijft kleingeschreven -- dat is een adres, geen
naam.

En de uitgave-collectie gebruikt nu diezelfde lijst in plaats van een eigen: ze
miste de tags uit de tekst helemaal, en spelde de rest anders dan dezelfde post
elders deed. buildHashtagList en hashtagTags zijn daarvoor van
ActivityPubService naar ap-core verhuisd, want music/ mag daar niet uit
importeren.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/music/index.js

    rd60c498 rea3e722  
    1414
    1515import db from '../../config/database.js';
    16 import { AP_CONTEXT, PUBLIC, actorId, noteId, safeUrl, guessMediaType, normalizeTags, tagParts } from '../ap-core.js';
     16import { AP_CONTEXT, PUBLIC, actorId, noteId, safeUrl, guessMediaType, buildHashtagList } from '../ap-core.js';
    1717import { afleidenUitInsluitingen, ingeslotenPlaylists } from '../../assets/js/shared/post-music-type.js';
    1818
     
    377377  }
    378378
    379   const tags = hashtagsVanPost(base, post.tags);
     379  // Dezelfde lijst als de Note: het tagveld EN de hashtags uit het lijf, waarbij
     380  // de geschreven vorm voorgaat. Een eigen lijst hier zou de tags uit de tekst
     381  // missen en de rest anders spellen dan dezelfde post elders doet.
     382  const tags = buildHashtagList(base, post.tags, post.content);
    380383  if (tags.length) obj.tag = tags;
    381384
     
    386389  obj.context = noteId(base, post.id);
    387390  return obj;
    388 }
    389 
    390 /**
    391  * De tags van een post als AS2 Hashtags -- zelfde vorm als buildHashtagList.
    392  *
    393  * Met normalizeTags en niet met een eigen split: het veld staat als JSON-array
    394  * in de database, en op komma's splitsen leverde live `#["Doen we Niet"` op.
    395  * Dat is het soort fout dat niet omvalt maar onzin uitlevert.
    396  */
    397 function hashtagsVanPost(base, tagsField) {
    398   const uit = [], gezien = new Set();
    399   for (const t of normalizeTags(tagsField)) {
    400     const p = tagParts(t);
    401     if (!p || gezien.has(p.slug)) continue;
    402     gezien.add(p.slug);
    403     uit.push({ type: 'Hashtag', href: `${base}/tag/${encodeURIComponent(p.slug)}`, name: '#' + p.label });
    404   }
    405   return uit;
    406391}
    407392
Note: See TracChangeset for help on using the changeset viewer.