]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/assets/player/videojs-components/p2p-info-button.ts
Add hls support on server
[github/Chocobozzz/PeerTube.git] / client / src / assets / player / videojs-components / p2p-info-button.ts
CommitLineData
3b6f205c 1import { PlayerNetworkInfo, VideoJSComponentInterface, videojsUntyped } from '../peertube-videojs-typings'
2adfc7ea 2import { bytes } from '../utils'
c6352f2c
C
3
4const Button: VideoJSComponentInterface = videojsUntyped.getComponent('Button')
2adfc7ea 5class P2pInfoButton extends Button {
1a49822c 6
c6352f2c
C
7 createEl () {
8 const div = videojsUntyped.dom.createEl('div', {
9 className: 'vjs-peertube'
10 })
11 const subDivWebtorrent = videojsUntyped.dom.createEl('div', {
12 className: 'vjs-peertube-hidden' // Hide the stats before we get the info
13 })
14 div.appendChild(subDivWebtorrent)
15
16 const downloadIcon = videojsUntyped.dom.createEl('span', {
17 className: 'icon icon-download'
18 })
19 subDivWebtorrent.appendChild(downloadIcon)
20
21 const downloadSpeedText = videojsUntyped.dom.createEl('span', {
22 className: 'download-speed-text'
23 })
24 const downloadSpeedNumber = videojsUntyped.dom.createEl('span', {
25 className: 'download-speed-number'
26 })
27 const downloadSpeedUnit = videojsUntyped.dom.createEl('span')
28 downloadSpeedText.appendChild(downloadSpeedNumber)
29 downloadSpeedText.appendChild(downloadSpeedUnit)
30 subDivWebtorrent.appendChild(downloadSpeedText)
31
32 const uploadIcon = videojsUntyped.dom.createEl('span', {
33 className: 'icon icon-upload'
34 })
35 subDivWebtorrent.appendChild(uploadIcon)
36
37 const uploadSpeedText = videojsUntyped.dom.createEl('span', {
38 className: 'upload-speed-text'
39 })
40 const uploadSpeedNumber = videojsUntyped.dom.createEl('span', {
41 className: 'upload-speed-number'
42 })
43 const uploadSpeedUnit = videojsUntyped.dom.createEl('span')
44 uploadSpeedText.appendChild(uploadSpeedNumber)
45 uploadSpeedText.appendChild(uploadSpeedUnit)
46 subDivWebtorrent.appendChild(uploadSpeedText)
47
48 const peersText = videojsUntyped.dom.createEl('span', {
49 className: 'peers-text'
50 })
51 const peersNumber = videojsUntyped.dom.createEl('span', {
52 className: 'peers-number'
53 })
54 subDivWebtorrent.appendChild(peersNumber)
55 subDivWebtorrent.appendChild(peersText)
56
57 const subDivHttp = videojsUntyped.dom.createEl('div', {
58 className: 'vjs-peertube-hidden'
59 })
60 const subDivHttpText = videojsUntyped.dom.createEl('span', {
1ee156b2 61 className: 'http-fallback',
c6352f2c
C
62 textContent: 'HTTP'
63 })
c6352f2c
C
64
65 subDivHttp.appendChild(subDivHttpText)
c6352f2c
C
66 div.appendChild(subDivHttp)
67
3b6f205c 68 this.player_.on('p2pInfo', (event: any, data: PlayerNetworkInfo) => {
c6352f2c
C
69 // We are in HTTP fallback
70 if (!data) {
71 subDivHttp.className = 'vjs-peertube-displayed'
72 subDivWebtorrent.className = 'vjs-peertube-hidden'
73
74 return
75 }
76
3b6f205c 77 const p2pStats = data.p2p
09209296 78 const httpStats = data.http
3b6f205c 79
09209296
C
80 const downloadSpeed = bytes(p2pStats.downloadSpeed + httpStats.downloadSpeed)
81 const uploadSpeed = bytes(p2pStats.uploadSpeed + httpStats.uploadSpeed)
82 const totalDownloaded = bytes(p2pStats.downloaded + httpStats.downloaded)
83 const totalUploaded = bytes(p2pStats.uploaded + httpStats.uploaded)
3b6f205c 84 const numPeers = p2pStats.numPeers
c6352f2c 85
1b952dd4 86 subDivWebtorrent.title = this.player_.localize('Total downloaded: ') + totalDownloaded.join(' ') + '\n' +
1a49822c
C
87 this.player_.localize('Total uploaded: ' + totalUploaded.join(' '))
88
c6352f2c
C
89 downloadSpeedNumber.textContent = downloadSpeed[ 0 ]
90 downloadSpeedUnit.textContent = ' ' + downloadSpeed[ 1 ]
91
92 uploadSpeedNumber.textContent = uploadSpeed[ 0 ]
93 uploadSpeedUnit.textContent = ' ' + uploadSpeed[ 1 ]
94
95 peersNumber.textContent = numPeers
09209296 96 peersText.textContent = ' ' + (numPeers > 1 ? this.player_.localize('peers') : this.player_.localize('peer'))
c6352f2c
C
97
98 subDivHttp.className = 'vjs-peertube-hidden'
99 subDivWebtorrent.className = 'vjs-peertube-displayed'
100 })
101
102 return div
103 }
104}
2adfc7ea 105Button.registerComponent('P2PInfoButton', P2pInfoButton)