Fix is managaeble for channels
[oweals/peertube.git] / client / src / assets / player / peertube-videojs-typings.ts
1 // FIXME: something weird with our path definition in tsconfig and typings
2 // @ts-ignore
3 import * as videojs from 'video.js'
4
5 import { PeerTubePlugin } from './peertube-plugin'
6 import { WebTorrentPlugin } from './webtorrent/webtorrent-plugin'
7 import { P2pMediaLoaderPlugin } from './p2p-media-loader/p2p-media-loader-plugin'
8 import { PlayerMode } from './peertube-player-manager'
9 import { RedundancyUrlManager } from './p2p-media-loader/redundancy-url-manager'
10 import { VideoFile } from '@shared/models'
11
12 declare namespace videojs {
13   interface Player {
14     peertube (): PeerTubePlugin
15     webtorrent (): WebTorrentPlugin
16     p2pMediaLoader (): P2pMediaLoaderPlugin
17   }
18 }
19
20 interface VideoJSComponentInterface {
21   _player: videojs.Player
22
23   new (player: videojs.Player, options?: any): any
24
25   registerComponent (name: string, obj: any): any
26 }
27
28 type VideoJSCaption = {
29   label: string
30   language: string
31   src: string
32 }
33
34 type UserWatching = {
35   url: string,
36   authorizationHeader: string
37 }
38
39 type PeerTubePluginOptions = {
40   mode: PlayerMode
41
42   autoplay: boolean
43   videoViewUrl: string
44   videoDuration: number
45
46   userWatching?: UserWatching
47   subtitle?: string
48
49   videoCaptions: VideoJSCaption[]
50
51   stopTime: number | string
52 }
53
54 type WebtorrentPluginOptions = {
55   playerElement: HTMLVideoElement
56
57   autoplay: boolean
58   videoDuration: number
59
60   videoFiles: VideoFile[]
61
62   startTime: number | string
63 }
64
65 type P2PMediaLoaderPluginOptions = {
66   redundancyUrlManager: RedundancyUrlManager
67   type: string
68   src: string
69
70   startTime: number | string
71 }
72
73 type VideoJSPluginOptions = {
74   peertube: PeerTubePluginOptions
75
76   webtorrent?: WebtorrentPluginOptions
77
78   p2pMediaLoader?: P2PMediaLoaderPluginOptions
79 }
80
81 // videojs typings don't have some method we need
82 const videojsUntyped = videojs as any
83
84 type LoadedQualityData = {
85   qualitySwitchCallback: Function,
86   qualityData: {
87     video: {
88       id: number
89       label: string
90       selected: boolean
91     }[]
92   }
93 }
94
95 type ResolutionUpdateData = {
96   auto: boolean,
97   resolutionId: number
98   id?: number
99 }
100
101 type AutoResolutionUpdateData = {
102   possible: boolean
103 }
104
105 type PlayerNetworkInfo = {
106   http: {
107     downloadSpeed: number
108     uploadSpeed: number
109     downloaded: number
110     uploaded: number
111   }
112
113   p2p: {
114     downloadSpeed: number
115     uploadSpeed: number
116     downloaded: number
117     uploaded: number
118     numPeers: number
119   }
120 }
121
122 export {
123   PlayerNetworkInfo,
124   ResolutionUpdateData,
125   AutoResolutionUpdateData,
126   VideoJSComponentInterface,
127   videojsUntyped,
128   VideoJSCaption,
129   UserWatching,
130   PeerTubePluginOptions,
131   WebtorrentPluginOptions,
132   P2PMediaLoaderPluginOptions,
133   VideoJSPluginOptions,
134   LoadedQualityData
135 }