feat: federate out topic removal activities when topic is deleted and purged from a local category

This commit is contained in:
Julian Lam
2025-12-01 11:11:27 -05:00
parent 411baa21f4
commit 3ab61615af
2 changed files with 15 additions and 4 deletions

View File

@@ -7,6 +7,7 @@ const posts = require('../posts');
const privileges = require('../privileges'); const privileges = require('../privileges');
const plugins = require('../plugins'); const plugins = require('../plugins');
const activitypub = require('../activitypub'); const activitypub = require('../activitypub');
const utils = require('../utils');
const socketHelpers = require('../socket.io/helpers'); const socketHelpers = require('../socket.io/helpers');
const websockets = require('../socket.io'); const websockets = require('../socket.io');
const events = require('../events'); const events = require('../events');
@@ -66,11 +67,22 @@ exports.doTopicAction = async function (action, event, caller, { tids }) {
const uids = await user.getUidsFromSet('users:online', 0, -1); const uids = await user.getUidsFromSet('users:online', 0, -1);
await Promise.all(tids.map(async (tid) => { await Promise.all(tids.map(async (tid) => {
const title = await topics.getTopicField(tid, 'title'); const { title, cid, mainPid } = await topics.getTopicFields(tid, ['title', 'cid', 'mainPid']);
const data = await topics.tools[action](tid, caller.uid); const data = await topics.tools[action](tid, caller.uid);
const notifyUids = await privileges.categories.filterUids('topics:read', data.cid, uids); const notifyUids = await privileges.categories.filterUids('topics:read', data.cid, uids);
socketHelpers.emitToUids(event, data, notifyUids); socketHelpers.emitToUids(event, data, notifyUids);
await logTopicAction(action, caller, tid, title); await logTopicAction(action, caller, tid, title);
switch(action) {
case 'delete': // falls through
case 'purge': {
if (utils.isNumber(cid) && parseInt(cid, 10) > 0) {
activitypub.out.remove.context(caller.uid, tid); // 7888-style
activitypub.out.delete.note(caller.uid, mainPid); // 1b12-style
activitypub.out.undo.announce('cid', cid, tid); // microblogs
}
}
}
})); }));
}; };

View File

@@ -324,13 +324,12 @@ topicsAPI.move = async (caller, { tid, cid }) => {
if (utils.isNumber(cid) && parseInt(cid, 10) === -1) { if (utils.isNumber(cid) && parseInt(cid, 10) === -1) {
activitypub.out.remove.context(caller.uid, tid); // 7888-style activitypub.out.remove.context(caller.uid, tid); // 7888-style
activitypub.out.delete.note(caller.uid, topicData.mainPid); // threadiverse activitypub.out.delete.note(caller.uid, topicData.mainPid); // 1b12-style
// tbd: activitypubApi.undo.announce? // microblogs
} else { } else {
activitypub.out.move.context(caller.uid, tid); activitypub.out.move.context(caller.uid, tid);
activitypub.out.announce.topic(tid); activitypub.out.announce.topic(tid);
} }
activitypub.out.undo.announce('cid', topicData.cid, tid); activitypub.out.undo.announce('cid', topicData.cid, tid); // microblogs
} }
await events.log({ await events.log({