]>
Commit | Line | Data |
---|---|---|
1e7eb25f | 1 | import { Transaction } from 'sequelize' |
51353d9a | 2 | import { VideoViews } from '@server/lib/video-views' |
de94ac86 | 3 | import { MActorAudience, MVideoImmutable, MVideoUrl } from '@server/types/models' |
1e7eb25f | 4 | import { ActivityAudience, ActivityView } from '../../../../shared/models/activitypub' |
de94ac86 | 5 | import { logger } from '../../../helpers/logger' |
7d9ba5c0 | 6 | import { ActorModel } from '../../../models/actor/actor' |
1e7eb25f | 7 | import { audiencify, getAudience } from '../audience' |
de94ac86 C |
8 | import { getLocalVideoViewActivityPubUrl } from '../url' |
9 | import { sendVideoRelatedActivity } from './utils' | |
1e7eb25f | 10 | |
2c8776fc | 11 | async function sendView (byActor: ActorModel, video: MVideoImmutable, t: Transaction) { |
1e7eb25f C |
12 | logger.info('Creating job to send view of %s.', video.url) |
13 | ||
14 | const activityBuilder = (audience: ActivityAudience) => { | |
de94ac86 | 15 | const url = getLocalVideoViewActivityPubUrl(byActor, video) |
1e7eb25f C |
16 | |
17 | return buildViewActivity(url, byActor, video, audience) | |
18 | } | |
19 | ||
598edb8a | 20 | return sendVideoRelatedActivity(activityBuilder, { byActor, video, transaction: t, contextType: 'View' }) |
1e7eb25f C |
21 | } |
22 | ||
453e83ea | 23 | function buildViewActivity (url: string, byActor: MActorAudience, video: MVideoUrl, audience?: ActivityAudience): ActivityView { |
1e7eb25f C |
24 | if (!audience) audience = getAudience(byActor) |
25 | ||
26 | return audiencify( | |
27 | { | |
28 | id: url, | |
29 | type: 'View' as 'View', | |
30 | actor: byActor.url, | |
51353d9a C |
31 | object: video.url, |
32 | expires: new Date(VideoViews.Instance.buildViewerExpireTime()).toISOString() | |
1e7eb25f C |
33 | }, |
34 | audience | |
35 | ) | |
36 | } | |
37 | ||
38 | // --------------------------------------------------------------------------- | |
39 | ||
40 | export { | |
41 | sendView | |
42 | } |