]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Update torrents info name on video update
authorChocobozzz <me@florianbigard.com>
Wed, 8 Dec 2021 10:32:45 +0000 (11:32 +0100)
committerChocobozzz <me@florianbigard.com>
Wed, 8 Dec 2021 15:12:49 +0000 (16:12 +0100)
client/src/app/menu/menu.component.ts
server/controllers/api/videos/update.ts
server/helpers/webtorrent.ts
server/middlewares/error.ts

index bcc88487856d9aff1877b2bbcd9bdeb2e992e095..d5ddc29cbe2508343d8eb585ae313cb268ab6378 100644 (file)
@@ -131,7 +131,7 @@ export class MenuComponent implements OnInit {
   }
 
   getExternalLoginHref () {
-    if (this.serverConfig.client.menu.login.redirectOnSingleExternalAuth !== true) return undefined
+    if (!this.serverConfig || this.serverConfig.client.menu.login.redirectOnSingleExternalAuth !== true) return undefined
 
     const externalAuths = this.serverConfig.plugin.registeredExternalAuths
     if (externalAuths.length !== 1) return undefined
index 6f14a678828869ac34415d18b7cdebb88185e95a..c0eb4ebee2f2c99020a97ccb6b43439f986b367c 100644 (file)
@@ -69,7 +69,7 @@ async function updateVideo (req: express.Request, res: express.Response) {
   })
 
   try {
-    const videoInstanceUpdated = await sequelizeTypescript.transaction(async t => {
+    const { videoInstanceUpdated, isNewVideo } = await sequelizeTypescript.transaction(async t => {
       // Refresh video since thumbnails to prevent concurrent updates
       const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoFromReq.id, t)
 
@@ -138,8 +138,6 @@ async function updateVideo (req: express.Request, res: express.Response) {
         transaction: t
       })
 
-      await federateVideoIfNeeded(videoInstanceUpdated, isNewVideo, t)
-
       auditLogger.update(
         getAuditIdFromRes(res),
         new VideoAuditView(videoInstanceUpdated.toFormattedDetailsJSON()),
@@ -147,10 +145,13 @@ async function updateVideo (req: express.Request, res: express.Response) {
       )
       logger.info('Video with name %s and uuid %s updated.', video.name, video.uuid, lTags(video.uuid))
 
-      return videoInstanceUpdated
+      return { videoInstanceUpdated, isNewVideo }
     })
 
     if (videoInfoToUpdate.name) await updateTorrentsMetadata(videoInstanceUpdated)
+
+    await federateVideoIfNeeded(videoInstanceUpdated, isNewVideo, undefined)
+
     if (wasConfidentialVideo) Notifier.Instance.notifyOnNewVideoIfNeeded(videoInstanceUpdated)
 
     Hooks.runAction('action:api.video.updated', { video: videoInstanceUpdated, body: req.body, req, res })
@@ -203,5 +204,7 @@ function updateSchedule (videoInstance: MVideoFullLight, videoInfoToUpdate: Vide
 async function updateTorrentsMetadata (video: MVideoFullLight) {
   for (const file of video.getAllFiles()) {
     await updateTorrentMetadata(video, file)
+
+    await file.save()
   }
 }
index b350c9718784f12c20cb2b282e118c2382d392b0..ecc703646afb879621ce6403a6510e8204e701e0 100644 (file)
@@ -14,7 +14,7 @@ import { MVideo } from '@server/types/models/video/video'
 import { MVideoFile, MVideoFileRedundanciesOpt } from '@server/types/models/video/video-file'
 import { MStreamingPlaylistVideo } from '@server/types/models/video/video-streaming-playlist'
 import { CONFIG } from '../initializers/config'
-import { promisify2 } from './core-utils'
+import { promisify2, sha1 } from './core-utils'
 import { logger } from './logger'
 import { generateVideoImportTmpPath } from './utils'
 import { extractVideo } from './video'
@@ -145,6 +145,7 @@ async function updateTorrentMetadata (videoOrPlaylist: MVideo | MStreamingPlayli
   await remove(join(CONFIG.STORAGE.TORRENTS_DIR, videoFile.torrentFilename))
 
   videoFile.torrentFilename = newTorrentFilename
+  videoFile.infoHash = sha1(encode(decoded.info))
 }
 
 function generateMagnetUri (
index 6c52ce7bd98f7fa98e7d551e07249991d6248002..34c87a26d8dc7522670c02b357c0d3a095d3c8de 100644 (file)
@@ -1,5 +1,6 @@
 import express from 'express'
 import { ProblemDocument, ProblemDocumentExtension } from 'http-problem-details'
+import { logger } from '@server/helpers/logger'
 import { HttpStatusCode } from '@shared/models'
 
 function apiFailMiddleware (req: express.Request, res: express.Response, next: express.NextFunction) {
@@ -18,7 +19,8 @@ function apiFailMiddleware (req: express.Request, res: express.Response, next: e
 
     res.status(status)
     res.setHeader('Content-Type', 'application/problem+json')
-    res.json(new ProblemDocument({
+
+    const json = new ProblemDocument({
       status,
       title,
       instance,
@@ -28,7 +30,11 @@ function apiFailMiddleware (req: express.Request, res: express.Response, next: e
       type: type
         ? `https://docs.joinpeertube.org/api-rest-reference.html#section/Errors/${type}`
         : undefined
-    }, extension))
+    }, extension)
+
+    logger.debug('Bad HTTP request.', { json })
+
+    res.json(json)
   }
 
   if (next) next()