import * as videojs from 'video.js'
import * as WebTorrent from 'webtorrent'
+import { VideoConstant, VideoResolution } from '../../../../shared/models/videos'
import { VideoFile } from '../../../../shared/models/videos/video.model'
import { renderVideo } from './video-renderer'
options.selectable = true
super(player, options)
- const currentResolution = this.player_.peertube().getCurrentResolution()
- this.selected(this.options_.id === currentResolution)
+ const currentResolutionId = this.player_.peertube().getCurrentResolutionId()
+ this.selected(this.options_.id === currentResolutionId)
}
handleClick (event) {
menuItems.push(new ResolutionMenuItem(
this.player_,
{
- id: videoFile.resolution,
- label: videoFile.resolutionLabel,
+ id: videoFile.resolution.id,
+ label: videoFile.resolution.label,
src: videoFile.magnetUri,
- selected: videoFile.resolution === this.currentSelection
+ selected: videoFile.resolution.id === this.currentSelectionId
})
)
}
this.flushVideoFile(this.currentVideoFile, false)
}
- getCurrentResolution () {
- return this.currentVideoFile ? this.currentVideoFile.resolution : -1
+ getCurrentResolutionId () {
+ return this.currentVideoFile ? this.currentVideoFile.resolution.id : -1
}
getCurrentResolutionLabel () {
- return this.currentVideoFile ? this.currentVideoFile.resolutionLabel : ''
+ return this.currentVideoFile ? this.currentVideoFile.resolution.label : ''
}
updateVideoFile (videoFile?: VideoFile, done?: () => void) {
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)
})
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 (resolution) {
+ updateResolution (resolutionId: number) {
// Remember player state
const currentTime = this.player.currentTime()
const isPaused = this.player.paused()
this.player.bigPlayButton.hide()
}
- const newVideoFile = this.videoFiles.find(f => f.resolution === resolution)
+ const newVideoFile = this.videoFiles.find(f => f.resolution.id === resolutionId)
this.updateVideoFile(newVideoFile, () => {
this.player.currentTime(currentTime)
this.player.handleTechSeeked_()