]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/lib/activitypub/videos/refresh.ts
Refactor AP video logger tags
[github/Chocobozzz/PeerTube.git] / server / lib / activitypub / videos / refresh.ts
CommitLineData
46320694 1import { logger, loggerTagsFactory } from '@server/helpers/logger'
304a84d5
C
2import { PeerTubeRequestError } from '@server/helpers/requests'
3import { VideoFetchByUrlType } from '@server/helpers/video'
4import { ActorFollowScoreCache } from '@server/lib/files-cache'
5import { VideoModel } from '@server/models/video/video'
6import { MVideoAccountLightBlacklistAllFiles, MVideoThumbnail } from '@server/types/models'
7import { HttpStatusCode } from '@shared/core-utils'
8import { fetchRemoteVideo, SyncParam, syncVideoExternalAttributes } from './shared'
9import { APVideoUpdater } from './updater'
10
11async function refreshVideoIfNeeded (options: {
12 video: MVideoThumbnail
13 fetchedType: VideoFetchByUrlType
14 syncParam: SyncParam
15}): Promise<MVideoThumbnail> {
16 if (!options.video.isOutdated()) return options.video
17
18 // We need more attributes if the argument video was fetched with not enough joints
19 const video = options.fetchedType === 'all'
20 ? options.video as MVideoAccountLightBlacklistAllFiles
21 : await VideoModel.loadByUrlAndPopulateAccount(options.video.url)
22
908e6ead
C
23 const lTags = loggerTagsFactory('ap', 'video', 'refresh', video.uuid, video.url)
24
304a84d5
C
25 try {
26 const { videoObject } = await fetchRemoteVideo(video.url)
27
28 if (videoObject === undefined) {
908e6ead 29 logger.warn('Cannot refresh remote video %s: invalid body.', video.url, lTags())
304a84d5
C
30
31 await video.setAsRefreshed()
32 return video
33 }
34
35 const videoUpdater = new APVideoUpdater(videoObject, video)
36 await videoUpdater.update()
37
38 await syncVideoExternalAttributes(video, videoObject, options.syncParam)
39
40 ActorFollowScoreCache.Instance.addGoodServerId(video.VideoChannel.Actor.serverId)
41
42 return video
43 } catch (err) {
44 if ((err as PeerTubeRequestError).statusCode === HttpStatusCode.NOT_FOUND_404) {
908e6ead 45 logger.info('Cannot refresh remote video %s: video does not exist anymore. Deleting it.', video.url, lTags())
304a84d5
C
46
47 // Video does not exist anymore
48 await video.destroy()
49 return undefined
50 }
51
908e6ead 52 logger.warn('Cannot refresh video %s.', options.video.url, { err, ...lTags() })
304a84d5
C
53
54 ActorFollowScoreCache.Instance.addBadServerId(video.VideoChannel.Actor.serverId)
55
56 // Don't refresh in loop
57 await video.setAsRefreshed()
58 return video
59 }
60}
61
62// ---------------------------------------------------------------------------
63
64export {
65 refreshVideoIfNeeded
66}