]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/activitypub/audience.ts
More robust channel change federation
[github/Chocobozzz/PeerTube.git] / server / lib / activitypub / audience.ts
index 771a01366dd91297aa3c3d2268bac6721bd2b6fa..2986714d309c4290b96d3bd11f6f9fd7040c6028 100644 (file)
@@ -3,20 +3,20 @@ import { ActivityAudience } from '../../../shared/models/activitypub'
 import { ACTIVITY_PUB } from '../../initializers/constants'
 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 { MActorFollowersUrl, MActorLight, MActorUrl, MCommentOwner, MCommentOwnerVideo, MVideoId } from '../../types/models'
 
-function getRemoteVideoAudience (video: VideoModel, actorsInvolvedInVideo: ActorModel[]): ActivityAudience {
+function getRemoteVideoAudience (accountActor: MActorUrl, actorsInvolvedInVideo: MActorFollowersUrl[]): ActivityAudience {
   return {
-    to: [ video.VideoChannel.Account.Actor.url ],
+    to: [ accountActor.url ],
     cc: actorsInvolvedInVideo.map(a => a.followersUrl)
   }
 }
 
 function getVideoCommentAudience (
-  videoComment: VideoCommentModel,
-  threadParentComments: VideoCommentModel[],
-  actorsInvolvedInVideo: ActorModel[],
+  videoComment: MCommentOwnerVideo,
+  threadParentComments: MCommentOwner[],
+  actorsInvolvedInVideo: MActorFollowersUrl[],
   isOrigin = false
 ): ActivityAudience {
   const to = [ ACTIVITY_PUB.PUBLIC ]
@@ -32,6 +32,8 @@ function getVideoCommentAudience (
 
   // Send to actors we reply to
   for (const parentComment of threadParentComments) {
+    if (parentComment.isDeleted()) continue
+
     cc.push(parentComment.Account.Actor.url)
   }
 
@@ -41,26 +43,28 @@ function getVideoCommentAudience (
   }
 }
 
-function getAudienceFromFollowersOf (actorsInvolvedInObject: ActorModel[]): ActivityAudience {
+function getAudienceFromFollowersOf (actorsInvolvedInObject: MActorFollowersUrl[]): ActivityAudience {
   return {
     to: [ ACTIVITY_PUB.PUBLIC ].concat(actorsInvolvedInObject.map(a => a.followersUrl)),
     cc: []
   }
 }
 
-async function getActorsInvolvedInVideo (video: VideoModel, t: Transaction) {
-  const actors = await VideoShareModel.loadActorsByShare(video.id, t)
+async function getActorsInvolvedInVideo (video: MVideoId, t: Transaction) {
+  const actors: MActorLight[] = await VideoShareModel.loadActorsByShare(video.id, t)
+
+  const videoAll = video as VideoModel
 
-  const videoActor = video.VideoChannel && video.VideoChannel.Account
-    ? video.VideoChannel.Account.Actor
-    : await ActorModel.loadAccountActorByVideoId(video.id, t)
+  const videoActor = videoAll.VideoChannel?.Account
+    ? videoAll.VideoChannel.Account.Actor
+    : await ActorModel.loadFromAccountByVideoId(video.id, t)
 
   actors.push(videoActor)
 
   return actors
 }
 
-function getAudience (actorSender: ActorModel, isPublic = true) {
+function getAudience (actorSender: MActorFollowersUrl, isPublic = true) {
   return buildAudience([ actorSender.followersUrl ], isPublic)
 }