X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Factivitypub%2Fcache-file.ts;h=f6f068b456828e37455167d0d881f0b09e31263d;hb=dc13348070d808d0ba3feb56a435b835c2e7e791;hp=87f8a4162b0a7770d4327499486ab5dc9c0474d2;hpb=12ba460e9ebf4951f9c1caee8822a8ca1523563f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/activitypub/cache-file.ts b/server/lib/activitypub/cache-file.ts index 87f8a4162..f6f068b45 100644 --- a/server/lib/activitypub/cache-file.ts +++ b/server/lib/activitypub/cache-file.ts @@ -1,7 +1,7 @@ import { CacheFileObject } from '../../../shared/index' import { VideoModel } from '../../models/video/video' -import { sequelizeTypescript } from '../../initializers' import { VideoRedundancyModel } from '../../models/redundancy/video-redundancy' +import { Transaction } from 'sequelize' function cacheFileActivityObjectToDBAttributes (cacheFileObject: CacheFileObject, video: VideoModel, byActor: { id?: number }) { const url = cacheFileObject.url @@ -22,28 +22,43 @@ function cacheFileActivityObjectToDBAttributes (cacheFileObject: CacheFileObject } } -function createCacheFile (cacheFileObject: CacheFileObject, video: VideoModel, byActor: { id?: number }) { - return sequelizeTypescript.transaction(async t => { - const attributes = cacheFileActivityObjectToDBAttributes(cacheFileObject, video, byActor) +async function createOrUpdateCacheFile (cacheFileObject: CacheFileObject, video: VideoModel, byActor: { id?: number }, t: Transaction) { + const redundancyModel = await VideoRedundancyModel.loadByUrl(cacheFileObject.id, t) - return VideoRedundancyModel.create(attributes, { transaction: t }) - }) + if (!redundancyModel) { + await createCacheFile(cacheFileObject, video, byActor, t) + } else { + await updateCacheFile(cacheFileObject, redundancyModel, video, byActor, t) + } +} + +function createCacheFile (cacheFileObject: CacheFileObject, video: VideoModel, byActor: { id?: number }, t: Transaction) { + const attributes = cacheFileActivityObjectToDBAttributes(cacheFileObject, video, byActor) + + return VideoRedundancyModel.create(attributes, { transaction: t }) } -function updateCacheFile (cacheFileObject: CacheFileObject, redundancyModel: VideoRedundancyModel, byActor: { id?: number }) { +function updateCacheFile ( + cacheFileObject: CacheFileObject, + redundancyModel: VideoRedundancyModel, + video: VideoModel, + byActor: { id?: number }, + t: Transaction +) { if (redundancyModel.actorId !== byActor.id) { throw new Error('Cannot update redundancy ' + redundancyModel.url + ' of another actor.') } - const attributes = cacheFileActivityObjectToDBAttributes(cacheFileObject, redundancyModel.VideoFile.Video, byActor) + const attributes = cacheFileActivityObjectToDBAttributes(cacheFileObject, video, byActor) redundancyModel.set('expires', attributes.expiresOn) redundancyModel.set('fileUrl', attributes.fileUrl) - return redundancyModel.save() + return redundancyModel.save({ transaction: t }) } export { + createOrUpdateCacheFile, createCacheFile, updateCacheFile, cacheFileActivityObjectToDBAttributes