Changeset 0677bac in Klonkt for src/services/music/index.js


Ignore:
Timestamp:
08/09/2026 08:24:16 AM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
d60c498
Parents:
a5d14c7
Message:

De tags kwamen er als onzin uit, en de tekst helemaal niet (shaer-38y)

Live nagekeken op dev, en twee dingen klopten niet.

DE TAGS. posts.tags staat als JSON-ARRAY in de database, niet als kommalijst.
Mijn eigen split leverde #["Doen we Niet" en #"music" op -- geen fout die
omvalt, een die onzin uitlevert. Nu met normalizeTags en tagParts, dezelfde
parser als de rest, dus ook dezelfde CamelCase voor tags van meerdere woorden.

Die twee stonden in ActivityPubService en music/ mag daar niet uit importeren,
dus ze zijn naar ap-core verhuisd -- de plek voor precies dit soort gedeelde
grondstof. Een kopie maken zou hetzelfde uit elkaar lopen opleveren als bij de
afleidingsregel.

DE TEKST. De excerpt bleek in de praktijk vaak leeg, en dan kwam er geen
content mee terwijl de post wel tekst heeft. Nu: excerpt eerst -- die is
geschreven om samen te vatten -- en anders het lijf zelf, zonder shortcodes
(die zijn de muziek, niet het verhaal erover) en zonder opmaak. Blijft er niets
over, dan geen veld: dat is beter dan een leeg veld.

De test gebruikte de kommavorm en testte dus de terugval in plaats van de echte
weg. Nu JSON, zoals het er staat.

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

File:
1 edited

Legend:

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

    ra5d14c7 r0677bac  
    1414
    1515import db from '../../config/database.js';
    16 import { AP_CONTEXT, PUBLIC, actorId, noteId, safeUrl, guessMediaType } from '../ap-core.js';
     16import { AP_CONTEXT, PUBLIC, actorId, noteId, safeUrl, guessMediaType, normalizeTags, tagParts } from '../ap-core.js';
    1717import { afleidenUitInsluitingen, ingeslotenPlaylists } from '../../assets/js/shared/post-music-type.js';
    1818
     
    368368  // samenvatting en content het lijf. Artiest en jaar blijven dus in summary
    369369  // staan -- dat is een samenvatting, en de posttekst is dat niet.
    370   const tekst = (post.excerpt || '').trim();
     370  const tekst = tekstVanPost(post);
    371371  if (tekst) obj.content = tekst;
    372372
     
    388388}
    389389
    390 /** De tags van een post als AS2 Hashtags. Zelfde vorm als buildHashtagList. */
     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 */
    391397function hashtagsVanPost(base, tagsField) {
    392   const ruw = Array.isArray(tagsField)
    393     ? tagsField
    394     : String(tagsField || '').split(',');
    395398  const uit = [], gezien = new Set();
    396   for (const t of ruw) {
    397     const label = String(t || '').trim().replace(/^#/, '');
    398     if (!label) continue;
    399     const slug = label.toLowerCase().replace(/\s+/g, '-');
    400     if (gezien.has(slug)) continue;
    401     gezien.add(slug);
    402     uit.push({ type: 'Hashtag', href: `${base}/tag/${encodeURIComponent(slug)}`, name: '#' + label });
     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 });
    403404  }
    404405  return uit;
     406}
     407
     408/**
     409 * De tekst van een post, als er een is. De excerpt heeft voorrang -- die is
     410 * geschreven om samen te vatten. Staat die leeg, dan het lijf zelf: zonder
     411 * shortcodes (die zijn de muziek, niet het verhaal erover) en zonder opmaak.
     412 * Levert null als er niets overblijft, want een leeg veld is slechter dan geen.
     413 */
     414function tekstVanPost(post) {
     415  const excerpt = String(post.excerpt || '').trim();
     416  if (excerpt) return excerpt;
     417  const kaal = String(post.content || '')
     418    .replace(/\[\[[a-z]+:[^\]]*\]\]/gi, ' ')
     419    .replace(/<[^>]+>/g, ' ')
     420    .replace(/&nbsp;/gi, ' ')
     421    .replace(/&[a-z#0-9]+;/gi, ' ')
     422    .replace(/\s+/g, ' ')
     423    .trim();
     424  return kaal || null;
    405425}
    406426
Note: See TracChangeset for help on using the changeset viewer.