X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fcache%2Fvideos-preview-cache.ts;h=d09d55e111704db11c16f490d40ece8819d630f9;hb=bbe0f0645ca958d33a3f409b15166609733b663f;hp=791ad1cbf77f0735af2fa0e3ef35f7ae26900e07;hpb=38fa2065831b5f55be0d7f30f19a62c967397208;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/cache/videos-preview-cache.ts b/server/lib/cache/videos-preview-cache.ts index 791ad1cbf..d09d55e11 100644 --- a/server/lib/cache/videos-preview-cache.ts +++ b/server/lib/cache/videos-preview-cache.ts @@ -1,11 +1,11 @@ import * as asyncLRU from 'async-lru' -import { join } from 'path' import { createWriteStream } from 'fs' - -import { database as db, CONFIG, CACHE } from '../../initializers' -import { logger, unlinkPromise } from '../../helpers' -import { VideoInstance } from '../../models' -import { fetchRemotePreview } from '../../lib' +import { join } from 'path' +import { unlinkPromise } from '../../helpers/core-utils' +import { logger } from '../../helpers/logger' +import { CACHE, CONFIG } from '../../initializers' +import { VideoModel } from '../../models/video/video' +import { fetchRemoteVideoPreview } from '../activitypub' class VideosPreviewCache { @@ -34,7 +34,12 @@ class VideosPreviewCache { }) } - getPreviewPath (key: string) { + async getPreviewPath (key: string) { + const video = await VideoModel.loadByUUID(key) + if (!video) return undefined + + if (video.isOwned()) return join(CONFIG.STORAGE.PREVIEWS_DIR, video.getPreviewName()) + return new Promise((res, rej) => { this.lru.get(key, (err, value) => { err ? rej(err) : res(value) @@ -43,26 +48,23 @@ class VideosPreviewCache { } private async loadPreviews (key: string) { - const video = await db.Video.loadByUUIDAndPopulateAccountAndPodAndTags(key) + const video = await VideoModel.loadByUUIDAndPopulateAccountAndServerAndTags(key) if (!video) return undefined - if (video.isOwned()) return join(CONFIG.STORAGE.PREVIEWS_DIR, video.getPreviewName()) + if (video.isOwned()) throw new Error('Cannot load preview of owned video.') - const res = await this.saveRemotePreviewAndReturnPath(video) - - return res + return this.saveRemotePreviewAndReturnPath(video) } - private saveRemotePreviewAndReturnPath (video: VideoInstance) { - const req = fetchRemotePreview(video) - + private saveRemotePreviewAndReturnPath (video: VideoModel) { return new Promise((res, rej) => { + const req = fetchRemoteVideoPreview(video, rej) const path = join(CACHE.DIRECTORIES.PREVIEWS, video.getPreviewName()) const stream = createWriteStream(path) req.pipe(stream) - .on('finish', () => res(path)) - .on('error', (err) => rej(err)) + .on('error', (err) => rej(err)) + .on('finish', () => res(path)) }) } }