diff options
Diffstat (limited to 'client/src/assets/player')
-rw-r--r-- | client/src/assets/player/peertube-link-button.ts | 1 | ||||
-rw-r--r-- | client/src/assets/player/peertube-videojs-plugin.ts | 17 | ||||
-rw-r--r-- | client/src/assets/player/peertube-videojs-typings.ts | 2 | ||||
-rw-r--r-- | client/src/assets/player/resolution-menu-item.ts | 1 | ||||
-rw-r--r-- | client/src/assets/player/settings-menu-item.ts | 1 | ||||
-rw-r--r-- | client/src/assets/player/utils.ts | 25 |
6 files changed, 41 insertions, 6 deletions
diff --git a/client/src/assets/player/peertube-link-button.ts b/client/src/assets/player/peertube-link-button.ts index 26f8b9d73..715207bc0 100644 --- a/client/src/assets/player/peertube-link-button.ts +++ b/client/src/assets/player/peertube-link-button.ts | |||
@@ -1,3 +1,4 @@ | |||
1 | import * as videojs from 'video.js' | ||
1 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 2 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
2 | import { buildVideoLink } from './utils' | 3 | import { buildVideoLink } from './utils' |
3 | 4 | ||
diff --git a/client/src/assets/player/peertube-videojs-plugin.ts b/client/src/assets/player/peertube-videojs-plugin.ts index 9babe556a..b54f096b2 100644 --- a/client/src/assets/player/peertube-videojs-plugin.ts +++ b/client/src/assets/player/peertube-videojs-plugin.ts | |||
@@ -4,9 +4,16 @@ import { VideoFile } from '../../../../shared/models/videos/video.model' | |||
4 | import { renderVideo } from './video-renderer' | 4 | import { renderVideo } from './video-renderer' |
5 | import './settings-menu-button' | 5 | import './settings-menu-button' |
6 | import { PeertubePluginOptions, VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 6 | import { PeertubePluginOptions, VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
7 | import { getAverageBandwidth, getStoredMute, getStoredVolume, saveAverageBandwidth, saveMuteInStore, saveVolumeInStore } from './utils' | 7 | import { |
8 | import minBy from 'lodash-es/minBy' | 8 | getAverageBandwidth, |
9 | import maxBy from 'lodash-es/maxBy' | 9 | getStoredMute, |
10 | getStoredVolume, | ||
11 | saveAverageBandwidth, | ||
12 | saveMuteInStore, | ||
13 | saveVolumeInStore, | ||
14 | videoFileMaxByResolution, | ||
15 | videoFileMinByResolution | ||
16 | } from './utils' | ||
10 | import * as CacheChunkStore from 'cache-chunk-store' | 17 | import * as CacheChunkStore from 'cache-chunk-store' |
11 | import { PeertubeChunkStore } from './peertube-chunk-store' | 18 | import { PeertubeChunkStore } from './peertube-chunk-store' |
12 | 19 | ||
@@ -339,9 +346,9 @@ class PeerTubePlugin extends Plugin { | |||
339 | }) | 346 | }) |
340 | 347 | ||
341 | // If the download speed is too bad, return the lowest resolution we have | 348 | // If the download speed is too bad, return the lowest resolution we have |
342 | if (filteredFiles.length === 0) return minBy(this.videoFiles, 'resolution.id') | 349 | if (filteredFiles.length === 0) return videoFileMinByResolution(this.videoFiles) |
343 | 350 | ||
344 | return maxBy(filteredFiles, 'resolution.id') | 351 | return videoFileMaxByResolution(filteredFiles) |
345 | } | 352 | } |
346 | 353 | ||
347 | private getAndSaveActualDownloadSpeed () { | 354 | private getAndSaveActualDownloadSpeed () { |
diff --git a/client/src/assets/player/peertube-videojs-typings.ts b/client/src/assets/player/peertube-videojs-typings.ts index abdf333e1..50d6039ea 100644 --- a/client/src/assets/player/peertube-videojs-typings.ts +++ b/client/src/assets/player/peertube-videojs-typings.ts | |||
@@ -2,7 +2,7 @@ import * as videojs from 'video.js' | |||
2 | import { VideoFile } from '../../../../shared/models/videos/video.model' | 2 | import { VideoFile } from '../../../../shared/models/videos/video.model' |
3 | import { PeerTubePlugin } from './peertube-videojs-plugin' | 3 | import { PeerTubePlugin } from './peertube-videojs-plugin' |
4 | 4 | ||
5 | declare module 'video.js' { | 5 | declare namespace videojs { |
6 | interface Player { | 6 | interface Player { |
7 | peertube (): PeerTubePlugin | 7 | peertube (): PeerTubePlugin |
8 | } | 8 | } |
diff --git a/client/src/assets/player/resolution-menu-item.ts b/client/src/assets/player/resolution-menu-item.ts index 4b1ed0642..3fe1d8f0f 100644 --- a/client/src/assets/player/resolution-menu-item.ts +++ b/client/src/assets/player/resolution-menu-item.ts | |||
@@ -1,3 +1,4 @@ | |||
1 | import * as videojs from 'video.js' | ||
1 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 2 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
2 | 3 | ||
3 | const MenuItem: VideoJSComponentInterface = videojsUntyped.getComponent('MenuItem') | 4 | const MenuItem: VideoJSComponentInterface = videojsUntyped.getComponent('MenuItem') |
diff --git a/client/src/assets/player/settings-menu-item.ts b/client/src/assets/player/settings-menu-item.ts index f595fd459..88985e1ae 100644 --- a/client/src/assets/player/settings-menu-item.ts +++ b/client/src/assets/player/settings-menu-item.ts | |||
@@ -1,6 +1,7 @@ | |||
1 | // Author: Yanko Shterev | 1 | // Author: Yanko Shterev |
2 | // Thanks https://github.com/yshterev/videojs-settings-menu | 2 | // Thanks https://github.com/yshterev/videojs-settings-menu |
3 | 3 | ||
4 | import * as videojs from 'video.js' | ||
4 | import { toTitleCase } from './utils' | 5 | import { toTitleCase } from './utils' |
5 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 6 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
6 | 7 | ||
diff --git a/client/src/assets/player/utils.ts b/client/src/assets/player/utils.ts index ce7aaea2a..4eaf53720 100644 --- a/client/src/assets/player/utils.ts +++ b/client/src/assets/player/utils.ts | |||
@@ -1,4 +1,5 @@ | |||
1 | import { is18nLocale, isDefaultLocale } from '../../../../shared/models/i18n/i18n' | 1 | import { is18nLocale, isDefaultLocale } from '../../../../shared/models/i18n/i18n' |
2 | import { VideoFile } from '../../../../shared/models/videos' | ||
2 | 3 | ||
3 | function toTitleCase (str: string) { | 4 | function toTitleCase (str: string) { |
4 | return str.charAt(0).toUpperCase() + str.slice(1) | 5 | return str.charAt(0).toUpperCase() + str.slice(1) |
@@ -97,6 +98,28 @@ function copyToClipboard (text: string) { | |||
97 | document.body.removeChild(el) | 98 | document.body.removeChild(el) |
98 | } | 99 | } |
99 | 100 | ||
101 | function videoFileMaxByResolution (files: VideoFile[]) { | ||
102 | let max = files[0] | ||
103 | |||
104 | for (let i = 1; i < files.length; i++) { | ||
105 | const file = files[i] | ||
106 | if (max.resolution.id < file.resolution.id) max = file | ||
107 | } | ||
108 | |||
109 | return max | ||
110 | } | ||
111 | |||
112 | function videoFileMinByResolution (files: VideoFile[]) { | ||
113 | let min = files[0] | ||
114 | |||
115 | for (let i = 1; i < files.length; i++) { | ||
116 | const file = files[i] | ||
117 | if (min.resolution.id > file.resolution.id) min = file | ||
118 | } | ||
119 | |||
120 | return min | ||
121 | } | ||
122 | |||
100 | export { | 123 | export { |
101 | toTitleCase, | 124 | toTitleCase, |
102 | buildVideoLink, | 125 | buildVideoLink, |
@@ -107,6 +130,8 @@ export { | |||
107 | saveMuteInStore, | 130 | saveMuteInStore, |
108 | buildVideoEmbed, | 131 | buildVideoEmbed, |
109 | getStoredMute, | 132 | getStoredMute, |
133 | videoFileMaxByResolution, | ||
134 | videoFileMinByResolution, | ||
110 | copyToClipboard, | 135 | copyToClipboard, |
111 | isMobile, | 136 | isMobile, |
112 | bytes | 137 | bytes |