+async function sendVideoRelatedActivity (activityBuilder: (audience: ActivityAudience) => Activity, options: {
+ byActor: ActorModel,
+ video: VideoModel,
+ transaction?: Transaction
+}) {
+ const actorsInvolvedInVideo = await getActorsInvolvedInVideo(options.video, options.transaction)
+
+ // Send to origin
+ if (options.video.isOwned() === false) {
+ const audience = getRemoteVideoAudience(options.video, actorsInvolvedInVideo)
+ const activity = activityBuilder(audience)
+
+ return unicastTo(activity, options.byActor, options.video.VideoChannel.Account.Actor.sharedInboxUrl)
+ }
+
+ // Send to followers
+ const audience = getAudienceFromFollowersOf(actorsInvolvedInVideo)
+ const activity = activityBuilder(audience)
+
+ const actorsException = [ options.byActor ]
+ return broadcastToFollowers(activity, options.byActor, actorsInvolvedInVideo, options.transaction, actorsException)
+}
+