-import { CacheFileObject } from '../../../shared/index'
-import { VideoRedundancyModel } from '../../models/redundancy/video-redundancy'
import { Transaction } from 'sequelize'
-import { VideoStreamingPlaylistType } from '../../../shared/models/videos/video-streaming-playlist.type'
-import { MActorId, MVideoRedundancy, MVideoWithAllFiles } from '@server/typings/models'
-
-function cacheFileActivityObjectToDBAttributes (cacheFileObject: CacheFileObject, video: MVideoWithAllFiles, byActor: MActorId) {
-
- if (cacheFileObject.url.mediaType === 'application/x-mpegURL') {
- const url = cacheFileObject.url
+import { MActorId, MVideoRedundancy, MVideoWithAllFiles } from '@server/types/models'
+import { CacheFileObject, VideoStreamingPlaylistType } from '@shared/models'
+import { VideoRedundancyModel } from '../../models/redundancy/video-redundancy'
- const playlist = video.VideoStreamingPlaylists.find(t => t.type === VideoStreamingPlaylistType.HLS)
- if (!playlist) throw new Error('Cannot find HLS playlist of video ' + video.url)
+async function createOrUpdateCacheFile (cacheFileObject: CacheFileObject, video: MVideoWithAllFiles, byActor: MActorId, t: Transaction) {
+ const redundancyModel = await VideoRedundancyModel.loadByUrl(cacheFileObject.id, t)
- return {
- expiresOn: cacheFileObject.expires ? new Date(cacheFileObject.expires) : null,
- url: cacheFileObject.id,
- fileUrl: url.href,
- strategy: null,
- videoStreamingPlaylistId: playlist.id,
- actorId: byActor.id
- }
+ if (redundancyModel) {
+ return updateCacheFile(cacheFileObject, redundancyModel, video, byActor, t)
}
- const url = cacheFileObject.url
- const videoFile = video.VideoFiles.find(f => {
- return f.resolution === url.height && f.fps === url.fps
- })
-
- if (!videoFile) throw new Error(`Cannot find video file ${url.height} ${url.fps} of video ${video.url}`)
-
- return {
- expiresOn: cacheFileObject.expires ? new Date(cacheFileObject.expires) : null,
- url: cacheFileObject.id,
- fileUrl: url.href,
- strategy: null,
- videoFileId: videoFile.id,
- actorId: byActor.id
- }
+ return createCacheFile(cacheFileObject, video, byActor, t)
}
-async function createOrUpdateCacheFile (cacheFileObject: CacheFileObject, video: MVideoWithAllFiles, byActor: MActorId, t: Transaction) {
- const redundancyModel = await VideoRedundancyModel.loadByUrl(cacheFileObject.id, t)
+// ---------------------------------------------------------------------------
- if (!redundancyModel) {
- await createCacheFile(cacheFileObject, video, byActor, t)
- } else {
- await updateCacheFile(cacheFileObject, redundancyModel, video, byActor, t)
- }
+export {
+ createOrUpdateCacheFile
}
+// ---------------------------------------------------------------------------
+
function createCacheFile (cacheFileObject: CacheFileObject, video: MVideoWithAllFiles, byActor: MActorId, t: Transaction) {
const attributes = cacheFileActivityObjectToDBAttributes(cacheFileObject, video, byActor)
return redundancyModel.save({ transaction: t })
}
-export {
- createOrUpdateCacheFile,
- createCacheFile,
- updateCacheFile,
- cacheFileActivityObjectToDBAttributes
+function cacheFileActivityObjectToDBAttributes (cacheFileObject: CacheFileObject, video: MVideoWithAllFiles, byActor: MActorId) {
+
+ if (cacheFileObject.url.mediaType === 'application/x-mpegURL') {
+ const url = cacheFileObject.url
+
+ const playlist = video.VideoStreamingPlaylists.find(t => t.type === VideoStreamingPlaylistType.HLS)
+ if (!playlist) throw new Error('Cannot find HLS playlist of video ' + video.url)
+
+ return {
+ expiresOn: cacheFileObject.expires ? new Date(cacheFileObject.expires) : null,
+ url: cacheFileObject.id,
+ fileUrl: url.href,
+ strategy: null,
+ videoStreamingPlaylistId: playlist.id,
+ actorId: byActor.id
+ }
+ }
+
+ const url = cacheFileObject.url
+ const videoFile = video.VideoFiles.find(f => {
+ return f.resolution === url.height && f.fps === url.fps
+ })
+
+ if (!videoFile) throw new Error(`Cannot find video file ${url.height} ${url.fps} of video ${video.url}`)
+
+ return {
+ expiresOn: cacheFileObject.expires ? new Date(cacheFileObject.expires) : null,
+ url: cacheFileObject.id,
+ fileUrl: url.href,
+ strategy: null,
+ videoFileId: videoFile.id,
+ actorId: byActor.id
+ }
}