diff options
Diffstat (limited to 'client/src')
-rw-r--r-- | client/src/app/+videos/+video-watch/video-watch.component.ts | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/client/src/app/+videos/+video-watch/video-watch.component.ts b/client/src/app/+videos/+video-watch/video-watch.component.ts index 1b2820810..f048edec4 100644 --- a/client/src/app/+videos/+video-watch/video-watch.component.ts +++ b/client/src/app/+videos/+video-watch/video-watch.component.ts | |||
@@ -15,7 +15,7 @@ import { VideoDownloadComponent } from '@app/shared/shared-video-miniature' | |||
15 | import { VideoPlaylist, VideoPlaylistService } from '@app/shared/shared-video-playlist' | 15 | import { VideoPlaylist, VideoPlaylistService } from '@app/shared/shared-video-playlist' |
16 | import { MetaService } from '@ngx-meta/core' | 16 | import { MetaService } from '@ngx-meta/core' |
17 | import { peertubeLocalStorage } from '@root-helpers/peertube-web-storage' | 17 | import { peertubeLocalStorage } from '@root-helpers/peertube-web-storage' |
18 | import { ServerConfig, UserVideoRateType, VideoCaption, VideoPrivacy, VideoState } from '@shared/models' | 18 | import { ServerConfig, ServerErrorCode, UserVideoRateType, VideoCaption, VideoPrivacy, VideoState } from '@shared/models' |
19 | import { getStoredP2PEnabled, getStoredTheater } from '../../../assets/player/peertube-player-local-storage' | 19 | import { getStoredP2PEnabled, getStoredTheater } from '../../../assets/player/peertube-player-local-storage' |
20 | import { | 20 | import { |
21 | CustomizationOptions, | 21 | CustomizationOptions, |
@@ -361,7 +361,24 @@ export class VideoWatchComponent implements OnInit, OnDestroy { | |||
361 | ]) | 361 | ]) |
362 | .pipe( | 362 | .pipe( |
363 | // If 401, the video is private or blocked so redirect to 404 | 363 | // If 401, the video is private or blocked so redirect to 404 |
364 | catchError(err => this.restExtractor.redirectTo404IfNotFound(err, [ 400, 401, 403, 404 ])) | 364 | catchError(err => { |
365 | if (err.body.errorCode === ServerErrorCode.DOES_NOT_RESPECT_FOLLOW_CONSTRAINTS && err.body.originUrl) { | ||
366 | const search = window.location.search | ||
367 | let originUrl = err.body.originUrl | ||
368 | if (search) originUrl += search | ||
369 | |||
370 | this.confirmService.confirm( | ||
371 | $localize`This video is not available on this instance. Do you want to be redirected on the origin instance: <a href="${originUrl}">${originUrl}</a>?`, | ||
372 | $localize`Redirection` | ||
373 | ).then(res => { | ||
374 | if (res === false) return this.restExtractor.redirectTo404IfNotFound(err, [ 400, 401, 403, 404 ]) | ||
375 | |||
376 | return window.location.href = originUrl | ||
377 | }) | ||
378 | } | ||
379 | |||
380 | return this.restExtractor.redirectTo404IfNotFound(err, [ 400, 401, 403, 404 ]) | ||
381 | }) | ||
365 | ) | 382 | ) |
366 | .subscribe(([ video, captionsResult ]) => { | 383 | .subscribe(([ video, captionsResult ]) => { |
367 | const queryParams = this.route.snapshot.queryParams | 384 | const queryParams = this.route.snapshot.queryParams |