]>
Commit | Line | Data |
---|---|---|
54141398 | 1 | import { Transaction } from 'sequelize' |
3fd3ab2d | 2 | import { ActivityAudience, ActivityCreate } from '../../../../shared/models/activitypub' |
50d6de9c C |
3 | import { VideoPrivacy } from '../../../../shared/models/videos' |
4 | import { getServerActor } from '../../../helpers' | |
5 | import { ActorModel } from '../../../models/activitypub/actor' | |
3fd3ab2d C |
6 | import { VideoModel } from '../../../models/video/video' |
7 | import { VideoAbuseModel } from '../../../models/video/video-abuse' | |
0032ebe9 C |
8 | import { getVideoAbuseActivityPubUrl, getVideoDislikeActivityPubUrl, getVideoViewActivityPubUrl } from '../url' |
9 | import { | |
e12a0092 | 10 | audiencify, |
0032ebe9 | 11 | broadcastToFollowers, |
50d6de9c | 12 | getActorsInvolvedInVideo, |
0032ebe9 | 13 | getAudience, |
4e50b6a1 | 14 | getObjectFollowersAudience, |
25ed141c | 15 | getOriginVideoAudience, |
0032ebe9 C |
16 | unicastTo |
17 | } from './misc' | |
54141398 | 18 | |
50d6de9c | 19 | async function sendCreateVideo (video: VideoModel, t: Transaction) { |
e12a0092 | 20 | if (video.privacy === VideoPrivacy.PRIVATE) return |
54141398 | 21 | |
e12a0092 | 22 | const byActor = video.VideoChannel.Account.Actor |
50d6de9c | 23 | const videoObject = video.toActivityPubObject() |
e12a0092 | 24 | |
50d6de9c C |
25 | const audience = await getAudience(byActor, t, video.privacy === VideoPrivacy.PUBLIC) |
26 | const data = await createActivityData(video.url, byActor, videoObject, t, audience) | |
54141398 | 27 | |
50d6de9c | 28 | return broadcastToFollowers(data, byActor, [ byActor ], t) |
54141398 C |
29 | } |
30 | ||
50d6de9c | 31 | async function sendVideoAbuse (byActor: ActorModel, videoAbuse: VideoAbuseModel, video: VideoModel, t: Transaction) { |
54141398 | 32 | const url = getVideoAbuseActivityPubUrl(videoAbuse) |
40ff5707 | 33 | |
50d6de9c C |
34 | const audience = { to: [ video.VideoChannel.Account.Actor.url ], cc: [] } |
35 | const data = await createActivityData(url, byActor, videoAbuse.toActivityPubObject(), t, audience) | |
40ff5707 | 36 | |
50d6de9c | 37 | return unicastTo(data, byActor, video.VideoChannel.Account.Actor.sharedInboxUrl, t) |
40ff5707 C |
38 | } |
39 | ||
50d6de9c C |
40 | async function sendCreateViewToOrigin (byActor: ActorModel, video: VideoModel, t: Transaction) { |
41 | const url = getVideoViewActivityPubUrl(byActor, video) | |
42 | const viewActivity = createViewActivityData(byActor, video) | |
40ff5707 | 43 | |
50d6de9c C |
44 | const actorsInvolvedInVideo = await getActorsInvolvedInVideo(video, t) |
45 | const audience = getOriginVideoAudience(video, actorsInvolvedInVideo) | |
46 | const data = await createActivityData(url, byActor, viewActivity, t, audience) | |
54141398 | 47 | |
50d6de9c | 48 | return unicastTo(data, byActor, video.VideoChannel.Account.Actor.sharedInboxUrl, t) |
54141398 C |
49 | } |
50 | ||
50d6de9c C |
51 | async function sendCreateViewToVideoFollowers (byActor: ActorModel, video: VideoModel, t: Transaction) { |
52 | const url = getVideoViewActivityPubUrl(byActor, video) | |
53 | const viewActivity = createViewActivityData(byActor, video) | |
40ff5707 | 54 | |
50d6de9c C |
55 | const actorsToForwardView = await getActorsInvolvedInVideo(video, t) |
56 | const audience = getObjectFollowersAudience(actorsToForwardView) | |
57 | const data = await createActivityData(url, byActor, viewActivity, t, audience) | |
40ff5707 | 58 | |
50d6de9c C |
59 | // Use the server actor to send the view |
60 | const serverActor = await getServerActor() | |
61 | const followersException = [ byActor ] | |
62 | return broadcastToFollowers(data, serverActor, actorsToForwardView, t, followersException) | |
0032ebe9 C |
63 | } |
64 | ||
50d6de9c C |
65 | async function sendCreateDislikeToOrigin (byActor: ActorModel, video: VideoModel, t: Transaction) { |
66 | const url = getVideoDislikeActivityPubUrl(byActor, video) | |
67 | const dislikeActivity = createDislikeActivityData(byActor, video) | |
0032ebe9 | 68 | |
50d6de9c C |
69 | const actorsInvolvedInVideo = await getActorsInvolvedInVideo(video, t) |
70 | const audience = getOriginVideoAudience(video, actorsInvolvedInVideo) | |
71 | const data = await createActivityData(url, byActor, dislikeActivity, t, audience) | |
0032ebe9 | 72 | |
50d6de9c | 73 | return unicastTo(data, byActor, video.VideoChannel.Account.Actor.sharedInboxUrl, t) |
0032ebe9 | 74 | } |
40ff5707 | 75 | |
50d6de9c C |
76 | async function sendCreateDislikeToVideoFollowers (byActor: ActorModel, video: VideoModel, t: Transaction) { |
77 | const url = getVideoDislikeActivityPubUrl(byActor, video) | |
78 | const dislikeActivity = createDislikeActivityData(byActor, video) | |
0032ebe9 | 79 | |
50d6de9c C |
80 | const actorsToForwardView = await getActorsInvolvedInVideo(video, t) |
81 | const audience = getObjectFollowersAudience(actorsToForwardView) | |
82 | const data = await createActivityData(url, byActor, dislikeActivity, t, audience) | |
0032ebe9 | 83 | |
50d6de9c C |
84 | const followersException = [ byActor ] |
85 | return broadcastToFollowers(data, byActor, actorsToForwardView, t, followersException) | |
40ff5707 C |
86 | } |
87 | ||
3fd3ab2d C |
88 | async function createActivityData ( |
89 | url: string, | |
50d6de9c | 90 | byActor: ActorModel, |
3fd3ab2d C |
91 | object: any, |
92 | t: Transaction, | |
93 | audience?: ActivityAudience | |
94 | ): Promise<ActivityCreate> { | |
40ff5707 | 95 | if (!audience) { |
50d6de9c | 96 | audience = await getAudience(byActor, t) |
40ff5707 | 97 | } |
c986175d | 98 | |
e12a0092 | 99 | return audiencify({ |
54141398 C |
100 | type: 'Create', |
101 | id: url, | |
50d6de9c | 102 | actor: byActor.url, |
e12a0092 C |
103 | object: audiencify(object, audience) |
104 | }, audience) | |
54141398 C |
105 | } |
106 | ||
50d6de9c | 107 | function createDislikeActivityData (byActor: ActorModel, video: VideoModel) { |
3fd3ab2d | 108 | return { |
0032ebe9 | 109 | type: 'Dislike', |
50d6de9c | 110 | actor: byActor.url, |
0032ebe9 C |
111 | object: video.url |
112 | } | |
0032ebe9 C |
113 | } |
114 | ||
54141398 C |
115 | // --------------------------------------------------------------------------- |
116 | ||
117 | export { | |
50d6de9c | 118 | sendCreateVideo, |
54141398 | 119 | sendVideoAbuse, |
40ff5707 C |
120 | createActivityData, |
121 | sendCreateViewToOrigin, | |
0032ebe9 C |
122 | sendCreateViewToVideoFollowers, |
123 | sendCreateDislikeToOrigin, | |
124 | sendCreateDislikeToVideoFollowers, | |
125 | createDislikeActivityData | |
40ff5707 C |
126 | } |
127 | ||
128 | // --------------------------------------------------------------------------- | |
129 | ||
50d6de9c | 130 | function createViewActivityData (byActor: ActorModel, video: VideoModel) { |
3fd3ab2d | 131 | return { |
40ff5707 | 132 | type: 'View', |
50d6de9c | 133 | actor: byActor.url, |
40ff5707 C |
134 | object: video.url |
135 | } | |
54141398 | 136 | } |