Changeset 4838760 in Klonkt for src/services/ActivityPubService.js
- Timestamp:
- 08/08/2026 05:23:46 PM (4 weeks ago)
- Branches:
- main
- Children:
- d1075a1
- Parents:
- abcf51a
- File:
-
- 1 edited
-
src/services/ActivityPubService.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ActivityPubService.js
rabcf51a r4838760 2955 2955 post2 = { ...post2, quote_uri: q.uri, quote_actor: q.actor || null }; 2956 2956 } 2957 } 2958 // De kaart op de eigen post (shaer-k3f), langs dezelfde pijplijn als een 2959 // binnenkomende: een fediverse-quote wordt een quote-snapshot, anders 2960 // probeert de link een externe kaart. VOOR de vroege return hieronder, want 2961 // ook een post zonder volgers hoort zijn kaart te krijgen -- de app leest 2962 // hem uit de outbox, niet uit een bezorging. Best-effort en eenmalig: wat 2963 // hier niet lukt blijft een kale link, precies wat het was. 2964 if (!post2.quote_json && !post2.embed_json) { 2965 try { 2966 if (post2.quote_uri) { 2967 const qj = await resolveQuoteByUri(post2.quote_uri); 2968 if (qj) { db.prepare('UPDATE posts SET quote_json = ? WHERE id = ?').run(qj, post.id); post2 = { ...post2, quote_json: qj }; } 2969 } else { 2970 const ej = await resolveExternalEmbed(post2.content || ''); 2971 if (ej) { db.prepare('UPDATE posts SET embed_json = ? WHERE id = ?').run(ej, post.id); post2 = { ...post2, embed_json: ej }; } 2972 } 2973 } catch { /* een kaart is nooit een blokkade voor de post zelf */ } 2957 2974 } 2958 2975 if (post2.quote_actor) { … … 4996 5013 } 4997 5014 5015 /** 5016 * De composer-preview (shaer-k3f): één URL langs exact dezelfde pijplijn als 5017 * publiceren, zodat wat de preview toont ook is wat de post krijgt. Twee 5018 * uitkomsten, hoogstens een gevuld: een AP-object wordt een quote-snapshot, 5019 * een externe link probeert een kaart. Beide als JSON-string, dezelfde vorm 5020 * als de kolommen -- de route serveert ze door timelineQuote/timelineEmbed en 5021 * de gate, net als de tijdlijn. 5022 */ 5023 export async function previewCard(url) { 5024 if (!/^https?:\/\//i.test(String(url || ''))) return {}; 5025 const html = `<a href="${String(url).replace(/"/g, '"')}">x</a>`; 5026 const q = await resolveOwnQuote(html); 5027 if (q && q.uri) { 5028 const quoteJson = await resolveQuoteByUri(q.uri).catch(() => null); 5029 if (quoteJson) return { quoteJson }; 5030 } else { 5031 const embedJson = await resolveExternalEmbed(html).catch(() => null); 5032 if (embedJson) return { embedJson }; 5033 } 5034 return {}; 5035 } 5036 4998 5037 /** The first http(s) link in sanitized note HTML that is not a mention/hashtag. */ 4999 5038 export function firstExternalUrl(html) { … … 5051 5090 const url = quoteHrefOf(note); 5052 5091 if (!url) return null; 5092 return resolveQuoteByUri(url); 5093 } 5094 5095 /** Hetzelfde snapshot, maar vanaf een kale URI: eigen posts en de 5096 * composer-preview (shaer-k3f) kennen alleen de link, niet de tag-vorm. */ 5097 async function resolveQuoteByUri(url) { 5053 5098 const q = await apGetJson(url); 5054 5099 if (!q || typeof q !== 'object') return null; … … 6270 6315 acceptGatedFollow, rejectGatedFollow, isWardGuardian, outboxAudience, sendFollowDecision, 6271 6316 gateOutgoingFollow, performApprovedFollow, 6272 parseOwnPoll, pollTally, ownPollView, deliverPollUpdate, maybeCrawlThread, sendReport, localMentionSlugs, 6317 parseOwnPoll, pollTally, ownPollView, deliverPollUpdate, maybeCrawlThread, sendReport, localMentionSlugs, previewCard, 6273 6318 autoBoostCount, boostedCount, setReaction, getReaction, getReactionsFor, canonicalReactionUri, migrateReactions, upsertBoostedNote, getCirkelPosts, getCirkelMembers, selfHealTimeline, 6274 6319 getNotifications, listBlocks, isBlockedAny, blockTarget, unblock,
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)