]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/lib/activitypub/cache-file.ts
Optimize activity actor load in AP processors
[github/Chocobozzz/PeerTube.git] / server / lib / activitypub / cache-file.ts
CommitLineData
c48e82b5
C
1import { CacheFileObject } from '../../../shared/index'
2import { VideoModel } from '../../models/video/video'
c48e82b5
C
3import { sequelizeTypescript } from '../../initializers'
4import { VideoRedundancyModel } from '../../models/redundancy/video-redundancy'
5
e587e0ec 6function cacheFileActivityObjectToDBAttributes (cacheFileObject: CacheFileObject, video: VideoModel, byActor: { id?: number }) {
c48e82b5
C
7 const url = cacheFileObject.url
8
9 const videoFile = video.VideoFiles.find(f => {
10 return f.resolution === url.height && f.fps === url.fps
11 })
12
13 if (!videoFile) throw new Error(`Cannot find video file ${url.height} ${url.fps} of video ${video.url}`)
14
15 return {
16 expiresOn: new Date(cacheFileObject.expires),
17 url: cacheFileObject.id,
18 fileUrl: cacheFileObject.url.href,
19 strategy: null,
20 videoFileId: videoFile.id,
21 actorId: byActor.id
22 }
23}
24
e587e0ec 25function createCacheFile (cacheFileObject: CacheFileObject, video: VideoModel, byActor: { id?: number }) {
c48e82b5
C
26 return sequelizeTypescript.transaction(async t => {
27 const attributes = cacheFileActivityObjectToDBAttributes(cacheFileObject, video, byActor)
28
29 return VideoRedundancyModel.create(attributes, { transaction: t })
30 })
31}
32
e587e0ec 33function updateCacheFile (cacheFileObject: CacheFileObject, redundancyModel: VideoRedundancyModel, byActor: { id?: number }) {
c48e82b5
C
34 const attributes = cacheFileActivityObjectToDBAttributes(cacheFileObject, redundancyModel.VideoFile.Video, byActor)
35
36 redundancyModel.set('expires', attributes.expiresOn)
37 redundancyModel.set('fileUrl', attributes.fileUrl)
38
39 return redundancyModel.save()
40}
41
42export {
43 createCacheFile,
44 updateCacheFile,
45 cacheFileActivityObjectToDBAttributes
46}