1 import { Transaction } from 'sequelize'
2 import { ActivityAdd } from '../../../../shared/index'
3 import { ActivityAnnounce, ActivityAudience, ActivityCreate } from '../../../../shared/models/activitypub/activity'
4 import { AccountInstance, VideoInstance } from '../../../models'
5 import { VideoChannelInstance } from '../../../models/video/video-channel-interface'
6 import { getAnnounceActivityPubUrl } from '../url'
9 getAccountsInvolvedInVideo,
10 getAccountsInvolvedInVideoChannel,
12 getObjectFollowersAudience,
13 getOriginVideoAudience,
14 getOriginVideoChannelAudience,
17 import { addActivityData } from './send-add'
18 import { createActivityData } from './send-create'
20 async function buildVideoAnnounceToFollowers (byAccount: AccountInstance, video: VideoInstance, t: Transaction) {
21 const url = getAnnounceActivityPubUrl(video.url, byAccount)
23 const videoChannel = video.VideoChannel
24 const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject(), t)
26 const accountsToForwardView = await getAccountsInvolvedInVideo(video, t)
27 const audience = getObjectFollowersAudience(accountsToForwardView)
28 const data = await announceActivityData(url, byAccount, announcedActivity, t, audience)
33 async function sendVideoAnnounceToFollowers (byAccount: AccountInstance, video: VideoInstance, t: Transaction) {
34 const data = await buildVideoAnnounceToFollowers(byAccount, video, t)
36 return broadcastToFollowers(data, byAccount, [ byAccount ], t)
39 async function sendVideoAnnounceToOrigin (byAccount: AccountInstance, video: VideoInstance, t: Transaction) {
40 const url = getAnnounceActivityPubUrl(video.url, byAccount)
42 const videoChannel = video.VideoChannel
43 const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject(), t)
45 const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t)
46 const audience = getOriginVideoAudience(video, accountsInvolvedInVideo)
47 const data = await createActivityData(url, byAccount, announcedActivity, t, audience)
49 return unicastTo(data, byAccount, videoChannel.Account.sharedInboxUrl, t)
52 async function buildVideoChannelAnnounceToFollowers (byAccount: AccountInstance, videoChannel: VideoChannelInstance, t: Transaction) {
53 const url = getAnnounceActivityPubUrl(videoChannel.url, byAccount)
54 const announcedActivity = await createActivityData(url, videoChannel.Account, videoChannel.toActivityPubObject(), t)
56 const accountsToForwardView = await getAccountsInvolvedInVideoChannel(videoChannel, t)
57 const audience = getObjectFollowersAudience(accountsToForwardView)
58 const data = await announceActivityData(url, byAccount, announcedActivity, t, audience)
63 async function sendVideoChannelAnnounceToFollowers (byAccount: AccountInstance, videoChannel: VideoChannelInstance, t: Transaction) {
64 const data = await buildVideoChannelAnnounceToFollowers(byAccount, videoChannel, t)
66 return broadcastToFollowers(data, byAccount, [ byAccount ], t)
69 async function sendVideoChannelAnnounceToOrigin (byAccount: AccountInstance, videoChannel: VideoChannelInstance, t: Transaction) {
70 const url = getAnnounceActivityPubUrl(videoChannel.url, byAccount)
71 const announcedActivity = await createActivityData(url, videoChannel.Account, videoChannel.toActivityPubObject(), t)
73 const accountsInvolvedInVideo = await getAccountsInvolvedInVideoChannel(videoChannel, t)
74 const audience = getOriginVideoChannelAudience(videoChannel, accountsInvolvedInVideo)
75 const data = await createActivityData(url, byAccount, announcedActivity, t, audience)
77 return unicastTo(data, byAccount, videoChannel.Account.sharedInboxUrl, t)
80 async function announceActivityData (
82 byAccount: AccountInstance,
83 object: ActivityCreate | ActivityAdd,
85 audience?: ActivityAudience
88 audience = await getAudience(byAccount, t)
91 const activity: ActivityAnnounce = {
103 // ---------------------------------------------------------------------------
106 sendVideoAnnounceToFollowers,
107 sendVideoChannelAnnounceToFollowers,
108 sendVideoAnnounceToOrigin,
109 sendVideoChannelAnnounceToOrigin,
110 announceActivityData,
111 buildVideoAnnounceToFollowers,
112 buildVideoChannelAnnounceToFollowers