]>
Commit | Line | Data |
---|---|---|
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' | |
7 | import { | |
8 | broadcastToFollowers, | |
9 | getAccountsInvolvedInVideo, | |
10 | getAccountsInvolvedInVideoChannel, | |
11 | getAudience, | |
12 | getObjectFollowersAudience, | |
13 | getOriginVideoAudience, | |
14 | getOriginVideoChannelAudience, | |
15 | unicastTo | |
16 | } from './misc' | |
17 | import { addActivityData } from './send-add' | |
18 | import { createActivityData } from './send-create' | |
19 | ||
20 | async function buildVideoAnnounceToFollowers (byAccount: AccountInstance, video: VideoInstance, t: Transaction) { | |
21 | const url = getAnnounceActivityPubUrl(video.url, byAccount) | |
22 | ||
23 | const videoChannel = video.VideoChannel | |
24 | const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject(), t) | |
25 | ||
26 | const accountsToForwardView = await getAccountsInvolvedInVideo(video, t) | |
27 | const audience = getObjectFollowersAudience(accountsToForwardView) | |
28 | const data = await announceActivityData(url, byAccount, announcedActivity, t, audience) | |
29 | ||
30 | return data | |
31 | } | |
32 | ||
33 | async function sendVideoAnnounceToFollowers (byAccount: AccountInstance, video: VideoInstance, t: Transaction) { | |
34 | const data = await buildVideoAnnounceToFollowers(byAccount, video, t) | |
35 | ||
36 | return broadcastToFollowers(data, byAccount, [ byAccount ], t) | |
37 | } | |
38 | ||
39 | async function sendVideoAnnounceToOrigin (byAccount: AccountInstance, video: VideoInstance, t: Transaction) { | |
40 | const url = getAnnounceActivityPubUrl(video.url, byAccount) | |
41 | ||
42 | const videoChannel = video.VideoChannel | |
43 | const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject(), t) | |
44 | ||
45 | const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t) | |
46 | const audience = getOriginVideoAudience(video, accountsInvolvedInVideo) | |
47 | const data = await createActivityData(url, byAccount, announcedActivity, t, audience) | |
48 | ||
49 | return unicastTo(data, byAccount, videoChannel.Account.sharedInboxUrl, t) | |
50 | } | |
51 | ||
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) | |
55 | ||
56 | const accountsToForwardView = await getAccountsInvolvedInVideoChannel(videoChannel, t) | |
57 | const audience = getObjectFollowersAudience(accountsToForwardView) | |
58 | const data = await announceActivityData(url, byAccount, announcedActivity, t, audience) | |
59 | ||
60 | return data | |
61 | } | |
62 | ||
63 | async function sendVideoChannelAnnounceToFollowers (byAccount: AccountInstance, videoChannel: VideoChannelInstance, t: Transaction) { | |
64 | const data = await buildVideoChannelAnnounceToFollowers(byAccount, videoChannel, t) | |
65 | ||
66 | return broadcastToFollowers(data, byAccount, [ byAccount ], t) | |
67 | } | |
68 | ||
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) | |
72 | ||
73 | const accountsInvolvedInVideo = await getAccountsInvolvedInVideoChannel(videoChannel, t) | |
74 | const audience = getOriginVideoChannelAudience(videoChannel, accountsInvolvedInVideo) | |
75 | const data = await createActivityData(url, byAccount, announcedActivity, t, audience) | |
76 | ||
77 | return unicastTo(data, byAccount, videoChannel.Account.sharedInboxUrl, t) | |
78 | } | |
79 | ||
80 | async function announceActivityData ( | |
81 | url: string, | |
82 | byAccount: AccountInstance, | |
83 | object: ActivityCreate | ActivityAdd, | |
84 | t: Transaction, | |
85 | audience?: ActivityAudience | |
86 | ) { | |
87 | if (!audience) { | |
88 | audience = await getAudience(byAccount, t) | |
89 | } | |
90 | ||
91 | const activity: ActivityAnnounce = { | |
92 | type: 'Announce', | |
93 | to: audience.to, | |
94 | cc: audience.cc, | |
95 | id: url, | |
96 | actor: byAccount.url, | |
97 | object | |
98 | } | |
99 | ||
100 | return activity | |
101 | } | |
102 | ||
103 | // --------------------------------------------------------------------------- | |
104 | ||
105 | export { | |
106 | sendVideoAnnounceToFollowers, | |
107 | sendVideoChannelAnnounceToFollowers, | |
108 | sendVideoAnnounceToOrigin, | |
109 | sendVideoChannelAnnounceToOrigin, | |
110 | announceActivityData, | |
111 | buildVideoAnnounceToFollowers, | |
112 | buildVideoChannelAnnounceToFollowers | |
113 | } |