X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Ffiles-cache%2Fvideos-preview-cache.ts;h=48d2cb52cf4a1df62bef174ba3bf81fbd83c812b;hb=3f0ceab06e5320f62f593c49daa30d963dbc36f9;hp=192f99aec6997c2c66b213cea147f06c6d466cb8;hpb=6dd9de95dfa39bd5c1faed00d1dbd52cd112bae0;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/files-cache/videos-preview-cache.ts b/server/lib/files-cache/videos-preview-cache.ts index 192f99aec..48d2cb52c 100644 --- a/server/lib/files-cache/videos-preview-cache.ts +++ b/server/lib/files-cache/videos-preview-cache.ts @@ -1,8 +1,11 @@ import { join } from 'path' -import { FILES_CACHE, STATIC_PATHS } from '../../initializers' +import { FILES_CACHE } from '../../initializers/constants' import { VideoModel } from '../../models/video/video' import { AbstractVideoStaticFileCache } from './abstract-video-static-file-cache' -import { CONFIG } from '../../initializers/config' +import { doRequestAndSaveToFile } from '@server/helpers/requests' +import { ThumbnailModel } from '@server/models/video/thumbnail' +import { ThumbnailType } from '@shared/models' +import { logger } from '@server/helpers/logger' class VideosPreviewCache extends AbstractVideoStaticFileCache { @@ -16,25 +19,37 @@ class VideosPreviewCache extends AbstractVideoStaticFileCache { return this.instance || (this.instance = new this()) } - async getFilePath (videoUUID: string) { - const video = await VideoModel.loadByUUIDWithFile(videoUUID) - if (!video) return undefined + async getFilePathImpl (filename: string) { + const thumbnail = await ThumbnailModel.loadWithVideoByFilename(filename, ThumbnailType.PREVIEW) + if (!thumbnail) return undefined - if (video.isOwned()) return join(CONFIG.STORAGE.PREVIEWS_DIR, video.getPreviewName()) + if (thumbnail.Video.isOwned()) return { isOwned: true, path: thumbnail.getPath() } - return this.loadFromLRU(videoUUID) + return this.loadRemoteFile(thumbnail.Video.uuid) } + // Key is the video UUID protected async loadRemoteFile (key: string) { - const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(key) + const video = await VideoModel.loadFull(key) if (!video) return undefined if (video.isOwned()) throw new Error('Cannot load remote preview of owned video.') - const remoteStaticPath = join(STATIC_PATHS.PREVIEWS, video.getPreviewName()) - const destPath = join(FILES_CACHE.PREVIEWS.DIRECTORY, video.getPreviewName()) + const preview = video.getPreview() + const destPath = join(FILES_CACHE.PREVIEWS.DIRECTORY, preview.filename) + const remoteUrl = preview.getFileUrl(video) + + try { + await doRequestAndSaveToFile(remoteUrl, destPath) + + logger.debug('Fetched remote preview %s to %s.', remoteUrl, destPath) + + return { isOwned: false, path: destPath } + } catch (err) { + logger.info('Cannot fetch remote preview file %s.', remoteUrl, { err }) - return this.saveRemoteVideoFileAndReturnPath(video, remoteStaticPath, destPath) + return undefined + } } }