From 93ef8a9d02059da2fc90efedb7755c97e9e19ef4 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 8 Jan 2018 10:00:35 +0100 Subject: Send comment to followers and parents --- server/lib/activitypub/process/process-create.ts | 32 ++++++++++++++++++------ 1 file changed, 24 insertions(+), 8 deletions(-) (limited to 'server/lib/activitypub/process/process-create.ts') diff --git a/server/lib/activitypub/process/process-create.ts b/server/lib/activitypub/process/process-create.ts index ffd20fe74..a97f6ae83 100644 --- a/server/lib/activitypub/process/process-create.ts +++ b/server/lib/activitypub/process/process-create.ts @@ -13,8 +13,9 @@ import { VideoModel } from '../../../models/video/video' import { VideoAbuseModel } from '../../../models/video/video-abuse' import { VideoCommentModel } from '../../../models/video/video-comment' import { VideoFileModel } from '../../../models/video/video-file' +import { VideoShareModel } from '../../../models/video/video-share' import { getOrCreateActorAndServerAndModel } from '../actor' -import { forwardActivity } from '../send/misc' +import { forwardActivity, getActorsInvolvedInVideo } from '../send/misc' import { generateThumbnailFromUrl } from '../videos' import { addVideoComments, addVideoShares, videoActivityObjectToDBAttributes, videoFileActivityUrlToDBAttributes } from './misc' @@ -266,18 +267,19 @@ function createVideoComment (byActor: ActorModel, activity: ActivityCreate) { if (!byAccount) throw new Error('Cannot create video comment with the non account actor ' + byActor.url) return sequelizeTypescript.transaction(async t => { - let video = await VideoModel.loadByUrl(comment.inReplyTo, t) + let video = await VideoModel.loadByUrlAndPopulateAccount(comment.inReplyTo, t) + let objectToCreate // This is a new thread if (video) { - await VideoCommentModel.create({ + objectToCreate = { url: comment.id, text: comment.content, originCommentId: null, inReplyToComment: null, videoId: video.id, accountId: byAccount.id - }, { transaction: t }) + } } else { const inReplyToComment = await VideoCommentModel.loadByUrl(comment.inReplyTo, t) if (!inReplyToComment) throw new Error('Unknown replied comment ' + comment.inReplyTo) @@ -285,20 +287,34 @@ function createVideoComment (byActor: ActorModel, activity: ActivityCreate) { video = await VideoModel.load(inReplyToComment.videoId) const originCommentId = inReplyToComment.originCommentId || inReplyToComment.id - await VideoCommentModel.create({ + objectToCreate = { url: comment.id, text: comment.content, originCommentId, inReplyToCommentId: inReplyToComment.id, videoId: video.id, accountId: byAccount.id - }, { transaction: t }) + } } - if (video.isOwned()) { + const options = { + where: { + url: objectToCreate.url + }, + defaults: objectToCreate, + transaction: t + } + const [ ,created ] = await VideoCommentModel.findOrCreate(options) + + if (video.isOwned() && created === true) { // Don't resend the activity to the sender const exceptions = [ byActor ] - await forwardActivity(activity, t, exceptions) + + // Mastodon does not add our announces in audience, so we forward to them manually + const additionalActors = await getActorsInvolvedInVideo(video, t) + const additionalFollowerUrls = additionalActors.map(a => a.followersUrl) + + await forwardActivity(activity, t, exceptions, additionalFollowerUrls) } }) } -- cgit v1.2.3