]>
Commit | Line | Data |
---|---|---|
54141398 | 1 | import { Transaction } from 'sequelize' |
0f320037 C |
2 | import { |
3 | ActivityAnnounce, | |
4 | ActivityAudience, | |
5 | ActivityCreate, | |
6 | ActivityFollow, | |
7 | ActivityLike, | |
8 | ActivityUndo | |
9 | } from '../../../../shared/models/activitypub' | |
50d6de9c C |
10 | import { ActorModel } from '../../../models/activitypub/actor' |
11 | import { ActorFollowModel } from '../../../models/activitypub/actor-follow' | |
3fd3ab2d | 12 | import { VideoModel } from '../../../models/video/video' |
50d6de9c | 13 | import { getActorFollowActivityPubUrl, getUndoActivityPubUrl, getVideoDislikeActivityPubUrl, getVideoLikeActivityPubUrl } from '../url' |
5e3bb76c | 14 | import { |
e12a0092 | 15 | audiencify, |
5e3bb76c | 16 | broadcastToFollowers, |
50d6de9c | 17 | getActorsInvolvedInVideo, |
5e3bb76c C |
18 | getAudience, |
19 | getObjectFollowersAudience, | |
20 | getOriginVideoAudience, | |
21 | unicastTo | |
22 | } from './misc' | |
d8553faa | 23 | import { createActivityData, createDislikeActivityData } from './send-create' |
54141398 | 24 | import { followActivityData } from './send-follow' |
0032ebe9 | 25 | import { likeActivityData } from './send-like' |
0f320037 C |
26 | import { VideoShareModel } from '../../../models/video/video-share' |
27 | import { buildVideoAnnounce } from './send-announce' | |
54141398 | 28 | |
50d6de9c C |
29 | async function sendUndoFollow (actorFollow: ActorFollowModel, t: Transaction) { |
30 | const me = actorFollow.ActorFollower | |
31 | const following = actorFollow.ActorFollowing | |
54141398 | 32 | |
50d6de9c | 33 | const followUrl = getActorFollowActivityPubUrl(actorFollow) |
54141398 C |
34 | const undoUrl = getUndoActivityPubUrl(followUrl) |
35 | ||
25ed141c C |
36 | const object = followActivityData(followUrl, me, following) |
37 | const data = await undoActivityData(undoUrl, me, object, t) | |
54141398 | 38 | |
94a5ff8a | 39 | return unicastTo(data, me, following.inboxUrl) |
54141398 C |
40 | } |
41 | ||
07197db4 | 42 | async function sendUndoLike (byActor: ActorModel, video: VideoModel, t: Transaction) { |
50d6de9c | 43 | const likeUrl = getVideoLikeActivityPubUrl(byActor, video) |
0032ebe9 C |
44 | const undoUrl = getUndoActivityPubUrl(likeUrl) |
45 | ||
50d6de9c | 46 | const actorsInvolvedInVideo = await getActorsInvolvedInVideo(video, t) |
50d6de9c | 47 | const object = await likeActivityData(likeUrl, byActor, video, t) |
0032ebe9 | 48 | |
07197db4 C |
49 | // Send to origin |
50 | if (video.isOwned() === false) { | |
51 | const audience = getOriginVideoAudience(video, actorsInvolvedInVideo) | |
52 | const data = await undoActivityData(undoUrl, byActor, object, t, audience) | |
0032ebe9 | 53 | |
07197db4 C |
54 | return unicastTo(data, byActor, video.VideoChannel.Account.Actor.sharedInboxUrl) |
55 | } | |
0032ebe9 | 56 | |
07197db4 | 57 | const audience = getObjectFollowersAudience(actorsInvolvedInVideo) |
50d6de9c | 58 | const data = await undoActivityData(undoUrl, byActor, object, t, audience) |
0032ebe9 | 59 | |
50d6de9c | 60 | const followersException = [ byActor ] |
07197db4 | 61 | return broadcastToFollowers(data, byActor, actorsInvolvedInVideo, t, followersException) |
0032ebe9 C |
62 | } |
63 | ||
07197db4 | 64 | async function sendUndoDislike (byActor: ActorModel, video: VideoModel, t: Transaction) { |
50d6de9c | 65 | const dislikeUrl = getVideoDislikeActivityPubUrl(byActor, video) |
0032ebe9 C |
66 | const undoUrl = getUndoActivityPubUrl(dislikeUrl) |
67 | ||
50d6de9c | 68 | const actorsInvolvedInVideo = await getActorsInvolvedInVideo(video, t) |
50d6de9c | 69 | const dislikeActivity = createDislikeActivityData(byActor, video) |
0f320037 | 70 | const object = await createActivityData(dislikeUrl, byActor, dislikeActivity, t) |
0032ebe9 | 71 | |
07197db4 C |
72 | if (video.isOwned() === false) { |
73 | const audience = getOriginVideoAudience(video, actorsInvolvedInVideo) | |
74 | const data = await undoActivityData(undoUrl, byActor, object, t, audience) | |
0032ebe9 | 75 | |
07197db4 C |
76 | return unicastTo(data, byActor, video.VideoChannel.Account.Actor.sharedInboxUrl) |
77 | } | |
0032ebe9 | 78 | |
50d6de9c | 79 | const data = await undoActivityData(undoUrl, byActor, object, t) |
0032ebe9 | 80 | |
50d6de9c | 81 | const followersException = [ byActor ] |
07197db4 | 82 | return broadcastToFollowers(data, byActor, actorsInvolvedInVideo, t, followersException) |
0032ebe9 C |
83 | } |
84 | ||
0f320037 C |
85 | async function sendUndoAnnounce (byActor: ActorModel, videoShare: VideoShareModel, video: VideoModel, t: Transaction) { |
86 | const undoUrl = getUndoActivityPubUrl(videoShare.url) | |
87 | ||
88 | const actorsInvolvedInVideo = await getActorsInvolvedInVideo(video, t) | |
89 | const object = await buildVideoAnnounce(byActor, videoShare, video, t) | |
90 | const data = await undoActivityData(undoUrl, byActor, object, t) | |
91 | ||
92 | const followersException = [ byActor ] | |
93 | return broadcastToFollowers(data, byActor, actorsInvolvedInVideo, t, followersException) | |
94 | } | |
95 | ||
54141398 C |
96 | // --------------------------------------------------------------------------- |
97 | ||
98 | export { | |
0032ebe9 | 99 | sendUndoFollow, |
07197db4 | 100 | sendUndoLike, |
0f320037 C |
101 | sendUndoDislike, |
102 | sendUndoAnnounce | |
54141398 C |
103 | } |
104 | ||
105 | // --------------------------------------------------------------------------- | |
106 | ||
63c93323 C |
107 | async function undoActivityData ( |
108 | url: string, | |
50d6de9c | 109 | byActor: ActorModel, |
0f320037 | 110 | object: ActivityFollow | ActivityLike | ActivityCreate | ActivityAnnounce, |
25ed141c | 111 | t: Transaction, |
63c93323 | 112 | audience?: ActivityAudience |
3fd3ab2d | 113 | ): Promise<ActivityUndo> { |
63c93323 | 114 | if (!audience) { |
50d6de9c | 115 | audience = await getAudience(byActor, t) |
63c93323 C |
116 | } |
117 | ||
e12a0092 | 118 | return audiencify({ |
73c08093 | 119 | type: 'Undo' as 'Undo', |
54141398 | 120 | id: url, |
50d6de9c | 121 | actor: byActor.url, |
54141398 | 122 | object |
e12a0092 | 123 | }, audience) |
54141398 | 124 | } |