From 0184aa9be79e88891953bff2d318f2bba4ece845 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 10 Feb 2025 08:10:05 +0100 Subject: [PATCH] Fix caption in object storage export --- server/core/lib/object-storage/videos.ts | 15 +++++++++++++++ .../exporters/videos-exporter.ts | 16 ++++++++++++++-- .../core/lib/user-import-export/user-exporter.ts | 2 -- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/server/core/lib/object-storage/videos.ts b/server/core/lib/object-storage/videos.ts index 9e48757f5..6575b714b 100644 --- a/server/core/lib/object-storage/videos.ts +++ b/server/core/lib/object-storage/videos.ts @@ -252,3 +252,18 @@ export function getOriginalFileReadStream (options: { rangeHeader }) } + +export function getCaptionReadStream (options: { + filename: string + rangeHeader: string +}) { + const { filename, rangeHeader } = options + + const key = generateCaptionObjectStorageKey(filename) + + return createObjectReadStream({ + key, + bucketInfo: CONFIG.OBJECT_STORAGE.CAPTIONS, + rangeHeader + }) +} diff --git a/server/core/lib/user-import-export/exporters/videos-exporter.ts b/server/core/lib/user-import-export/exporters/videos-exporter.ts index 7c45fb6e8..a5b6c14d1 100644 --- a/server/core/lib/user-import-export/exporters/videos-exporter.ts +++ b/server/core/lib/user-import-export/exporters/videos-exporter.ts @@ -5,7 +5,7 @@ import { USER_EXPORT_MAX_ITEMS } from '@server/initializers/constants.js' import { audiencify, getAudience } from '@server/lib/activitypub/audience.js' import { buildCreateActivity } from '@server/lib/activitypub/send/send-create.js' import { buildChaptersAPHasPart } from '@server/lib/activitypub/video-chapters.js' -import { getHLSFileReadStream, getOriginalFileReadStream, getWebVideoFileReadStream } from '@server/lib/object-storage/videos.js' +import { getCaptionReadStream, getHLSFileReadStream, getOriginalFileReadStream, getWebVideoFileReadStream } from '@server/lib/object-storage/videos.js' import { muxToMergeVideoFiles } from '@server/lib/video-file.js' import { VideoPathManager } from '@server/lib/video-path-manager.js' import { VideoCaptionModel } from '@server/models/video/video-caption.js' @@ -344,7 +344,7 @@ export class VideosExporter extends AbstractUserExporter { for (const caption of captions) { staticFiles.push({ archivePath: this.getArchiveCaptionFilePath(video, caption), - readStreamFactory: () => Promise.resolve(createReadStream(caption.getFSPath())) + readStreamFactory: () => this.generateCaptionReadStream(caption) }) relativePathsFromJSON.captions[caption.language] = join(this.relativeStaticDirPath, this.getArchiveCaptionFilePath(video, caption)) @@ -400,6 +400,18 @@ export class VideosExporter extends AbstractUserExporter { return stream } + private async generateCaptionReadStream (caption: MVideoCaption): Promise { + if (caption.storage === FileStorage.FILE_SYSTEM) { + return createReadStream(caption.getFSPath()) + } + + const { stream } = await getCaptionReadStream({ filename: caption.filename, rangeHeader: undefined }) + + return stream + } + + // --------------------------------------------------------------------------- + private async getArchiveVideo (video: MVideoFullLight) { const source = await VideoSourceModel.loadLatest(video.id) diff --git a/server/core/lib/user-import-export/user-exporter.ts b/server/core/lib/user-import-export/user-exporter.ts index 3ea6b00ff..2a8fc2ece 100644 --- a/server/core/lib/user-import-export/user-exporter.ts +++ b/server/core/lib/user-import-export/user-exporter.ts @@ -291,8 +291,6 @@ export class UserExporter { stream.once('readable', () => { if (errored) return - logger.error('Readable stream ' + archivePath) - this.archive.append(stream, { name: archivePath }) }) })