1 import { Transaction } from 'sequelize'
2 import { ActivityAdd } from '../../../../shared/index'
3 import { ActivityAnnounce, ActivityAudience, ActivityCreate } from '../../../../shared/models/activitypub'
4 import { AccountModel } from '../../../models/account/account'
5 import { VideoModel } from '../../../models/video/video'
6 import { VideoChannelModel } from '../../../models/video/video-channel'
7 import { getAnnounceActivityPubUrl } from '../url'
10 getAccountsInvolvedInVideo,
11 getAccountsInvolvedInVideoChannel,
13 getObjectFollowersAudience,
14 getOriginVideoAudience,
15 getOriginVideoChannelAudience,
18 import { addActivityData } from './send-add'
19 import { createActivityData } from './send-create'
21 async function buildVideoAnnounceToFollowers (byAccount: AccountModel, video: VideoModel, t: Transaction) {
22 const url = getAnnounceActivityPubUrl(video.url, byAccount)
24 const videoChannel = video.VideoChannel
25 const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject(), t)
27 const accountsToForwardView = await getAccountsInvolvedInVideo(video, t)
28 const audience = getObjectFollowersAudience(accountsToForwardView)
29 return announceActivityData(url, byAccount, announcedActivity, t, audience)
32 async function sendVideoAnnounceToFollowers (byAccount: AccountModel, video: VideoModel, t: Transaction) {
33 const data = await buildVideoAnnounceToFollowers(byAccount, video, t)
35 return broadcastToFollowers(data, byAccount, [ byAccount ], t)
38 async function sendVideoAnnounceToOrigin (byAccount: AccountModel, video: VideoModel, t: Transaction) {
39 const url = getAnnounceActivityPubUrl(video.url, byAccount)
41 const videoChannel = video.VideoChannel
42 const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject(), t)
44 const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t)
45 const audience = getOriginVideoAudience(video, accountsInvolvedInVideo)
46 const data = await createActivityData(url, byAccount, announcedActivity, t, audience)
48 return unicastTo(data, byAccount, videoChannel.Account.sharedInboxUrl, t)
51 async function buildVideoChannelAnnounceToFollowers (byAccount: AccountModel, videoChannel: VideoChannelModel, t: Transaction) {
52 const url = getAnnounceActivityPubUrl(videoChannel.url, byAccount)
53 const announcedActivity = await createActivityData(url, videoChannel.Account, videoChannel.toActivityPubObject(), t)
55 const accountsToForwardView = await getAccountsInvolvedInVideoChannel(videoChannel, t)
56 const audience = getObjectFollowersAudience(accountsToForwardView)
57 return announceActivityData(url, byAccount, announcedActivity, t, audience)
60 async function sendVideoChannelAnnounceToFollowers (byAccount: AccountModel, videoChannel: VideoChannelModel, t: Transaction) {
61 const data = await buildVideoChannelAnnounceToFollowers(byAccount, videoChannel, t)
63 return broadcastToFollowers(data, byAccount, [ byAccount ], t)
66 async function sendVideoChannelAnnounceToOrigin (byAccount: AccountModel, videoChannel: VideoChannelModel, t: Transaction) {
67 const url = getAnnounceActivityPubUrl(videoChannel.url, byAccount)
68 const announcedActivity = await createActivityData(url, videoChannel.Account, videoChannel.toActivityPubObject(), t)
70 const accountsInvolvedInVideo = await getAccountsInvolvedInVideoChannel(videoChannel, t)
71 const audience = getOriginVideoChannelAudience(videoChannel, accountsInvolvedInVideo)
72 const data = await createActivityData(url, byAccount, announcedActivity, t, audience)
74 return unicastTo(data, byAccount, videoChannel.Account.sharedInboxUrl, t)
77 async function announceActivityData (
79 byAccount: AccountModel,
80 object: ActivityCreate | ActivityAdd,
82 audience?: ActivityAudience
83 ): Promise<ActivityAnnounce> {
85 audience = await getAudience(byAccount, t)
98 // ---------------------------------------------------------------------------
101 sendVideoAnnounceToFollowers,
102 sendVideoChannelAnnounceToFollowers,
103 sendVideoAnnounceToOrigin,
104 sendVideoChannelAnnounceToOrigin,
105 announceActivityData,
106 buildVideoAnnounceToFollowers,
107 buildVideoChannelAnnounceToFollowers