]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/assets/player/peertube-videojs-typings.ts
Fix videojs typings
[github/Chocobozzz/PeerTube.git] / client / src / assets / player / peertube-videojs-typings.ts
index 79a5a6c4d6c7c8bd2aec7baad21d4e4fa5e89ddf..9616dd326e85118109aac802b5fa456c65593ea5 100644 (file)
@@ -1,27 +1,81 @@
-// FIXME: something weird with our path definition in tsconfig and typings
-// @ts-ignore
-import * as videojs from 'video.js'
-
-import { VideoFile } from '../../../../shared/models/videos/video.model'
 import { PeerTubePlugin } from './peertube-plugin'
 import { WebTorrentPlugin } from './webtorrent/webtorrent-plugin'
 import { P2pMediaLoaderPlugin } from './p2p-media-loader/p2p-media-loader-plugin'
 import { PlayerMode } from './peertube-player-manager'
+import { RedundancyUrlManager } from './p2p-media-loader/redundancy-url-manager'
+import { VideoFile } from '@shared/models'
+import videojs from 'video.js/dist/alt/video.core.js'
+import { Config, Level } from 'hls.js'
+
+declare module 'video.js' {
+
+  export interface VideoJsPlayer {
+    srOptions_: HlsjsConfigHandlerOptions
+
+    theaterEnabled: boolean
+
+    // FIXME: add it to upstream typings
+    posterImage: {
+      show (): void
+      hide (): void
+    }
+
+    handleTechSeeked_ (): void
+
+    // Plugins
 
-declare namespace videojs {
-  interface Player {
     peertube (): PeerTubePlugin
+
     webtorrent (): WebTorrentPlugin
+
     p2pMediaLoader (): P2pMediaLoaderPlugin
+
+    contextmenuUI (options: any): any
+
+    bezels (): void
+
+    qualityLevels (): QualityLevels
+
+    textTracks (): TextTrackList & {
+      on: Function
+      tracks_: { kind: string, mode: string, language: string }[]
+    }
+
+    audioTracks (): AudioTrackList
+
+    dock (options: { title: string, description: string }): void
   }
 }
 
-interface VideoJSComponentInterface {
-  _player: videojs.Player
+export interface VideoJSTechHLS extends videojs.Tech {
+  hlsProvider: any // FIXME: typings
+}
+
+export interface HlsjsConfigHandlerOptions {
+  hlsjsConfig?: Config & { cueHandler: any }// FIXME: typings
+  captionConfig?: any // FIXME: typings
+
+  levelLabelHandler?: (level: Level) => string
+}
+
+type QualityLevelRepresentation = {
+  id: number
+  height: number
+
+  label?: string
+  width?: number
+  bandwidth?: number
+  bitrate?: number
+
+  enabled?: Function
+  _enabled: boolean
+}
 
-  new (player: videojs.Player, options?: any): any
+type QualityLevels = QualityLevelRepresentation[] & {
+  selectedIndex: number
+  selectedIndex_: number
 
-  registerComponent (name: string, obj: any): any
+  addQualityLevel (representation: QualityLevelRepresentation): void
 }
 
 type VideoJSCaption = {
@@ -41,12 +95,13 @@ type PeerTubePluginOptions = {
   autoplay: boolean
   videoViewUrl: string
   videoDuration: number
-  startTime: number | string
 
   userWatching?: UserWatching
   subtitle?: string
 
   videoCaptions: VideoJSCaption[]
+
+  stopTime: number | string
 }
 
 type WebtorrentPluginOptions = {
@@ -56,12 +111,16 @@ type WebtorrentPluginOptions = {
   videoDuration: number
 
   videoFiles: VideoFile[]
+
+  startTime: number | string
 }
 
 type P2PMediaLoaderPluginOptions = {
-  redundancyBaseUrls: string[]
+  redundancyUrlManager: RedundancyUrlManager
   type: string
   src: string
+
+  startTime: number | string
 }
 
 type VideoJSPluginOptions = {
@@ -72,9 +131,6 @@ type VideoJSPluginOptions = {
   p2pMediaLoader?: P2PMediaLoaderPluginOptions
 }
 
-// videojs typings don't have some method we need
-const videojsUntyped = videojs as any
-
 type LoadedQualityData = {
   qualitySwitchCallback: Function,
   qualityData: {
@@ -117,13 +173,13 @@ export {
   PlayerNetworkInfo,
   ResolutionUpdateData,
   AutoResolutionUpdateData,
-  VideoJSComponentInterface,
-  videojsUntyped,
   VideoJSCaption,
   UserWatching,
   PeerTubePluginOptions,
   WebtorrentPluginOptions,
   P2PMediaLoaderPluginOptions,
   VideoJSPluginOptions,
-  LoadedQualityData
+  LoadedQualityData,
+  QualityLevelRepresentation,
+  QualityLevels
 }