From a216c6233d46689f73a7c542e6170555b7f287b6 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 23 Mar 2018 09:46:08 +0100 Subject: [PATCH] Fallback to torrent file if there is an incorrect info hash --- .../assets/player/peertube-videojs-plugin.ts | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/client/src/assets/player/peertube-videojs-plugin.ts b/client/src/assets/player/peertube-videojs-plugin.ts index c99363fb5..f4064c4b2 100644 --- a/client/src/assets/player/peertube-videojs-plugin.ts +++ b/client/src/assets/player/peertube-videojs-plugin.ts @@ -302,9 +302,16 @@ class PeerTubePlugin extends Plugin { const previousVideoFile = this.currentVideoFile this.currentVideoFile = videoFile - console.log('Adding ' + videoFile.magnetUri + '.') - this.torrent = webtorrent.add(videoFile.magnetUri, torrent => { - console.log('Added ' + videoFile.magnetUri + '.') + this.addTorrent(this.currentVideoFile.magnetUri, previousVideoFile, done) + + this.trigger('videoFileUpdate') + } + + addTorrent (magnetOrTorrentUrl: string, previousVideoFile: VideoFile, done: Function) { + console.log('Adding ' + magnetOrTorrentUrl + '.') + + this.torrent = webtorrent.add(magnetOrTorrentUrl, torrent => { + console.log('Added ' + magnetOrTorrentUrl + '.') this.flushVideoFile(previousVideoFile) @@ -325,19 +332,25 @@ class PeerTubePlugin extends Plugin { }) this.torrent.on('error', err => this.handleError(err)) + this.torrent.on('warning', (err: any) => { // We don't support HTTP tracker but we don't care -> we use the web socket tracker if (err.message.indexOf('Unsupported tracker protocol') !== -1) return + // Users don't care about issues with WebRTC, but developers do so log it in the console if (err.message.indexOf('Ice connection failed') !== -1) { console.error(err) return } + // Magnet hash is not up to date with the torrent file, add directly the torrent file + if (err.message.indexOf('incorrect info hash') !== -1) { + console.error('Incorrect info hash detected, falling back to torrent file.') + return this.addTorrent(this.torrent['xs'], previousVideoFile, done) + } + return this.handleError(err) }) - - this.trigger('videoFileUpdate') } updateResolution (resolutionId: number) { -- 2.25.1