aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/lib/activitypub/cache-file.ts
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2018-09-11 16:27:07 +0200
committerChocobozzz <me@florianbigard.com>2018-09-13 14:05:49 +0200
commitc48e82b5e0478434de30626d14594a97f2402e7c (patch)
treea78e5272bd0fe4f5b41831e571e02d05f1515b82 /server/lib/activitypub/cache-file.ts
parenta651038487faa838bda3ce04695b08bc65baff70 (diff)
downloadPeerTube-c48e82b5e0478434de30626d14594a97f2402e7c.tar.gz
PeerTube-c48e82b5e0478434de30626d14594a97f2402e7c.tar.zst
PeerTube-c48e82b5e0478434de30626d14594a97f2402e7c.zip
Basic video redundancy implementation
Diffstat (limited to 'server/lib/activitypub/cache-file.ts')
-rw-r--r--server/lib/activitypub/cache-file.ts47
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 @@
1import { CacheFileObject } from '../../../shared/index'
2import { VideoModel } from '../../models/video/video'
3import { ActorModel } from '../../models/activitypub/actor'
4import { sequelizeTypescript } from '../../initializers'
5import { VideoRedundancyModel } from '../../models/redundancy/video-redundancy'
6
7function 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
26function 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
34function 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
43export {
44 createCacheFile,
45 updateCacheFile,
46 cacheFileActivityObjectToDBAttributes
47}