Changeset 383e897 in Klonkt for src


Ignore:
Timestamp:
08/10/2026 06:16:16 PM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
fc9ca9d
Parents:
e215090
Message:

De badge telt niet wat de poort verbergt

Gevonden bij het bijwerken van de bead, niet bij het bouwen: unreadPerConversation
telde alle inkomende berichten, ook die de app achter een dichte messages-poort
nooit toont. Dan vertelt het getal precies wat de poort verbergt.

Nu dezelfde regel als bij de serialisatie: dicht telt niet mee, behalve wat er
altijd door mag -- het guardian-kanaal en de boei.

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

Location:
src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/routes/activitypub.js

    re215090 r383e897  
    562562  // dezelfde categorie als shaer:liked. Niet in totalItems persen: dat betekent
    563563  // 'hoeveel er zijn' en niet 'hoeveel jij nog niet zag'.
    564   const ongelezen = AP.unreadPerConversation(auth.site.slug);
     564  const ongelezen = AP.unreadPerConversation(auth.site.slug, {
     565    messagesAllowed: P.messagesAllowed,
     566    guardians: (() => { try { return new Set(Guardianship.listGuardians(auth.site.slug).map((g) => g.other_uri)); } catch { return new Set(); } })(),
     567  });
    565568  const gezien = new Set();
    566569  for (const { head, item } of pairs) {
  • src/services/ActivityPubService.js

    re215090 r383e897  
    44104410 * Eigen berichten tellen nooit mee: je hebt jezelf gelezen.
    44114411 */
    4412 export function unreadPerConversation(slug) {
    4413   try {
     4412export function unreadPerConversation(slug, { messagesAllowed = true, guardians = new Set() } = {}) {
     4413  try {
     4414    // DE POORT TELT MEE. Staat messages dicht, dan toont de app die berichten
     4415    // niet -- en dan mag een badge ze ook niet aankondigen, want dat getal
     4416    // vertelt precies wat de poort verbergt. Wat er altijd door mag telt wel:
     4417    // het guardian-kanaal en de boei. Zelfde regel als bij de serialisatie.
    44144418    const rijen = db.prepare(`
    44154419      SELECT u.other AS other,
     
    44214425       WHERE u.direction = 'in'
    44224426         AND (r.cursor IS NULL OR (u.stamp || '|' || u.ref) > r.cursor)
    4423        GROUP BY u.other`).all({ slug });
     4427         AND (@open = 1 OR m.help_request = 1 OR u.other IN (SELECT value FROM json_each(@guardians)))
     4428       GROUP BY u.other`)
     4429      .all({ slug, open: messagesAllowed ? 1 : 0, guardians: JSON.stringify([...guardians]) });
    44244430    return new Map(rijen.map((r) => [r.other, { n: r.n, wave: !!r.wave }]));
    44254431  } catch { return new Map(); }
Note: See TracChangeset for help on using the changeset viewer.