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