diff options
Diffstat (limited to 'server/lib/activitypub/cache-file.ts')
-rw-r--r-- | server/lib/activitypub/cache-file.ts | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/server/lib/activitypub/cache-file.ts b/server/lib/activitypub/cache-file.ts new file mode 100644 index 000000000..7325ddcb6 --- /dev/null +++ b/server/lib/activitypub/cache-file.ts | |||
@@ -0,0 +1,47 @@ | |||
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' | ||
6 | |||
7 | function cacheFileActivityObjectToDBAttributes (cacheFileObject: CacheFileObject, video: VideoModel, byActor: ActorModel) { | ||
8 | const url = cacheFileObject.url | ||
9 | |||
10 | const videoFile = video.VideoFiles.find(f => { | ||
11 | return f.resolution === url.height && f.fps === url.fps | ||
12 | }) | ||
13 | |||
14 | if (!videoFile) throw new Error(`Cannot find video file ${url.height} ${url.fps} of video ${video.url}`) | ||
15 | |||
16 | return { | ||
17 | expiresOn: new Date(cacheFileObject.expires), | ||
18 | url: cacheFileObject.id, | ||
19 | fileUrl: cacheFileObject.url.href, | ||
20 | strategy: null, | ||
21 | videoFileId: videoFile.id, | ||
22 | actorId: byActor.id | ||
23 | } | ||
24 | } | ||
25 | |||
26 | function createCacheFile (cacheFileObject: CacheFileObject, video: VideoModel, byActor: ActorModel) { | ||
27 | return sequelizeTypescript.transaction(async t => { | ||
28 | const attributes = cacheFileActivityObjectToDBAttributes(cacheFileObject, video, byActor) | ||
29 | |||
30 | return VideoRedundancyModel.create(attributes, { transaction: t }) | ||
31 | }) | ||
32 | } | ||
33 | |||
34 | function updateCacheFile (cacheFileObject: CacheFileObject, redundancyModel: VideoRedundancyModel, byActor: ActorModel) { | ||
35 | const attributes = cacheFileActivityObjectToDBAttributes(cacheFileObject, redundancyModel.VideoFile.Video, byActor) | ||
36 | |||
37 | redundancyModel.set('expires', attributes.expiresOn) | ||
38 | redundancyModel.set('fileUrl', attributes.fileUrl) | ||
39 | |||
40 | return redundancyModel.save() | ||
41 | } | ||
42 | |||
43 | export { | ||
44 | createCacheFile, | ||
45 | updateCacheFile, | ||
46 | cacheFileActivityObjectToDBAttributes | ||
47 | } | ||