Changeset e9ec5e4 in Klonkt for src/routes


Ignore:
Timestamp:
08/13/2026 06:16:49 PM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
fbda20e
Parents:
096f099
Message:

Volglijst: Featured is auto_boost, plus de knoppen om hem mee te nemen

Twee dingen: een correctie op de vorige commit, en de ingang die er nog niet was.

DE CORRECTIE. Ik had auto_boost in de kolom "Show boosts" gezet omdat in beide het
woord boost zit. Dat is fout. Bij Mastodon betekent die kolom "toon de reblogs van
deze persoon in mijn tijdlijn", en dat kent Klonkt niet; onze vlag gaat over hun
EIGEN posts in JOUW Cirkel. Dat is de vlag die in de UI al "Uitgelicht" heet
(tl.autoboost, in het Engels letterlijk "Featured"), dus hij hoort in de kolom
Featured en "Show boosts" blijft leeg.

Daarmee vervalt ook de kolom highlighted die ik in de vorige commit toevoegde:
die was een nieuw begrip naast een bestaand begrip met dezelfde naam. Eén ding, één
naam. Een bestand uit Mastodon levert nu featured: false, en dat is juist: hun
kolom 2 mag hier niet als uitgelicht binnenkomen.

DE INGANG. De vorige commit had de functies maar geen knop, en volgens de eigen
regel is een feature pas af als een eindgebruiker hem kan gebruiken. Op /following
staat nu een uitklapblok met een downloadknop en een plakveld.

De importroute geeft followActor mee als followFn, zodat er één pad naar een
volgrelatie blijft. Daar zat een val in: followActor meldt een fout als VELD en
niet als exception, dus zonder vertaling telde een onvindbaar account als geslaagd
mee. Die vertaling zit er nu in.

Changed files:
src/config/database.js

  • kolom highlighted teruggedraaid; commentaar bij auto_boost zegt nu dat het "Uitgelicht"/"Featured" heet

src/services/ArchiveExportService.js

  • auto_boost naar kolom Featured, Show boosts/Notify/Languages blijven leeg
  • parseFollowingCsv leest alleen kolom 5, en levert featured in plaats van twee velden

src/services/ArchiveImportService.js

  • de uitgelicht-stand gaat mee IN de Follow (derde argument), geen tweede UPDATE erna

src/routes/posts.js

  • GET /news/following.csv, met private/no-store want dit is jouw volglijst
  • POST /news/following/import, urlencoded, roept importFollowing aan met followActor

src/services/i18n.js

  • vijf teksten in nl, en en de

src/views/pages/following.ejs

  • het uitklapblok met de downloadknop en het plakveld

test/following-csv.test.js

  • bijgewerkt naar de juiste kolomindeling; de Mastodon-test controleert nu expliciet dat hun "Show boosts: true" NIET als uitgelicht landt

remarks: 921 groen in UTC en Europe/Amsterdam. Server gestart en de drie routes
nagelopen: alle drie bestaan en sturen naar de login, geen serverfouten. De template
apart gerenderd in nl/en/de, geen onvertaalde sleutels. De pagina zelf achter de
login niet visueel gezien; daar is een account voor nodig. Onderweg per ongeluk
.claude/launch.json overschreven (die zette PUBLIC_BASE_URL) en weer hersteld.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/posts.js

    r096f099 re9ec5e4  
    12851285});
    12861286
     1287// ── Je volglijst meenemen ─────────────────────────────────────────
     1288//
     1289// Zonder dit was verhuizen halfslachtig: de Move vertelt je VOLGERS waar je heen
     1290// ging, maar niets vertelde JOU wie jij volgde. Die lijst stond alleen in de
     1291// database die je achterlaat.
     1292router.get('/news/following.csv', requireSiteManager, async (req, res) => {
     1293  const site = res.locals.site;
     1294  const { followingCsv } = await import('../services/ArchiveExportService.js');
     1295  const csv = site ? followingCsv(site.slug) : null;
     1296  if (!csv) return res.redirect('/following?error=' + encodeURIComponent('Je volgt nog niemand'));
     1297  res.set('Content-Type', 'text/csv; charset=utf-8');
     1298  res.set('Content-Disposition', `attachment; filename="following-${site.slug}.csv"`);
     1299  // Privé: dit is de lijst van wie jij volgt, niets voor een cache onderweg.
     1300  res.set('Cache-Control', 'private, no-store');
     1301  res.send(csv);
     1302});
     1303
     1304router.post('/news/following/import', requireSiteManager, express.urlencoded({ extended: false, limit: '256kb' }), async (req, res) => {
     1305  const site = res.locals.site;
     1306  const csv = (req.body && req.body.csv) || '';
     1307  if (!site || !String(csv).trim()) return res.redirect('/following?error=' + encodeURIComponent('Geen lijst ontvangen'));
     1308
     1309  const { importFollowing } = await import('../services/ArchiveImportService.js');
     1310  // followActor als followFn: die doet de webfinger, stuurt de Follow en zet
     1311  // auto_boost meteen goed. Zo blijft er één pad naar een volgrelatie.
     1312  const r = await importFollowing(site, csv, {
     1313    followFn: async (s, adres, uitgelicht) => {
     1314      const uit = await ActivityPubService.followActor(s, adres, !!uitgelicht);
     1315      // followActor meldt een fout als VELD, niet als exception. Zonder deze
     1316      // vertaling telde een onvindbaar account gewoon als geslaagd mee.
     1317      if (uit && uit.error) throw new Error(uit.error);
     1318      return true;
     1319    },
     1320  });
     1321
     1322  const delen = [`${r.gevolgd} gevolgd`];
     1323  if (r.overgeslagen) delen.push(`${r.overgeslagen} overgeslagen`);
     1324  if (r.mislukt.length) {
     1325    const namen = r.mislukt.slice(0, 3).map((m) => m.adres).join(', ');
     1326    delen.push(`${r.mislukt.length} mislukt (${namen}${r.mislukt.length > 3 ? '…' : ''})`);
     1327  }
     1328  res.redirect('/following?' + (r.mislukt.length ? 'error=' : 'success=') + encodeURIComponent(delen.join(', ')));
     1329});
     1330
    12871331router.post('/news/unfollow', requireSiteManager, async (req, res) => {
    12881332  const site = res.locals.site;
Note: See TracChangeset for help on using the changeset viewer.