From ae22c59f14d0d553f60b281948b6c232c2aca178 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 29 Jun 2023 08:57:19 +0200 Subject: Fix broken replay with long live video name --- server/lib/job-queue/handlers/video-live-ending.ts | 9 ++++++++- server/tests/api/live/live-save-replay.ts | 2 +- shared/server-commands/videos/live.ts | 9 ++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/server/lib/job-queue/handlers/video-live-ending.ts b/server/lib/job-queue/handlers/video-live-ending.ts index 814f313a3..49feb53f2 100644 --- a/server/lib/job-queue/handlers/video-live-ending.ts +++ b/server/lib/job-queue/handlers/video-live-ending.ts @@ -20,6 +20,8 @@ import { MVideo, MVideoLive, MVideoLiveSession, MVideoWithAllFiles } from '@serv import { ffprobePromise, getAudioStream, getVideoStreamDimensionsInfo, getVideoStreamFPS } from '@shared/ffmpeg' import { ThumbnailType, VideoLiveEndingPayload, VideoState } from '@shared/models' import { logger, loggerTagsFactory } from '../../../helpers/logger' +import { peertubeTruncate } from '@server/helpers/core-utils' +import { CONSTRAINTS_FIELDS } from '@server/initializers/constants' const lTags = loggerTagsFactory('live', 'job') @@ -88,8 +90,13 @@ async function saveReplayToExternalVideo (options: { const replaySettings = await VideoLiveReplaySettingModel.load(liveSession.replaySettingId) + const videoNameSuffix = ` - ${new Date(publishedAt).toLocaleString()}` + const truncatedVideoName = peertubeTruncate(liveVideo.name, { + length: CONSTRAINTS_FIELDS.VIDEOS.NAME.max - videoNameSuffix.length + }) + const replayVideo = new VideoModel({ - name: `${liveVideo.name} - ${new Date(publishedAt).toLocaleString()}`, + name: truncatedVideoName + videoNameSuffix, isLive: false, state: VideoState.TO_TRANSCODE, duration: 0, diff --git a/server/tests/api/live/live-save-replay.ts b/server/tests/api/live/live-save-replay.ts index 8985c9b39..d554cf208 100644 --- a/server/tests/api/live/live-save-replay.ts +++ b/server/tests/api/live/live-save-replay.ts @@ -38,7 +38,7 @@ describe('Save replay setting', function () { const attributes: LiveVideoCreate = { channelId: servers[0].store.channel.id, privacy: VideoPrivacy.PUBLIC, - name: 'my super live', + name: 'live'.repeat(30), saveReplay: options.replay, replaySettings: options.replaySettings, permanentLive: options.permanent diff --git a/shared/server-commands/videos/live.ts b/shared/server-commands/videos/live.ts index 48464fb61..cebadb1db 100644 --- a/shared/server-commands/videos/live.ts +++ b/shared/server-commands/videos/live.ts @@ -1,4 +1,5 @@ import ffmpeg, { FfmpegCommand } from 'fluent-ffmpeg' +import { truncate } from 'lodash' import { buildAbsoluteFixturePath, wait } from '@shared/core-utils' import { VideoDetails, VideoInclude, VideoPrivacy } from '@shared/models' import { PeerTubeServer } from '../server/server' @@ -104,7 +105,13 @@ async function findExternalSavedVideo (server: PeerTubeServer, liveDetails: Vide const { data } = await server.videos.list({ token: server.accessToken, sort: '-publishedAt', include, privacyOneOf }) - return data.find(v => v.name === liveDetails.name + ' - ' + new Date(liveDetails.publishedAt).toLocaleString()) + const videoNameSuffix = ` - ${new Date(liveDetails.publishedAt).toLocaleString()}` + const truncatedVideoName = truncate(liveDetails.name, { + length: 120 - videoNameSuffix.length + }) + const toFind = truncatedVideoName + videoNameSuffix + + return data.find(v => v.name === toFind) } export { -- cgit v1.2.3