mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-02-25 18:55:32 -06:00
Fix delete comment federation
This commit is contained in:
@@ -96,7 +96,7 @@ function getOriginVideoAudience (video: VideoModel, actorsInvolvedInVideo: Actor
|
||||
}
|
||||
}
|
||||
|
||||
function getOriginVideoCommentAudience (
|
||||
function getVideoCommentAudience (
|
||||
videoComment: VideoCommentModel,
|
||||
threadParentComments: VideoCommentModel[],
|
||||
actorsInvolvedInVideo: ActorModel[],
|
||||
@@ -160,7 +160,7 @@ function buildAudience (followerInboxUrls: string[], isPublic = true) {
|
||||
return { to, cc }
|
||||
}
|
||||
|
||||
function audiencify (object: any, audience: ActivityAudience) {
|
||||
function audiencify <T> (object: T, audience: ActivityAudience) {
|
||||
return Object.assign(object, audience)
|
||||
}
|
||||
|
||||
@@ -192,7 +192,7 @@ export {
|
||||
getObjectFollowersAudience,
|
||||
forwardActivity,
|
||||
audiencify,
|
||||
getOriginVideoCommentAudience,
|
||||
getVideoCommentAudience,
|
||||
computeUris,
|
||||
broadcastToActors
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
getAudience,
|
||||
getObjectFollowersAudience,
|
||||
getOriginVideoAudience,
|
||||
getOriginVideoCommentAudience,
|
||||
getVideoCommentAudience,
|
||||
unicastTo
|
||||
} from './misc'
|
||||
|
||||
@@ -47,7 +47,7 @@ async function sendCreateVideoCommentToOrigin (comment: VideoCommentModel, t: Tr
|
||||
|
||||
const actorsInvolvedInComment = await getActorsInvolvedInVideo(comment.Video, t)
|
||||
actorsInvolvedInComment.push(byActor)
|
||||
const audience = getOriginVideoCommentAudience(comment, threadParentComments, actorsInvolvedInComment)
|
||||
const audience = getVideoCommentAudience(comment, threadParentComments, actorsInvolvedInComment)
|
||||
|
||||
const data = await createActivityData(comment.url, byActor, commentObject, t, audience)
|
||||
|
||||
@@ -70,7 +70,7 @@ async function sendCreateVideoCommentToVideoFollowers (comment: VideoCommentMode
|
||||
const actorsInvolvedInComment = await getActorsInvolvedInVideo(comment.Video, t)
|
||||
actorsInvolvedInComment.push(byActor)
|
||||
|
||||
const audience = getOriginVideoCommentAudience(comment, threadParentComments, actorsInvolvedInComment)
|
||||
const audience = getVideoCommentAudience(comment, threadParentComments, actorsInvolvedInComment, true)
|
||||
const data = await createActivityData(comment.url, byActor, commentObject, t, audience)
|
||||
|
||||
// This was a reply, send it to the parent actors
|
||||
@@ -144,7 +144,7 @@ async function createActivityData (
|
||||
}
|
||||
|
||||
return audiencify({
|
||||
type: 'Create',
|
||||
type: 'Create' as 'Create',
|
||||
id: url + '/activity',
|
||||
actor: byActor.url,
|
||||
object: audiencify(object, audience)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { Transaction } from 'sequelize'
|
||||
import { ActivityDelete } from '../../../../shared/models/activitypub'
|
||||
import { ActivityAudience, ActivityDelete } from '../../../../shared/models/activitypub'
|
||||
import { ActorModel } from '../../../models/activitypub/actor'
|
||||
import { VideoModel } from '../../../models/video/video'
|
||||
import { VideoCommentModel } from '../../../models/video/video-comment'
|
||||
import { VideoShareModel } from '../../../models/video/video-share'
|
||||
import { getDeleteActivityPubUrl } from '../url'
|
||||
import { broadcastToFollowers } from './misc'
|
||||
import { audiencify, broadcastToActors, broadcastToFollowers, getActorsInvolvedInVideo, getVideoCommentAudience, unicastTo } from './misc'
|
||||
|
||||
async function sendDeleteVideo (video: VideoModel, t: Transaction) {
|
||||
const url = getDeleteActivityPubUrl(video.url)
|
||||
@@ -30,16 +30,30 @@ async function sendDeleteActor (byActor: ActorModel, t: Transaction) {
|
||||
}
|
||||
|
||||
async function sendDeleteVideoComment (videoComment: VideoCommentModel, t: Transaction) {
|
||||
const isVideoOrigin = videoComment.Video.isOwned()
|
||||
|
||||
const url = getDeleteActivityPubUrl(videoComment.url)
|
||||
|
||||
const byActor = videoComment.Account.Actor
|
||||
const data = deleteActivityData(url, videoComment.url, byActor)
|
||||
const threadParentComments = await VideoCommentModel.listThreadParentComments(videoComment, t)
|
||||
|
||||
const actorsInvolved = await VideoShareModel.loadActorsByShare(videoComment.Video.id, t)
|
||||
actorsInvolved.push(videoComment.Video.VideoChannel.Account.Actor)
|
||||
actorsInvolved.push(byActor)
|
||||
const actorsInvolvedInComment = await getActorsInvolvedInVideo(videoComment.Video, t)
|
||||
actorsInvolvedInComment.push(byActor)
|
||||
|
||||
return broadcastToFollowers(data, byActor, actorsInvolved, t)
|
||||
const audience = getVideoCommentAudience(videoComment, threadParentComments, actorsInvolvedInComment, isVideoOrigin)
|
||||
const data = deleteActivityData(url, videoComment.url, byActor, audience)
|
||||
|
||||
// This was a reply, send it to the parent actors
|
||||
const actorsException = [ byActor ]
|
||||
await broadcastToActors(data, byActor, threadParentComments.map(c => c.Account.Actor), actorsException)
|
||||
|
||||
// Broadcast to our followers
|
||||
await broadcastToFollowers(data, byActor, [ byActor ], t)
|
||||
|
||||
// Send to actors involved in the comment
|
||||
if (isVideoOrigin) return broadcastToFollowers(data, byActor, actorsInvolvedInComment, t, actorsException)
|
||||
|
||||
// Send to origin
|
||||
return unicastTo(data, byActor, videoComment.Video.VideoChannel.Account.Actor.sharedInboxUrl)
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -52,11 +66,15 @@ export {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
function deleteActivityData (url: string, object: string, byActor: ActorModel): ActivityDelete {
|
||||
return {
|
||||
type: 'Delete',
|
||||
function deleteActivityData (url: string, object: string, byActor: ActorModel, audience?: ActivityAudience): ActivityDelete {
|
||||
const activity = {
|
||||
type: 'Delete' as 'Delete',
|
||||
id: url,
|
||||
actor: byActor.url,
|
||||
object
|
||||
}
|
||||
|
||||
if (audience) return audiencify(activity, audience)
|
||||
|
||||
return activity
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ async function likeActivityData (
|
||||
}
|
||||
|
||||
return audiencify({
|
||||
type: 'Like',
|
||||
type: 'Like' as 'Like',
|
||||
id: url,
|
||||
actor: byActor.url,
|
||||
object: video.url
|
||||
|
||||
@@ -108,7 +108,7 @@ async function undoActivityData (
|
||||
}
|
||||
|
||||
return audiencify({
|
||||
type: 'Undo',
|
||||
type: 'Undo' as 'Undo',
|
||||
id: url,
|
||||
actor: byActor.url,
|
||||
object
|
||||
|
||||
@@ -67,7 +67,7 @@ async function updateActivityData (
|
||||
}
|
||||
|
||||
return audiencify({
|
||||
type: 'Update',
|
||||
type: 'Update' as 'Update',
|
||||
id: url,
|
||||
actor: byActor.url,
|
||||
object: audiencify(object, audience)
|
||||
|
||||
Reference in New Issue
Block a user