aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/lib/activitypub/send/send-announce.ts
diff options
context:
space:
mode:
authorChocobozzz <florian.bigard@gmail.com>2017-11-27 14:44:51 +0100
committerChocobozzz <florian.bigard@gmail.com>2017-11-27 19:40:53 +0100
commit4e50b6a1c9a3eb261e04ede73241648e6edf21d6 (patch)
treee1c6c121d561ffc1cf2996daec03a1e7f27f0a25 /server/lib/activitypub/send/send-announce.ts
parent74bb2cb8348d6794ed3a0e2ec94c8c9abdde82cf (diff)
downloadPeerTube-4e50b6a1c9a3eb261e04ede73241648e6edf21d6.tar.gz
PeerTube-4e50b6a1c9a3eb261e04ede73241648e6edf21d6.tar.zst
PeerTube-4e50b6a1c9a3eb261e04ede73241648e6edf21d6.zip
Add shares forward and collection on videos/video channels
Diffstat (limited to 'server/lib/activitypub/send/send-announce.ts')
-rw-r--r--server/lib/activitypub/send/send-announce.ts86
1 files changed, 76 insertions, 10 deletions
diff --git a/server/lib/activitypub/send/send-announce.ts b/server/lib/activitypub/send/send-announce.ts
index b8ea51bc0..efc23af46 100644
--- a/server/lib/activitypub/send/send-announce.ts
+++ b/server/lib/activitypub/send/send-announce.ts
@@ -1,34 +1,96 @@
1import { Transaction } from 'sequelize' 1import { Transaction } from 'sequelize'
2import { ActivityAdd } from '../../../../shared/index' 2import { ActivityAdd } from '../../../../shared/index'
3import { ActivityAnnounce, ActivityCreate } from '../../../../shared/models/activitypub/activity' 3import { ActivityAnnounce, ActivityAudience, ActivityCreate } from '../../../../shared/models/activitypub/activity'
4import { AccountInstance, VideoInstance } from '../../../models' 4import { AccountInstance, VideoInstance } from '../../../models'
5import { VideoChannelInstance } from '../../../models/video/video-channel-interface' 5import { VideoChannelInstance } from '../../../models/video/video-channel-interface'
6import { getAnnounceActivityPubUrl } from '../url' 6import { getAnnounceActivityPubUrl } from '../url'
7import { broadcastToFollowers } from './misc' 7import {
8 broadcastToFollowers,
9 getAccountsInvolvedInVideo,
10 getAccountsInvolvedInVideoChannel,
11 getAudience,
12 getObjectFollowersAudience,
13 getOriginVideoAudience,
14 getOriginVideoChannelAudience,
15 unicastTo
16} from './misc'
8import { addActivityData } from './send-add' 17import { addActivityData } from './send-add'
9import { createActivityData } from './send-create' 18import { createActivityData } from './send-create'
10 19
11async function sendVideoAnnounce (byAccount: AccountInstance, video: VideoInstance, t: Transaction) { 20async function buildVideoAnnounceToFollowers (byAccount: AccountInstance, video: VideoInstance, t: Transaction) {
12 const url = getAnnounceActivityPubUrl(video.url, byAccount) 21 const url = getAnnounceActivityPubUrl(video.url, byAccount)
13 22
14 const videoChannel = video.VideoChannel 23 const videoChannel = video.VideoChannel
15 const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject()) 24 const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject())
16 25
17 const data = await announceActivityData(url, byAccount, announcedActivity) 26 const accountsToForwardView = await getAccountsInvolvedInVideo(video)
27 const audience = getObjectFollowersAudience(accountsToForwardView)
28 const data = await announceActivityData(url, byAccount, announcedActivity, audience)
29
30 return data
31}
32
33async function sendVideoAnnounceToFollowers (byAccount: AccountInstance, video: VideoInstance, t: Transaction) {
34 const data = await buildVideoAnnounceToFollowers(byAccount, video, t)
35
18 return broadcastToFollowers(data, byAccount, [ byAccount ], t) 36 return broadcastToFollowers(data, byAccount, [ byAccount ], t)
19} 37}
20 38
21async function sendVideoChannelAnnounce (byAccount: AccountInstance, videoChannel: VideoChannelInstance, t: Transaction) { 39async 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())
44
45 const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video)
46 const audience = getOriginVideoAudience(video, accountsInvolvedInVideo)
47 const data = await createActivityData(url, byAccount, announcedActivity, audience)
48
49 return unicastTo(data, byAccount, videoChannel.Account.sharedInboxUrl, t)
50}
51
52async function buildVideoChannelAnnounceToFollowers (byAccount: AccountInstance, videoChannel: VideoChannelInstance, t: Transaction) {
22 const url = getAnnounceActivityPubUrl(videoChannel.url, byAccount) 53 const url = getAnnounceActivityPubUrl(videoChannel.url, byAccount)
23 const announcedActivity = await createActivityData(url, videoChannel.Account, videoChannel.toActivityPubObject()) 54 const announcedActivity = await createActivityData(url, videoChannel.Account, videoChannel.toActivityPubObject())
24 55
25 const data = await announceActivityData(url, byAccount, announcedActivity) 56 const accountsToForwardView = await getAccountsInvolvedInVideoChannel(videoChannel)
57 const audience = getObjectFollowersAudience(accountsToForwardView)
58 const data = await announceActivityData(url, byAccount, announcedActivity, audience)
59
60 return data
61}
62
63async function sendVideoChannelAnnounceToFollowers (byAccount: AccountInstance, videoChannel: VideoChannelInstance, t: Transaction) {
64 const data = await buildVideoChannelAnnounceToFollowers(byAccount, videoChannel, t)
65
26 return broadcastToFollowers(data, byAccount, [ byAccount ], t) 66 return broadcastToFollowers(data, byAccount, [ byAccount ], t)
27} 67}
28 68
29async function announceActivityData (url: string, byAccount: AccountInstance, object: ActivityCreate | ActivityAdd) { 69async 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())
72
73 const accountsInvolvedInVideo = await getAccountsInvolvedInVideoChannel(videoChannel)
74 const audience = getOriginVideoChannelAudience(videoChannel, accountsInvolvedInVideo)
75 const data = await createActivityData(url, byAccount, announcedActivity, audience)
76
77 return unicastTo(data, byAccount, videoChannel.Account.sharedInboxUrl, t)
78}
79
80async function announceActivityData (
81 url: string,
82 byAccount: AccountInstance,
83 object: ActivityCreate | ActivityAdd,
84 audience?: ActivityAudience
85) {
86 if (!audience) {
87 audience = await getAudience(byAccount)
88 }
89
30 const activity: ActivityAnnounce = { 90 const activity: ActivityAnnounce = {
31 type: 'Announce', 91 type: 'Announce',
92 to: audience.to,
93 cc: audience.cc,
32 id: url, 94 id: url,
33 actor: byAccount.url, 95 actor: byAccount.url,
34 object 96 object
@@ -40,7 +102,11 @@ async function announceActivityData (url: string, byAccount: AccountInstance, ob
40// --------------------------------------------------------------------------- 102// ---------------------------------------------------------------------------
41 103
42export { 104export {
43 sendVideoAnnounce, 105 sendVideoAnnounceToFollowers,
44 sendVideoChannelAnnounce, 106 sendVideoChannelAnnounceToFollowers,
45 announceActivityData 107 sendVideoAnnounceToOrigin,
108 sendVideoChannelAnnounceToOrigin,
109 announceActivityData,
110 buildVideoAnnounceToFollowers,
111 buildVideoChannelAnnounceToFollowers
46} 112}