Refactor video caption/preview caches
This commit is contained in:
parent
3acc508440
commit
dc85273764
4 changed files with 10 additions and 24 deletions
|
@ -15,7 +15,7 @@ import { sanitizeAndCheckVideoTorrentObject } from '../../helpers/custom-validat
|
||||||
import { isVideoFileInfoHashValid } from '../../helpers/custom-validators/videos'
|
import { isVideoFileInfoHashValid } from '../../helpers/custom-validators/videos'
|
||||||
import { resetSequelizeInstance, retryTransactionWrapper } from '../../helpers/database-utils'
|
import { resetSequelizeInstance, retryTransactionWrapper } from '../../helpers/database-utils'
|
||||||
import { logger } from '../../helpers/logger'
|
import { logger } from '../../helpers/logger'
|
||||||
import { doRequest } from '../../helpers/requests'
|
import { doRequest, doRequestAndSaveToFile } from '../../helpers/requests'
|
||||||
import {
|
import {
|
||||||
ACTIVITY_PUB,
|
ACTIVITY_PUB,
|
||||||
MIMETYPES,
|
MIMETYPES,
|
||||||
|
@ -108,13 +108,11 @@ async function fetchRemoteVideoDescription (video: VideoModel) {
|
||||||
return body.description ? body.description : ''
|
return body.description ? body.description : ''
|
||||||
}
|
}
|
||||||
|
|
||||||
function fetchRemoteVideoStaticFile (video: VideoModel, path: string, reject: Function) {
|
function fetchRemoteVideoStaticFile (video: VideoModel, path: string, destPath: string) {
|
||||||
const url = buildRemoteBaseUrl(video, path)
|
const url = buildRemoteBaseUrl(video, path)
|
||||||
|
|
||||||
// We need to provide a callback, if no we could have an uncaught exception
|
// We need to provide a callback, if no we could have an uncaught exception
|
||||||
return request.get(url, err => {
|
return doRequestAndSaveToFile({ uri: url }, destPath)
|
||||||
if (err) reject(err)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildRemoteBaseUrl (video: VideoModel, path: string) {
|
function buildRemoteBaseUrl (video: VideoModel, path: string) {
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
import { createWriteStream, remove } from 'fs-extra'
|
import { remove } from 'fs-extra'
|
||||||
import { logger } from '../../helpers/logger'
|
import { logger } from '../../helpers/logger'
|
||||||
import { VideoModel } from '../../models/video/video'
|
|
||||||
import { fetchRemoteVideoStaticFile } from '../activitypub'
|
|
||||||
import * as memoizee from 'memoizee'
|
import * as memoizee from 'memoizee'
|
||||||
|
|
||||||
type GetFilePathResult = { isOwned: boolean, path: string } | undefined
|
type GetFilePathResult = { isOwned: boolean, path: string } | undefined
|
||||||
|
@ -29,16 +27,4 @@ export abstract class AbstractVideoStaticFileCache <T> {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
protected saveRemoteVideoFileAndReturnPath (video: VideoModel, remoteStaticPath: string, destPath: string) {
|
|
||||||
return new Promise<string>((res, rej) => {
|
|
||||||
const req = fetchRemoteVideoStaticFile(video, remoteStaticPath, rej)
|
|
||||||
|
|
||||||
const stream = createWriteStream(destPath)
|
|
||||||
|
|
||||||
req.pipe(stream)
|
|
||||||
.on('error', (err) => rej(err))
|
|
||||||
.on('finish', () => res(destPath))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import { VideoCaptionModel } from '../../models/video/video-caption'
|
||||||
import { AbstractVideoStaticFileCache } from './abstract-video-static-file-cache'
|
import { AbstractVideoStaticFileCache } from './abstract-video-static-file-cache'
|
||||||
import { CONFIG } from '../../initializers/config'
|
import { CONFIG } from '../../initializers/config'
|
||||||
import { logger } from '../../helpers/logger'
|
import { logger } from '../../helpers/logger'
|
||||||
|
import { fetchRemoteVideoStaticFile } from '../activitypub'
|
||||||
|
|
||||||
type GetPathParam = { videoId: string, language: string }
|
type GetPathParam = { videoId: string, language: string }
|
||||||
|
|
||||||
|
@ -49,9 +50,9 @@ class VideosCaptionCache extends AbstractVideoStaticFileCache <GetPathParam> {
|
||||||
const remoteStaticPath = videoCaption.getCaptionStaticPath()
|
const remoteStaticPath = videoCaption.getCaptionStaticPath()
|
||||||
const destPath = join(FILES_CACHE.VIDEO_CAPTIONS.DIRECTORY, videoCaption.getCaptionName())
|
const destPath = join(FILES_CACHE.VIDEO_CAPTIONS.DIRECTORY, videoCaption.getCaptionName())
|
||||||
|
|
||||||
const path = await this.saveRemoteVideoFileAndReturnPath(video, remoteStaticPath, destPath)
|
await fetchRemoteVideoStaticFile(video, remoteStaticPath, destPath)
|
||||||
|
|
||||||
return { isOwned: false, path }
|
return { isOwned: false, path: destPath }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ import { FILES_CACHE, STATIC_PATHS } from '../../initializers/constants'
|
||||||
import { VideoModel } from '../../models/video/video'
|
import { VideoModel } from '../../models/video/video'
|
||||||
import { AbstractVideoStaticFileCache } from './abstract-video-static-file-cache'
|
import { AbstractVideoStaticFileCache } from './abstract-video-static-file-cache'
|
||||||
import { CONFIG } from '../../initializers/config'
|
import { CONFIG } from '../../initializers/config'
|
||||||
|
import { fetchRemoteVideoStaticFile } from '../activitypub'
|
||||||
|
|
||||||
class VideosPreviewCache extends AbstractVideoStaticFileCache <string> {
|
class VideosPreviewCache extends AbstractVideoStaticFileCache <string> {
|
||||||
|
|
||||||
|
@ -35,9 +36,9 @@ class VideosPreviewCache extends AbstractVideoStaticFileCache <string> {
|
||||||
const remoteStaticPath = join(STATIC_PATHS.PREVIEWS, video.getPreview().filename)
|
const remoteStaticPath = join(STATIC_PATHS.PREVIEWS, video.getPreview().filename)
|
||||||
const destPath = join(FILES_CACHE.PREVIEWS.DIRECTORY, video.getPreview().filename)
|
const destPath = join(FILES_CACHE.PREVIEWS.DIRECTORY, video.getPreview().filename)
|
||||||
|
|
||||||
const path = await this.saveRemoteVideoFileAndReturnPath(video, remoteStaticPath, destPath)
|
await fetchRemoteVideoStaticFile(video, remoteStaticPath, destPath)
|
||||||
|
|
||||||
return { isOwned: false, path }
|
return { isOwned: false, path: destPath }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue