]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/files-cache/videos-preview-cache.ts
Add rejected state to follows
[github/Chocobozzz/PeerTube.git] / server / lib / files-cache / videos-preview-cache.ts
index 14be7f24a57f75e1cfa63deb6548519e31806b4e..48d2cb52cf4a1df62bef174ba3bf81fbd83c812b 100644 (file)
@@ -1,9 +1,11 @@
 import { join } from 'path'
 import { join } from 'path'
-import { FILES_CACHE, STATIC_PATHS } from '../../initializers/constants'
+import { FILES_CACHE } from '../../initializers/constants'
 import { VideoModel } from '../../models/video/video'
 import { AbstractVideoStaticFileCache } from './abstract-video-static-file-cache'
 import { VideoModel } from '../../models/video/video'
 import { AbstractVideoStaticFileCache } from './abstract-video-static-file-cache'
-import { CONFIG } from '../../initializers/config'
-import { fetchRemoteVideoStaticFile } from '../activitypub'
+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 <string> {
 
 
 class VideosPreviewCache extends AbstractVideoStaticFileCache <string> {
 
@@ -17,28 +19,37 @@ class VideosPreviewCache extends AbstractVideoStaticFileCache <string> {
     return this.instance || (this.instance = new this())
   }
 
     return this.instance || (this.instance = new this())
   }
 
-  async getFilePathImpl (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 { isOwned: true, path: join(CONFIG.STORAGE.PREVIEWS_DIR, video.getPreview().filename) }
+    if (thumbnail.Video.isOwned()) return { isOwned: true, path: thumbnail.getPath() }
 
 
-    return this.loadRemoteFile(videoUUID)
+    return this.loadRemoteFile(thumbnail.Video.uuid)
   }
 
   }
 
+  // Key is the video UUID
   protected async loadRemoteFile (key: string) {
   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.')
 
     if (!video) return undefined
 
     if (video.isOwned()) throw new Error('Cannot load remote preview of owned video.')
 
-    // FIXME: use URL
-    const remoteStaticPath = join(STATIC_PATHS.PREVIEWS, video.getPreview().filename)
-    const destPath = join(FILES_CACHE.PREVIEWS.DIRECTORY, video.getPreview().filename)
+    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)
 
 
-    await fetchRemoteVideoStaticFile(video, remoteStaticPath, destPath)
+      return { isOwned: false, path: destPath }
+    } catch (err) {
+      logger.info('Cannot fetch remote preview file %s.', remoteUrl, { err })
 
 
-    return { isOwned: false, path: destPath }
+      return undefined
+    }
   }
 }
 
   }
 }