]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Prevent error on highlighted thread
authorChocobozzz <me@florianbigard.com>
Fri, 29 Jul 2022 08:32:56 +0000 (10:32 +0200)
committerChocobozzz <me@florianbigard.com>
Fri, 29 Jul 2022 08:32:56 +0000 (10:32 +0200)
client/src/app/+videos/+video-watch/shared/comment/video-comments.component.ts
client/src/app/+videos/+video-watch/video-watch.component.ts
server/middlewares/validators/shared/video-comments.ts
shared/models/server/server-error-code.enum.ts

index 1652fd3c4c0a8f78e34c247776030e1e564852cd..108ad63e33fac46387d582477dbf1e7e831aed86 100644 (file)
@@ -5,6 +5,7 @@ import { AuthService, ComponentPagination, ConfirmService, hasMoreItems, Notifie
 import { HooksService } from '@app/core/plugins/hooks.service'
 import { Syndication, VideoDetails } from '@app/shared/shared-main'
 import { VideoComment, VideoCommentService, VideoCommentThreadTree } from '@app/shared/shared-video-comment'
+import { PeerTubeProblemDocument, ServerErrorCode } from '@shared/models'
 
 @Component({
   selector: 'my-video-comments',
@@ -104,7 +105,14 @@ export class VideoCommentsComponent implements OnInit, OnChanges, OnDestroy {
         }
       },
 
-      error: err => this.notifier.error(err.message)
+      error: err => {
+        // We may try to fetch highlighted thread of another video, skip the error if it is the case
+        // We'll retry the request on video Input() change
+        const errorBody = err.body as PeerTubeProblemDocument
+        if (highlightThread && errorBody?.code === ServerErrorCode.COMMENT_NOT_ASSOCIATED_TO_VIDEO) return
+
+        this.notifier.error(err.message)
+      }
     })
   }
 
@@ -254,6 +262,10 @@ export class VideoCommentsComponent implements OnInit, OnChanges, OnDestroy {
 
       this.syndicationItems = this.videoCommentService.getVideoCommentsFeeds(this.video)
       this.loadMoreThreads()
+
+      if (this.activatedRoute.params['threadId']) {
+        this.processHighlightedThread(+this.activatedRoute.params['threadId'])
+      }
     }
   }
 
index 292ce644125fed4386160d65ce463fe864e38a21..8d9c08ab36edf9659f617443b64bb1bdd5656850 100644 (file)
@@ -242,6 +242,8 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
 
     if (this.player) this.player.pause()
 
+    this.video = undefined
+
     const videoObs = this.hooks.wrapObsFun(
       this.videoService.getVideo.bind(this.videoService),
       { videoId },
index 386ae911f25e31ac4f5ebd7906e91b4e7b56dcd6..8d1a162940dcb2c81ed8e2dd58e9befb24796316 100644 (file)
@@ -1,7 +1,7 @@
 import express from 'express'
 import { VideoCommentModel } from '@server/models/video/video-comment'
 import { MVideoId } from '@server/types/models'
-import { HttpStatusCode } from '@shared/models'
+import { HttpStatusCode, ServerErrorCode } from '@shared/models'
 
 async function doesVideoCommentThreadExist (idArg: number | string, video: MVideoId, res: express.Response) {
   const id = parseInt(idArg + '', 10)
@@ -16,7 +16,10 @@ async function doesVideoCommentThreadExist (idArg: number | string, video: MVide
   }
 
   if (videoComment.videoId !== video.id) {
-    res.fail({ message: 'Video comment is not associated to this video.' })
+    res.fail({
+      type: ServerErrorCode.COMMENT_NOT_ASSOCIATED_TO_VIDEO,
+      message: 'Video comment is not associated to this video.'
+    })
     return false
   }
 
@@ -42,7 +45,10 @@ async function doesVideoCommentExist (idArg: number | string, video: MVideoId, r
   }
 
   if (videoComment.videoId !== video.id) {
-    res.fail({ message: 'Video comment is not associated to this video.' })
+    res.fail({
+      type: ServerErrorCode.COMMENT_NOT_ASSOCIATED_TO_VIDEO,
+      message: 'Video comment is not associated to this video.'
+    })
     return false
   }
 
index 115421d4d5fa65341c8113ff8c4c16dfb69fbbf3..0e70ea0a753e6d220e6dd2307dc8ae03c71e7b31 100644 (file)
@@ -37,7 +37,9 @@ export const enum ServerErrorCode {
    * A torrent should have at most one correct video file. Any more and we will
    * not be able to choose automatically.
    */
-  INCORRECT_FILES_IN_TORRENT = 'incorrect_files_in_torrent'
+  INCORRECT_FILES_IN_TORRENT = 'incorrect_files_in_torrent',
+
+  COMMENT_NOT_ASSOCIATED_TO_VIDEO = 'comment_not_associated_to_video'
 }
 
 /**