Changes in src/services/ActivityPubService.js [d14bf1c:e5fc801] in Klonkt
- File:
-
- 1 edited
-
src/services/ActivityPubService.js (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ActivityPubService.js
rd14bf1c re5fc801 3502 3502 */ 3503 3503 export function feedCursor(slug) { 3504 try { 3505 const r = db.prepare('SELECT MAX(rev) AS n FROM ap_feed_state WHERE slug = ?').get(slug); 3506 return String((r && r.n) || 0); 3507 } catch { return '0'; } 3508 } 3509 3510 /** 3511 * Wat er sinds `rev` met deze tijdlijn gebeurd is: welke berichten er nieuw zijn, 3512 * bewerkt, of weg. 3513 * 3514 * Nog niet gebruikt door een leespad -- de vorm van de aankomst is shaer-of7 en 3515 * de "bewerkt"-markering is daar nog een open beslissing. Maar de gegevens 3516 * ontstaan hoe dan ook bij het bijhouden van de merksteen, en dit is de enige 3517 * plek waar ze samen te lezen zijn. 3518 */ 3519 export function feedChangesSince(slug, rev, limit = 200) { 3520 try { 3521 return db.prepare(`SELECT object_uri, kind, rev FROM ap_feed_state 3522 WHERE slug = ? AND rev > ? ORDER BY rev ASC LIMIT ?`) 3523 .all(slug, parseInt(rev, 10) || 0, limit); 3524 } catch { return []; } 3504 const max = (sql, ...args) => { try { const r = db.prepare(sql).get(...args); return (r && r.n) || 0; } catch { return 0; } }; 3505 const t = max('SELECT MAX(rowid) AS n FROM ap_timeline WHERE slug = ?', slug); 3506 const m = max('SELECT MAX(rowid) AS n FROM ap_mentions WHERE slug = ?', slug); 3507 const o = max('SELECT MAX(rowid) AS n FROM ap_outbox WHERE site_slug = ?', slug); 3508 const r = max(`SELECT MAX(i.rowid) AS n FROM ap_interactions i 3509 JOIN posts p ON p.id = i.post_id 3510 JOIN sites s ON s.id = p.site_id 3511 WHERE s.slug = ? AND i.kind = 'reply'`, slug); 3512 return `${t}.${m}.${o}.${r}`; 3525 3513 } 3526 3514 … … 5290 5278 // Guardian PWA / Berichten push. The kid answers an incoming offer in its 5291 5279 // own Berichten; an existing guardian and a commit land in the PWA. 5280 // 5281 // De labels hangen aan dezelfde sleutels als het Guardian-paneel, zodat een 5282 // melding en het scherm waar hij heen wijst hetzelfde woord gebruiken. 5292 5283 onEvent: (slug, ev) => { 5293 const L = pushLang(slug); 5294 const texts = { 5295 offer_received: ['push.n_guard_offer_t', 'push.n_guard_offer_b'], // I am the ward 5296 offer_for_ward: ['push.n_guard_cog_t', 'push.n_guard_cog_b'], // I co-guard this ward 5297 committed: ['push.n_guard_ward_t', 'push.n_guard_ward_b'], 5298 // §3.2: a guardian ended the relation. The ward hears that someone who 5299 // was looking after them has gone; a co-guardian hears they are one fewer. 5300 guardian_left: ['push.n_guard_left_t', 'push.n_guard_left_b'], 5301 coguardian_left: ['push.n_guard_cogleft_t', 'push.n_guard_cogleft_b'], 5302 }[ev.kind]; 5303 if (!texts) return; 5304 const who = deriveHandle(ev.candidate || ev.guardian || ev.ward || '') || '?'; 5305 const url = (ev.kind === 'offer_received' || ev.kind === 'guardian_left') ? `${pushPrefix(slug)}/messages` : '/guardian'; 5306 pushEvent(slug, { type: 'guardian', title: i18nT(L, texts[0]), body: i18nT(L, texts[1], { who }), url }); 5284 const p = guardianEventPush(slug, ev); 5285 if (p) pushEvent(slug, p); 5307 5286 }, 5308 5287 }); 5288 5289 /** 5290 * Welke melding hoort bij een guardianship-gebeurtenis, of geen. 5291 * 5292 * Apart en puur, omdat dit een BESLISSING is en geen bezorging: de 5293 * guardianship-module zendt veertien soorten uit en deze tabel bepaalt welke 5294 * daarvan een mens wakker maken. Dat hoort toetsbaar te zijn zonder web-push 5295 * erbij te halen. 5296 */ 5297 export function guardianEventPush(slug, ev) { 5298 const L = pushLang(slug); 5299 const texts = { 5300 offer_received: ['push.n_guard_offer_t', 'push.n_guard_offer_b'], // I am the ward 5301 offer_for_ward: ['push.n_guard_cog_t', 'push.n_guard_cog_b'], // I co-guard this ward 5302 committed: ['push.n_guard_ward_t', 'push.n_guard_ward_b'], 5303 // §3.2: a guardian ended the relation. The ward hears that someone who 5304 // was looking after them has gone; a co-guardian hears they are one fewer. 5305 guardian_left: ['push.n_guard_left_t', 'push.n_guard_left_b'], 5306 coguardian_left: ['push.n_guard_cogleft_t', 'push.n_guard_cogleft_b'], 5307 // 5.6 gated settings. Zonder deze twee is de hele tally stil: een guardian 5308 // hoort niet dat er een antwoord van hem gewenst is, en dus loopt het 5309 // venster leeg en verloopt het voorstel. Een drempel die niemand ziet is 5310 // geen drempel. 5311 gated_review: ['push.n_gate_ask_t', 'push.n_gate_ask_b'], // jij moet antwoorden 5312 gated_outcome: ['push.n_gate_done_t', 'push.n_gate_done_b'], // er is besloten 5313 }[ev.kind]; 5314 if (!texts) return null; 5315 const who = deriveHandle(ev.candidate || ev.guardian || ev.ward || '') || '?'; 5316 // Een gate-melding zonder te zeggen WELKE instelling is nutteloos: er zijn er 5317 // meer dan een, en ze betekenen heel verschillende dingen voor een kind. 5318 const wat = i18nT(L, GATE_LABEL[ev.feature] || 'guardian.prop_embeds'); 5319 const stand = i18nT(L, ev.value ? 'guardian.prop_on' : 'guardian.prop_off'); 5320 const uitkomst = i18nT(L, GATE_OUTCOME[ev.outcome] || 'guardian.prop_st_open'); 5321 const url = (ev.kind === 'offer_received' || ev.kind === 'guardian_left') ? `${pushPrefix(slug)}/messages` : '/guardian'; 5322 return { type: 'guardian', title: i18nT(L, texts[0]), body: i18nT(L, texts[1], { who, wat, stand, uitkomst }), url }; 5323 } 5324 5325 // Van een gated feature naar het woord dat het Guardian-paneel er al voor 5326 // gebruikt. Een onbekende feature valt terug op het algemene woord in plaats van 5327 // de melding te laten vervallen: liever een iets vager bericht dan geen bericht. 5328 const GATE_LABEL = { 5329 'shaer:externalEmbeds': 'guardian.prop_embeds', 5330 'shaer:externalPlayback': 'guardian.prop_play', 5331 }; 5332 const GATE_OUTCOME = { 5333 accepted: 'guardian.prop_st_accepted', 5334 rejected: 'guardian.prop_st_rejected', 5335 expired: 'guardian.prop_st_expired', 5336 }; 5309 5337 5310 5338 // The notification duty of FEP-633c 3.6.2, wired once for every place a … … 5336 5364 buildActor, buildNote, buildCreate, buildOutbox, buildFollowers, buildFollowing, buildFeatured, 5337 5365 followerCount, deliver, fetchActor, verifyRequest, handleInbox, deliverCreate, deliverDelete, deliverUpdate, deliverActorUpdate, resyncFeaturedPins, 5338 feedCursor, feedChangesSince,waitForFeedChange,5366 feedCursor, waitForFeedChange, 5339 5367 getInteractions, getInteractionById, setInteractionBoosted, setInteractionLiked, buildReplyNote, getOutboxNote, getSentNotes, deliverReply, resolveRemoteNote, noteAudience, mayReadNote, 5340 5368 listOutbox, deliverOutboxDelete, deliverOutboxUpdate, deliverDirectNote,
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)