]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame_incremental - client/src/assets/player/peertube-videojs-typings.ts
Fix some old typing issues
[github/Chocobozzz/PeerTube.git] / client / src / assets / player / peertube-videojs-typings.ts
... / ...
CommitLineData
1import { HlsConfig, Level } from 'hls.js'
2import videojs from 'video.js'
3import { VideoFile, VideoPlaylist, VideoPlaylistElement } from '@shared/models'
4import { Html5Hlsjs } from './p2p-media-loader/hls-plugin'
5import { P2pMediaLoaderPlugin } from './p2p-media-loader/p2p-media-loader-plugin'
6import { RedundancyUrlManager } from './p2p-media-loader/redundancy-url-manager'
7import { PlayerMode } from './peertube-player-manager'
8import { PeerTubePlugin } from './peertube-plugin'
9import { PeerTubeResolutionsPlugin } from './peertube-resolutions-plugin'
10import { PlaylistPlugin } from './playlist/playlist-plugin'
11import { StatsCardOptions } from './stats/stats-card'
12import { StatsForNerdsPlugin } from './stats/stats-plugin'
13import { EndCardOptions } from './upnext/end-card'
14import { WebTorrentPlugin } from './webtorrent/webtorrent-plugin'
15
16declare module 'video.js' {
17
18 export interface VideoJsPlayer {
19 srOptions_: HlsjsConfigHandlerOptions
20
21 theaterEnabled: boolean
22
23 // FIXME: add it to upstream typings
24 posterImage: {
25 show (): void
26 hide (): void
27 }
28
29 handleTechSeeked_ (): void
30
31 // Plugins
32
33 peertube (): PeerTubePlugin
34
35 webtorrent (): WebTorrentPlugin
36
37 p2pMediaLoader (): P2pMediaLoaderPlugin
38
39 peertubeResolutions (): PeerTubeResolutionsPlugin
40
41 contextmenuUI (options: any): any
42
43 bezels (): void
44
45 stats (options?: StatsCardOptions): StatsForNerdsPlugin
46
47 textTracks (): TextTrackList & {
48 tracks_: (TextTrack & { id: string, label: string, src: string })[]
49 }
50
51 dock (options: { title: string, description: string }): void
52
53 upnext (options: Partial<EndCardOptions>): void
54
55 playlist (): PlaylistPlugin
56 }
57}
58
59export interface VideoJSTechHLS extends videojs.Tech {
60 hlsProvider: Html5Hlsjs
61}
62
63export interface HlsjsConfigHandlerOptions {
64 hlsjsConfig?: HlsConfig
65
66 levelLabelHandler?: (level: Level) => string
67}
68
69type PeerTubeResolution = {
70 id: number
71
72 height?: number
73 label?: string
74 width?: number
75 bitrate?: number
76
77 selected: boolean
78 selectCallback: () => void
79}
80
81type VideoJSCaption = {
82 label: string
83 language: string
84 src: string
85}
86
87type UserWatching = {
88 url: string
89 authorizationHeader: string
90}
91
92type PeerTubePluginOptions = {
93 mode: PlayerMode
94
95 autoplay: boolean
96 videoViewUrl: string
97 videoDuration: number
98
99 userWatching?: UserWatching
100 subtitle?: string
101
102 videoCaptions: VideoJSCaption[]
103
104 stopTime: number | string
105
106 isLive: boolean
107
108 videoUUID: string
109}
110
111type PlaylistPluginOptions = {
112 elements: VideoPlaylistElement[]
113
114 playlist: VideoPlaylist
115
116 getCurrentPosition: () => number
117
118 onItemClicked: (element: VideoPlaylistElement) => void
119}
120
121type NextPreviousVideoButtonOptions = {
122 type: 'next' | 'previous'
123 handler: () => void
124 isDisabled: () => boolean
125}
126
127type PeerTubeLinkButtonOptions = {
128 shortUUID: string
129}
130
131type WebtorrentPluginOptions = {
132 playerElement: HTMLVideoElement
133
134 autoplay: boolean
135 videoDuration: number
136
137 videoFiles: VideoFile[]
138
139 startTime: number | string
140}
141
142type P2PMediaLoaderPluginOptions = {
143 redundancyUrlManager: RedundancyUrlManager
144 type: string
145 src: string
146
147 startTime: number | string
148}
149
150type VideoJSPluginOptions = {
151 playlist?: PlaylistPluginOptions
152
153 peertube: PeerTubePluginOptions
154
155 webtorrent?: WebtorrentPluginOptions
156
157 p2pMediaLoader?: P2PMediaLoaderPluginOptions
158}
159
160type LoadedQualityData = {
161 qualitySwitchCallback: (resolutionId: number, type: 'video') => void
162 qualityData: {
163 video: {
164 id: number
165 label: string
166 selected: boolean
167 }[]
168 }
169}
170
171type ResolutionUpdateData = {
172 auto: boolean
173 resolutionId: number
174 id?: number
175}
176
177type AutoResolutionUpdateData = {
178 possible: boolean
179}
180
181type PlayerNetworkInfo = {
182 source: 'webtorrent' | 'p2p-media-loader'
183
184 http: {
185 downloadSpeed: number
186 uploadSpeed: number
187 downloaded: number
188 uploaded: number
189 }
190
191 p2p: {
192 downloadSpeed: number
193 uploadSpeed: number
194 downloaded: number
195 uploaded: number
196 numPeers: number
197 }
198
199 // In bytes
200 bandwidthEstimate: number
201}
202
203type PlaylistItemOptions = {
204 element: VideoPlaylistElement
205
206 onClicked: () => void
207}
208
209export {
210 PlayerNetworkInfo,
211 PlaylistItemOptions,
212 NextPreviousVideoButtonOptions,
213 ResolutionUpdateData,
214 AutoResolutionUpdateData,
215 PlaylistPluginOptions,
216 VideoJSCaption,
217 UserWatching,
218 PeerTubePluginOptions,
219 WebtorrentPluginOptions,
220 P2PMediaLoaderPluginOptions,
221 PeerTubeResolution,
222 VideoJSPluginOptions,
223 LoadedQualityData,
224 PeerTubeLinkButtonOptions
225}