]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/controllers/activitypub/outbox.ts
Don't show videos of remote instance after unfollow
[github/Chocobozzz/PeerTube.git] / server / controllers / activitypub / outbox.ts
CommitLineData
e71bcc0f 1import * as express from 'express'
d52eb8f6 2import { Activity } from '../../../shared/models/activitypub/activity'
40ff5707
C
3import { activityPubCollectionPagination } from '../../helpers/activitypub'
4import { pageToStartAndCount } from '../../helpers/core-utils'
40ff5707 5import { ACTIVITY_PUB } from '../../initializers/constants'
50d6de9c 6import { announceActivityData, createActivityData } from '../../lib/activitypub/send'
e71bcc0f 7import { getAnnounceActivityPubUrl } from '../../lib/activitypub/url'
e71bcc0f 8import { asyncMiddleware, localAccountValidator } from '../../middlewares'
3fd3ab2d
C
9import { AccountModel } from '../../models/account/account'
10import { VideoModel } from '../../models/video/video'
e71bcc0f
C
11
12const outboxRouter = express.Router()
13
e8e12200 14outboxRouter.get('/accounts/:name/outbox',
e71bcc0f
C
15 localAccountValidator,
16 asyncMiddleware(outboxController)
17)
18
19// ---------------------------------------------------------------------------
20
21export {
22 outboxRouter
23}
24
25// ---------------------------------------------------------------------------
26
27async function outboxController (req: express.Request, res: express.Response, next: express.NextFunction) {
3fd3ab2d 28 const account: AccountModel = res.locals.account
50d6de9c 29 const actor = account.Actor
e71bcc0f 30
c46edbc2 31 const page = req.query.page || 1
e71bcc0f
C
32 const { start, count } = pageToStartAndCount(page, ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE)
33
50d6de9c 34 const data = await VideoModel.listAllAndSharedByActorForOutbox(actor.id, start, count)
e71bcc0f
C
35 const activities: Activity[] = []
36
e71bcc0f
C
37 for (const video of data.data) {
38 const videoObject = video.toActivityPubObject()
e71bcc0f 39
98ec8b8e 40 const videoChannel = video.VideoChannel
50d6de9c 41 // This is a shared video
40ff5707 42 if (video.VideoShares !== undefined && video.VideoShares.length !== 0) {
50d6de9c 43 const createActivity = await createActivityData(video.url, videoChannel.Account.Actor, videoObject, undefined)
40ff5707 44
50d6de9c
C
45 const url = getAnnounceActivityPubUrl(video.url, actor)
46 const announceActivity = await announceActivityData(url, actor, createActivity, undefined)
40ff5707 47
e71bcc0f
C
48 activities.push(announceActivity)
49 } else {
50d6de9c 50 const createActivity = await createActivityData(video.url, videoChannel.Account.Actor, videoObject, undefined)
40ff5707 51
50d6de9c 52 activities.push(createActivity)
e71bcc0f
C
53 }
54 }
55
56 const newResult = {
57 data: activities,
58 total: data.total
59 }
50d6de9c 60 const json = activityPubCollectionPagination(account.Actor.url + '/outbox', page, newResult)
e71bcc0f
C
61
62 return res.json(json).end()
63}