]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Fix broken replay with long live video name
authorChocobozzz <me@florianbigard.com>
Thu, 29 Jun 2023 06:57:19 +0000 (08:57 +0200)
committerChocobozzz <me@florianbigard.com>
Thu, 29 Jun 2023 07:08:13 +0000 (09:08 +0200)
server/lib/job-queue/handlers/video-live-ending.ts
server/tests/api/live/live-save-replay.ts
shared/server-commands/videos/live.ts

index 814f313a3bb8d946905bbbce3fb1ffba571e0d28..49feb53f294383f86f1ddb5e3f87501b0531a070 100644 (file)
@@ -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,
index 8985c9b394c1e02adb05061895d8f6bed8aeca7b..d554cf208415b41aa831ea76587c8c939e6abcb6 100644 (file)
@@ -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
index 48464fb6110153f7aca4a370e675bd5c1c71f7e7..cebadb1dbb008b23a367cf772f55b88fd052052e 100644 (file)
@@ -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 {