X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=client%2Fsrc%2Fassets%2Fplayer%2Fpeertube-videojs-typings.ts;h=bd6db4ffc69c0f2a3caadf8384c79a5bfb637bbb;hb=10ef089102f2225c5ec3ed426bc612e4f2bc8655;hp=abdf333e11244f4ec5d44f80dc6db4d4421a26ab;hpb=0030284b0df2983914291d6fe83675e2aa892e6a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/assets/player/peertube-videojs-typings.ts b/client/src/assets/player/peertube-videojs-typings.ts index abdf333e1..bd6db4ffc 100644 --- a/client/src/assets/player/peertube-videojs-typings.ts +++ b/client/src/assets/player/peertube-videojs-typings.ts @@ -1,35 +1,225 @@ -import * as videojs from 'video.js' -import { VideoFile } from '../../../../shared/models/videos/video.model' -import { PeerTubePlugin } from './peertube-videojs-plugin' +import { HlsConfig, Level } from 'hls.js' +import videojs from 'video.js' +import { VideoFile, VideoPlaylist, VideoPlaylistElement } from '@shared/models' +import { P2pMediaLoaderPlugin } from './p2p-media-loader/p2p-media-loader-plugin' +import { RedundancyUrlManager } from './p2p-media-loader/redundancy-url-manager' +import { PlayerMode } from './peertube-player-manager' +import { PeerTubePlugin } from './peertube-plugin' +import { PeerTubeResolutionsPlugin } from './peertube-resolutions-plugin' +import { PlaylistPlugin } from './playlist/playlist-plugin' +import { StatsCardOptions } from './stats/stats-card' +import { StatsForNerdsPlugin } from './stats/stats-plugin' +import { EndCardOptions } from './upnext/end-card' +import { WebTorrentPlugin } from './webtorrent/webtorrent-plugin' declare module 'video.js' { - interface Player { + + export interface VideoJsPlayer { + srOptions_: HlsjsConfigHandlerOptions + + theaterEnabled: boolean + + // FIXME: add it to upstream typings + posterImage: { + show (): void + hide (): void + } + + handleTechSeeked_ (): void + + // Plugins + peertube (): PeerTubePlugin + + webtorrent (): WebTorrentPlugin + + p2pMediaLoader (): P2pMediaLoaderPlugin + + peertubeResolutions (): PeerTubeResolutionsPlugin + + contextmenuUI (options: any): any + + bezels (): void + + stats (options?: StatsCardOptions): StatsForNerdsPlugin + + textTracks (): TextTrackList & { + tracks_: (TextTrack & { id: string, label: string, src: string })[] + } + + dock (options: { title: string, description: string }): void + + upnext (options: Partial): void + + playlist (): PlaylistPlugin } } -interface VideoJSComponentInterface { - _player: videojs.Player +export interface VideoJSTechHLS extends videojs.Tech { + hlsProvider: any // FIXME: typings +} - new (player: videojs.Player, options?: any) +export interface HlsjsConfigHandlerOptions { + hlsjsConfig?: HlsConfig & { cueHandler: any }// FIXME: typings + captionConfig?: any // FIXME: typings - registerComponent (name: string, obj: any) + levelLabelHandler?: (level: Level) => string } -type PeertubePluginOptions = { - videoFiles: VideoFile[] - playerElement: HTMLVideoElement +type PeerTubeResolution = { + id: number + + height?: number + label?: string + width?: number + bitrate?: number + + selected: boolean + selectCallback: () => void +} + +type VideoJSCaption = { + label: string + language: string + src: string +} + +type UserWatching = { + url: string + authorizationHeader: string +} + +type PeerTubePluginOptions = { + mode: PlayerMode + + autoplay: boolean videoViewUrl: string videoDuration: number - startTime: number + + userWatching?: UserWatching + subtitle?: string + + videoCaptions: VideoJSCaption[] + + stopTime: number | string + + isLive: boolean + + videoUUID: string +} + +type PlaylistPluginOptions = { + elements: VideoPlaylistElement[] + + playlist: VideoPlaylist + + getCurrentPosition: () => number + + onItemClicked: (element: VideoPlaylistElement) => void +} + +type NextPreviousVideoButtonOptions = { + type: 'next' | 'previous' + handler: () => void + isDisabled: () => boolean +} + +type PeerTubeLinkButtonOptions = { + shortUUID: string +} + +type WebtorrentPluginOptions = { + playerElement: HTMLVideoElement + autoplay: boolean + videoDuration: number + + videoFiles: VideoFile[] + + startTime: number | string } -// videojs typings don't have some method we need -const videojsUntyped = videojs as any +type P2PMediaLoaderPluginOptions = { + redundancyUrlManager: RedundancyUrlManager + type: string + src: string + + startTime: number | string +} + +type VideoJSPluginOptions = { + playlist?: PlaylistPluginOptions + + peertube: PeerTubePluginOptions + + webtorrent?: WebtorrentPluginOptions + + p2pMediaLoader?: P2PMediaLoaderPluginOptions +} + +type LoadedQualityData = { + qualitySwitchCallback: (resolutionId: number, type: 'video') => void + qualityData: { + video: { + id: number + label: string + selected: boolean + }[] + } +} + +type ResolutionUpdateData = { + auto: boolean + resolutionId: number + id?: number +} + +type AutoResolutionUpdateData = { + possible: boolean +} + +type PlayerNetworkInfo = { + source: 'webtorrent' | 'p2p-media-loader' + + http: { + downloadSpeed: number + uploadSpeed: number + downloaded: number + uploaded: number + } + + p2p: { + downloadSpeed: number + uploadSpeed: number + downloaded: number + uploaded: number + numPeers: number + } + + // In bytes + bandwidthEstimate: number +} + +type PlaylistItemOptions = { + element: VideoPlaylistElement + + onClicked: () => void +} export { - VideoJSComponentInterface, - PeertubePluginOptions, - videojsUntyped + PlayerNetworkInfo, + PlaylistItemOptions, + NextPreviousVideoButtonOptions, + ResolutionUpdateData, + AutoResolutionUpdateData, + PlaylistPluginOptions, + VideoJSCaption, + UserWatching, + PeerTubePluginOptions, + WebtorrentPluginOptions, + P2PMediaLoaderPluginOptions, + PeerTubeResolution, + VideoJSPluginOptions, + LoadedQualityData, + PeerTubeLinkButtonOptions }