X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fcache%2Fvideos-preview-cache.ts;h=ea959076d88c7614b0e4e7dac4f981029bf1eea0;hb=d50acfab69ce9e05b272dea6c4d34d52960ba14c;hp=fecdca6eff41c921008f0656465dbd8eae8a75c8;hpb=72c7248b6fdcdb2175e726ff51b42e7555f2bd84;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/cache/videos-preview-cache.ts b/server/lib/cache/videos-preview-cache.ts index fecdca6ef..ea959076d 100644 --- a/server/lib/cache/videos-preview-cache.ts +++ b/server/lib/cache/videos-preview-cache.ts @@ -1,12 +1,10 @@ import * as asyncLRU from 'async-lru' -import { join } from 'path' import { createWriteStream } from 'fs' -import * as Promise from 'bluebird' - -import { database as db, CONFIG, CACHE } from '../../initializers' +import { join } from 'path' import { logger, unlinkPromise } from '../../helpers' -import { VideoInstance } from '../../models' -import { fetchRemotePreview } from '../../lib' +import { CACHE, CONFIG } from '../../initializers' +import { VideoModel } from '../../models/video/video' +import { fetchRemoteVideoPreview } from '../activitypub' class VideosPreviewCache { @@ -35,7 +33,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,27 +46,25 @@ class VideosPreviewCache { }) } - private loadPreviews (key: string) { - return db.Video.loadByUUIDAndPopulateAuthorAndPodAndTags(key) - .then(video => { - if (!video) return undefined + private async loadPreviews (key: string) { + 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.') - return this.saveRemotePreviewAndReturnPath(video) - }) + 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)) }) } }