diff --git a/src/activitypub/inbox.js b/src/activitypub/inbox.js index de6c14f53f..8ef3aac620 100644 --- a/src/activitypub/inbox.js +++ b/src/activitypub/inbox.js @@ -71,7 +71,7 @@ inbox.like = async (req) => { }; inbox.announce = async (req) => { - const { actor, object, published } = req.body; + const { actor, object, published, to, cc } = req.body; let timestamp = Date.now(); try { timestamp = new Date(published).getTime(); @@ -103,6 +103,8 @@ inbox.announce = async (req) => { } await topics.updateLastPostTime(tid, timestamp); + await activitypub.notes.updateLocalRecipients(pid, { to, cc }); + await activitypub.notes.syncUserInboxes(tid); } winston.info(`[activitypub/inbox/announce] Parsing id ${pid}`); diff --git a/src/activitypub/notes.js b/src/activitypub/notes.js index a360198446..747d896936 100644 --- a/src/activitypub/notes.js +++ b/src/activitypub/notes.js @@ -42,11 +42,7 @@ Notes.assert = async (uid, input, options = {}) => { // Parse ActivityPub-specific data const { to, cc } = postData._activitypub; - let recipients = new Set([...to, ...cc]); - recipients = await Notes.getLocalRecipients(recipients); - if (recipients.size > 0) { - await db.setAdd(`post:${id}:recipients`, Array.from(recipients)); - } + await Notes.updateLocalRecipients(id, { to, cc }); const hash = { ...postData }; delete hash._activitypub; @@ -62,7 +58,8 @@ Notes.assert = async (uid, input, options = {}) => { })); }; -Notes.getLocalRecipients = async (recipients) => { +Notes.updateLocalRecipients = async (id, { to, cc }) => { + const recipients = new Set([...to, ...cc]); const uids = new Set(); await Promise.all(Array.from(recipients).map(async (recipient) => { const { type, id } = await activitypub.helpers.resolveLocalId(recipient); @@ -81,7 +78,9 @@ Notes.getLocalRecipients = async (recipients) => { } })); - return uids; + if (uids.size > 0) { + await db.setAdd(`post:${id}:recipients`, Array.from(uids)); + } }; Notes.getParentChain = async (uid, input) => {