1 import { CacheFileObject } from '../../../shared/index'
2 import { VideoModel } from '../../models/video/video'
3 import { ActorModel } from '../../models/activitypub/actor'
4 import { sequelizeTypescript } from '../../initializers'
5 import { VideoRedundancyModel } from '../../models/redundancy/video-redundancy'
7 function cacheFileActivityObjectToDBAttributes (cacheFileObject: CacheFileObject, video: VideoModel, byActor: ActorModel) {
8 const url = cacheFileObject.url
10 const videoFile = video.VideoFiles.find(f => {
11 return f.resolution === url.height && f.fps === url.fps
14 if (!videoFile) throw new Error(`Cannot find video file ${url.height} ${url.fps} of video ${video.url}`)
17 expiresOn: new Date(cacheFileObject.expires),
18 url: cacheFileObject.id,
19 fileUrl: cacheFileObject.url.href,
21 videoFileId: videoFile.id,
26 function createCacheFile (cacheFileObject: CacheFileObject, video: VideoModel, byActor: ActorModel) {
27 return sequelizeTypescript.transaction(async t => {
28 const attributes = cacheFileActivityObjectToDBAttributes(cacheFileObject, video, byActor)
30 return VideoRedundancyModel.create(attributes, { transaction: t })
34 function updateCacheFile (cacheFileObject: CacheFileObject, redundancyModel: VideoRedundancyModel, byActor: ActorModel) {
35 const attributes = cacheFileActivityObjectToDBAttributes(cacheFileObject, redundancyModel.VideoFile.Video, byActor)
37 redundancyModel.set('expires', attributes.expiresOn)
38 redundancyModel.set('fileUrl', attributes.fileUrl)
40 return redundancyModel.save()
46 cacheFileActivityObjectToDBAttributes