From 0c31c33dcb0baaa8d3aeedb63336dfe2ae6e5585 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Sun, 23 Jul 2017 11:07:30 +0200 Subject: [PATCH] Better webtorrent error handling --- .../video-watch/video-watch.component.ts | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 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 05a2c296c..cd11aa33c 100644 --- a/client/src/app/videos/video-watch/video-watch.component.ts +++ b/client/src/app/videos/video-watch/video-watch.component.ts @@ -81,10 +81,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy { self.player = this }) - this.errorsSub = this.webTorrentService.errors.subscribe(err => { - const message = typeof err === 'string' ? err : err.message - this.notificationsService.error('Error', message) - }) + this.errorsSub = this.webTorrentService.errors.subscribe(err => this.handleError(err)) } ngOnDestroy () { @@ -117,7 +114,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy { // So we create a timer to inform the user the load is abnormally long this.errorTimer = window.setTimeout(() => this.loadTooLong(), VideoWatchComponent.LOADTIME_TOO_LONG) - this.webTorrentService.add(this.video.magnetUri, torrent => { + const torrent = this.webTorrentService.add(this.video.magnetUri, torrent => { // Clear the error timer window.clearTimeout(this.errorTimer) // Maybe the error was fired by the timer, so reset it @@ -143,6 +140,9 @@ export class VideoWatchComponent implements OnInit, OnDestroy { this.runInProgress(torrent) }) + + torrent.on('error', err => this.handleError(err)) + torrent.on('warning', err => this.handleError(err)) } setLike () { @@ -250,6 +250,19 @@ export class VideoWatchComponent implements OnInit, OnDestroy { return this.video.isBlackistableBy(this.authService.getUser()) } + private handleError (err: any) { + const errorMessage: string = typeof err === 'string' ? err : err.message + let message = '' + + if (errorMessage.indexOf('http error') !== -1) { + message = 'Cannot fetch video from server, maybe down.' + } else { + message = errorMessage + } + + this.notificationsService.error('Error', message) + } + private checkUserRating () { // Unlogged users do not have ratings if (this.isUserLoggedIn() === false) return