X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fjob-queue%2Fhandlers%2Factivitypub-http-fetcher.ts;h=67ccfa9956ec12c3982ad6a5f19b410cc6c76eed;hb=14d1b7b95a096b933ea353a715f4868a89dc5822;hp=f21da087e9b80e127c4aac21eded92a1b4071a52;hpb=94831479f5facff9469540a3d49dd347b88bdf5a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/job-queue/handlers/activitypub-http-fetcher.ts b/server/lib/job-queue/handlers/activitypub-http-fetcher.ts index f21da087e..67ccfa995 100644 --- a/server/lib/job-queue/handlers/activitypub-http-fetcher.ts +++ b/server/lib/job-queue/handlers/activitypub-http-fetcher.ts @@ -1,22 +1,36 @@ import * as Bull from 'bull' import { logger } from '../../../helpers/logger' import { processActivities } from '../../activitypub/process' -import { ActivitypubHttpBroadcastPayload } from './activitypub-http-broadcast' +import { addVideoComments } from '../../activitypub/video-comments' import { crawlCollectionPage } from '../../activitypub/crawl' -import { Activity } from '../../../../shared/models/activitypub' +import { VideoModel } from '../../../models/video/video' +import { addVideoShares, createRates } from '../../activitypub' + +type FetchType = 'activity' | 'video-likes' | 'video-dislikes' | 'video-shares' | 'video-comments' export type ActivitypubHttpFetcherPayload = { - uris: string[] + uri: string + type: FetchType + videoId?: number } async function processActivityPubHttpFetcher (job: Bull.Job) { logger.info('Processing ActivityPub fetcher in job %d.', job.id) - const payload = job.data as ActivitypubHttpBroadcastPayload + const payload = job.data as ActivitypubHttpFetcherPayload + + let video: VideoModel + if (payload.videoId) video = await VideoModel.loadAndPopulateAccountAndServerAndTags(payload.videoId) - for (const uri of payload.uris) { - await crawlCollectionPage(uri, (items) => processActivities(items)) + const fetcherType: { [ id in FetchType ]: (items: any[]) => Promise } = { + 'activity': items => processActivities(items, { outboxUrl: payload.uri }), + 'video-likes': items => createRates(items, video, 'like'), + 'video-dislikes': items => createRates(items, video, 'dislike'), + 'video-shares': items => addVideoShares(items, video), + 'video-comments': items => addVideoComments(items, video) } + + return crawlCollectionPage(payload.uri, fetcherType[payload.type]) } // ---------------------------------------------------------------------------