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