]>
Commit | Line | Data |
---|---|---|
f4110e0a | 1 | import { Transaction } from 'sequelize' |
57e4e1c1 C |
2 | import { ACTIVITY_PUB } from '@server/initializers/constants' |
3 | import { ActorModel } from '@server/models/actor/actor' | |
4 | import { VideoModel } from '@server/models/video/video' | |
5 | import { VideoShareModel } from '@server/models/video/video-share' | |
3396e653 | 6 | import { MActorFollowersUrl, MActorUrl, MCommentOwner, MCommentOwnerVideo, MVideoId } from '@server/types/models' |
57e4e1c1 C |
7 | import { ActivityAudience } from '@shared/models' |
8 | ||
9 | function getOriginVideoAudience (accountActor: MActorUrl, actorsInvolvedInVideo: MActorFollowersUrl[] = []): ActivityAudience { | |
10 | return { | |
11 | to: [ accountActor.url ], | |
12 | cc: actorsInvolvedInVideo.map(a => a.followersUrl) | |
13 | } | |
14 | } | |
15 | ||
16 | function getVideoCommentAudience ( | |
17 | videoComment: MCommentOwnerVideo, | |
18 | threadParentComments: MCommentOwner[], | |
19 | actorsInvolvedInVideo: MActorFollowersUrl[], | |
20 | isOrigin = false | |
21 | ): ActivityAudience { | |
22 | const to = [ ACTIVITY_PUB.PUBLIC ] | |
23 | const cc: string[] = [] | |
24 | ||
25 | // Owner of the video we comment | |
26 | if (isOrigin === false) { | |
27 | cc.push(videoComment.Video.VideoChannel.Account.Actor.url) | |
28 | } | |
29 | ||
30 | // Followers of the poster | |
31 | cc.push(videoComment.Account.Actor.followersUrl) | |
32 | ||
33 | // Send to actors we reply to | |
34 | for (const parentComment of threadParentComments) { | |
35 | if (parentComment.isDeleted()) continue | |
36 | ||
37 | cc.push(parentComment.Account.Actor.url) | |
38 | } | |
39 | ||
40 | return { | |
41 | to, | |
42 | cc: cc.concat(actorsInvolvedInVideo.map(a => a.followersUrl)) | |
43 | } | |
44 | } | |
45 | ||
46 | function getAudienceFromFollowersOf (actorsInvolvedInObject: MActorFollowersUrl[]): ActivityAudience { | |
47 | return { | |
48 | to: [ ACTIVITY_PUB.PUBLIC ].concat(actorsInvolvedInObject.map(a => a.followersUrl)), | |
49 | cc: [] | |
50 | } | |
51 | } | |
52 | ||
53 | async function getActorsInvolvedInVideo (video: MVideoId, t: Transaction) { | |
3396e653 | 54 | const actors = await VideoShareModel.listActorIdsAndFollowerUrlsByShare(video.id, t) |
57e4e1c1 C |
55 | |
56 | const videoAll = video as VideoModel | |
57 | ||
58 | const videoActor = videoAll.VideoChannel?.Account | |
59 | ? videoAll.VideoChannel.Account.Actor | |
3396e653 | 60 | : await ActorModel.loadAccountActorFollowerUrlByVideoId(video.id, t) |
57e4e1c1 C |
61 | |
62 | actors.push(videoActor) | |
63 | ||
64 | return actors | |
65 | } | |
66 | ||
67 | // --------------------------------------------------------------------------- | |
68 | ||
69 | export { | |
70 | getOriginVideoAudience, | |
71 | getActorsInvolvedInVideo, | |
72 | getAudienceFromFollowersOf, | |
73 | getVideoCommentAudience | |
74 | } |