Prevent error on highlighted thread

This commit is contained in:
Chocobozzz 2022-07-29 10:32:56 +02:00
parent 37b1d97f22
commit 5a9a56b78f
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
4 changed files with 27 additions and 5 deletions

View File

@ -5,6 +5,7 @@ import { AuthService, ComponentPagination, ConfirmService, hasMoreItems, Notifie
import { HooksService } from '@app/core/plugins/hooks.service' import { HooksService } from '@app/core/plugins/hooks.service'
import { Syndication, VideoDetails } from '@app/shared/shared-main' import { Syndication, VideoDetails } from '@app/shared/shared-main'
import { VideoComment, VideoCommentService, VideoCommentThreadTree } from '@app/shared/shared-video-comment' import { VideoComment, VideoCommentService, VideoCommentThreadTree } from '@app/shared/shared-video-comment'
import { PeerTubeProblemDocument, ServerErrorCode } from '@shared/models'
@Component({ @Component({
selector: 'my-video-comments', 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.syndicationItems = this.videoCommentService.getVideoCommentsFeeds(this.video)
this.loadMoreThreads() this.loadMoreThreads()
if (this.activatedRoute.params['threadId']) {
this.processHighlightedThread(+this.activatedRoute.params['threadId'])
}
} }
} }

View File

@ -242,6 +242,8 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
if (this.player) this.player.pause() if (this.player) this.player.pause()
this.video = undefined
const videoObs = this.hooks.wrapObsFun( const videoObs = this.hooks.wrapObsFun(
this.videoService.getVideo.bind(this.videoService), this.videoService.getVideo.bind(this.videoService),
{ videoId }, { videoId },

View File

@ -1,7 +1,7 @@
import express from 'express' import express from 'express'
import { VideoCommentModel } from '@server/models/video/video-comment' import { VideoCommentModel } from '@server/models/video/video-comment'
import { MVideoId } from '@server/types/models' 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) { async function doesVideoCommentThreadExist (idArg: number | string, video: MVideoId, res: express.Response) {
const id = parseInt(idArg + '', 10) const id = parseInt(idArg + '', 10)
@ -16,7 +16,10 @@ async function doesVideoCommentThreadExist (idArg: number | string, video: MVide
} }
if (videoComment.videoId !== video.id) { 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 return false
} }
@ -42,7 +45,10 @@ async function doesVideoCommentExist (idArg: number | string, video: MVideoId, r
} }
if (videoComment.videoId !== video.id) { 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 return false
} }

View File

@ -37,7 +37,9 @@ export const enum ServerErrorCode {
* A torrent should have at most one correct video file. Any more and we will * A torrent should have at most one correct video file. Any more and we will
* not be able to choose automatically. * 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'
} }
/** /**